[16]-SQL注入之HTTP文件头注入
一、HTTP头注入
1.HTTP头注入
- 隐蔽的注入点
所有web层与数据库的交互的输入,只要没严格审计,都有可能存在注入点,但可能比较隐蔽- 场景示例---HTTP头注入
访问webserver,会从http头部提取出浏览器信息存入数据库
2.实战
环境
bwapp
low
SQL Injection - Stored (User-Agent)
找注入点
正常打开页面,发现页面返回记录了访问信息,其中包括http头部的User-Agent,尝试利用http头注入。
注入点判断
通过修改http头的user-agent以判断是否能够进行注入
打开BurpSuit抓包,在代理->历史中找到对应包,右击send to repeater
在repeater中修改包。
使用单引号判断法,发现能够进行注入:
构造原始注入语句
回到webapp页面,思考功能构成
在本节第2步中,我们通过页面回显,猜测当用户访问时,后端的Data是自动生成的,无法修改,IP Address
应当是拿的HTTP的,User-Agent
也应当从HTTP头部中拿来的。
因此,后端对数据库的操作应当是先insert
再select
回显给前端。
思考SQL插入语句构成,如下:$ip_address = $user_agent = sql = insert into table_name (ip_address, User_agent) value($ip_address,$user_agent)
根据插入语句,尝试构造原始语句:
$ip_address = 1’,‘2’); # # 参数进入后,sql语句更改为 sql = insert into table_name (ip_address, User_agent) value(‘1’,‘2’); #,$user_agent)
注意,这里都是字符型,因此需要使用单引号进行闭合。
构造完成后,使用BurpSuit尝试进行注入,发现注入成功。
修改原始语句,进一步获取数据库信息
利用information_schema
表,得到bWAPP
数据库中所包含的表的信息User-Agent: 1', (select TABLE_NAME from information_schema.tables where table_schema='bWAPP' limit 3,1)); #
测试返回结果如下,limit多次后得到
user
表,猜测存在用户信息
获取表头信息(列/属性名)
上文以及知道users
表可能存放用户信息,进一步构造语句得到其中信息
要想获得表中信息,首先要获取属性名,然后根据属性名获取其中内容。
同样利用information_schema
表以及group_concat()
函数,重新构造语句,获取users
列(属性)名User-Agent: 1', (select group_concat(COLUMN_NAME) from information_schema.columns where table_name='users')); #
结果如下:
获取用户名及密码
构造User-Agent: 1', (select group_concat(login,password) from users)); #
结果见下图,但我们注意到显示有限,因此为得到bee账户密码,可以添加limit一条一条的取
尝试撞出密码
去除密码,使用彩虹表尝试破解密码
在cmd5网站输入密文,得到密码为bug
,见下图:
3.总结
- 技能
- 新掌握HTTP头注入
- 拓展找注入点的思路,谨记所有web层与数据库交互的点都有可能
- 收获
- 半独立挖洞:本文注入点由老师判断,后续结合前面章节自主完成
- payload撰写:主要在于对SQL理解,挖洞时可配合本地mysql进行语句测试
group_concat()
函数使用limit
使用- 利用
information_schema
得表名、表头- 思路
- 更清晰挖洞流程---判断->功能分析->构造原始语句->获取敏感信息
- 拓展挖掘思路
- 学习挖洞方法
二、练习
后续补上
1.基础题
- 描述
利用SQL盲注完成HTTP头注入
2.提高题
- 描述
尝试使用两种以上不同的mysql函数完成盲注
3.进阶题
- 描述
修改$user-agent
与$ip_address
的位置,尝试注入
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17275890.html