想要挖掘一个漏洞我们首先就要知道这个漏洞是如何产生的。
1.漏洞产生原理
远程系统命令执行
是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,并且为了方便,让应用去调用代码或者系统命令执行函数去处理,同时没有考虑用户是否可以控制这些函数的参数问题,没有做好检测和过滤。
远程代码执行
因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。
2.漏洞利用
以PHP为例,system、exec、shell_exec、passthu、popen、proc_popen等函数可以执行系统命令。当我们可以控制这些函数的参数时,就能运行我们想运行的命令,从而进行攻击。
3.靶场案例讲解——使用pikachu靶场
第1关 exec “ping”
远程系统命令执行
后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。
知道是命令执行了,首先要知道是什么操作系统,判断服务器的系统(1.通过ipconfig/ifconfig辨别,2.通过大小写区分来辨别,这里是windows系统,3.通过抓包分析(推荐)4.通过nmap扫描5.通过ping命令的ttl值判断)。
由于windows和linux有3个命令连接符是相同的(|,||,&&),因此在不知道目标的具体操作系统的情况下,可以先用这三种测试,首先使用管道符:“|”
管道符
① “|”:直接执行后面的语句(前面的语句是错是对无关紧要)。
② “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
③ “&”:两条命令都执行,前面的语句可真可假。
④ “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
输入payload:127.0.0.1|ipconfig
由此可判断出是windows系统
然后就可以输入windows命令:type 任意文件路径。查看任意文件内容了
输入payload:127.0.0.1|type C:Windowswin.ini
成功查看文件内容。
第2关 exec “eval”
远程代码执行
后台把用户的输入作为代码的一部分进行执行,造成了远程代码执行漏洞。
题目很明显了,是代码执行,所以直接上payload
输入payload:phpinfo();
phpinfo()函数被成功执行
根据代码执行这个漏洞,我们可以通过此处上传一句话木马。
输入payload:fputs(fopen('xiaoheizi.php','w'),'<?php assert($_POST[xiaoheizi]);?>'); 意思是写入一个叫xiaoheizi.php权限为可读内容为<?php assert($_POST[xiaoheizi]);?>的文件。
点击提交之后页面回显没有什么特别,但是到本关目录可以发现木马文件已经上传成功了。
然后使用蚁剑成功连接
打开靶场根目录里的源文件,可以看到不存在任何校验。直接把输入的内容放在 eval() 函数中。
4.危害
可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
5.防护
尽量不使用命令执行函数。
不让用户控制参数。
执行前做好检测和过滤。
原文始发于微信公众号(小黑子安全):REC漏洞(远程命令/代码执行)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论