通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名、版本号、用户名等)通过页面的错误提示回显出来。
Web应用程序未关闭数据库报错函数,对于一些SQL语句的错误直接回显在页面上,后台未对一些具有报错功能的函数(如extractvalue、updatexml等)进行过滤。
作用 : 对XML文档进行查询,相当于在HTML文件中用标签查找元素,该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示。
extractvalue(XML_document,XPath_string)
XML_document是String格式,为XML文档对象的名称
XPath_string(Xpath格式的字符串),注入时可操作的地方
报错原理 : xml文档中查找字符位置是用 /xxx/xxx/xxx.. 这种格式,如果写入其他格式就会报错并且会返回写入的非法格式内容,错误信息如:XPATH syntax error:'xxxxxxxx'
实例如下:
mysql> select extractvalue(1,concat('~',user()));
ERROR 1105(HY000):XPATH syntax error:'~root@localhost'
作用 : 改变文档中符合条件的节点的值,该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示。
updatexml(XML_document, XPath_string, new_value )
XML_document是String格式,为XML文档对象的名称
XPath_string (Xpath格式的字符串),注入时可操作的地方
new_value ,String格式,替换查找到的符合条件的数据
报错原理 : xml文档中查找字符位置是用 /xxx/xxx/xxx.. 这种格式,如果写入其他格式就会报错并且会返回写入的非法格式内容,错误信息如:XPATH syntax error:'xxxxxxxx' ,同extractvalue()。
mysql> select updatexml(1,concat('~',user()),1);
ERROR 1105(HY000):XPATH syntax error:'~root@localhost'
报错原理 : group by 与 rand() 使用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group by将计算出来的主键直接插入到临时表格中,导致主键重复报错,错误信息如:
Duplicate entry '...' for key 'group_key'
实例如下:
mysal> select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables
group by x)a;
ERROR 1062 (23000): Duplicate entry 'root@localhost1' for key 'group_key'
作用 : 计算以e(自然常数)为底的幂值。
语法 : exp(x)。
报错原理 : 当参数x超过710时,exp()函数会报错,错误信息如:
DOUBLE value is out of range:....
实例如下:
mysql> select exp(~(select *from (select user()) as x));
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual))'
此处以SQLi-Labs的less-1为例,介绍两种方式,利用具有报错功能的函数实现注入。
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。