Sqli-Labs:Less 32 - Less 33

Less 32

JSP

可能是闲着没事多做了一关,名字就是Fun with JSP,可能确实是用来娱乐的。
单引号小括号字符型,无过滤。
唯一的乐趣是有一个index.jsp1的备份文件,可以看到源码,这也是 Web 题的一种套路,一般用在 PHP 代码审计和 SQL 注入的混合关。

PHP

基于错误_GET_单引号_字符型_转义引号反斜杠_宽字节注入

0x01. 宽字节注入

在旧版本的 MySQL 安装时,会有编码问题导致中文乱码,需要手动设置编码为 UTF-8。而安装 MySQL 5.7 时并没有出现这个问题,默认编码已经是 UTF-8。

SHOW VARIABLES LIKE 'character%';

PHP 自带一些转义特殊字符的函数,如addslashes()mysql_real_escape_string()mysql_escape_string()等,这些函数可用来防止 SQL 注入。

id=1'or'1'='1,单引号本用来闭合语句,这些函数会自动转义这些闭合的单引号,在这些单引号前面加上转义符\,变为1\'or\'1\'=\'1,如此在 SQL 查询中仍然一个普通的字符串,不能进行注入。

而网站在过滤'的时候,通常的思路就是将'转换为\',因此我们在此想办法将'前面添加的\去掉,一般有两种思路:

  1. %bb连带\
    如果程序的默认字符集是GBK等宽字节字符集,就有可能产生宽字节注入,绕过上述过滤。
    若在 PHP 中使用mysql_query("set names gbk")将默认字符集设为GBK,而使用addslashes()转义用户输入,这时如果用户输入%bb%27,则addslashes()会在%27前面加上一个%5c字符,即转义字符\
    而 MySQL 在使用GBK编码时,会认为两个字符为一个汉字,%bb%5c是一个宽字符(前一个 ASCII 码大于 128 才能到汉字的范围),也就是,也就是说%bb%5c%27=籠',这样单引号就未被转义能闭合语句,从而产生 SQL 注入。%bb并不是唯一一个可以产生宽字节注入的字符,理论上%81-%FE均可。

  2. 过滤\'中的\
    构造%bb%5c%5c%27addslashes()会在两个%5c%27前都加上\%5c,变为%bb %5c%5c %5c%5c %5c%27,但宽字符集认为%bb%5c是一个字符即,则变为%bb%5c %5c%5c %5c%5c %27籠\\\\',四个\正好转义为两个\,即'未被转义。这也是 bypass 的一种方法。

一个字符集转码网站

0x02. 注入过程

知道这关是宽字节注入,先以上帝视角看看源码:

mysql_query("SET NAMES gbk");
$id = check_addslashes($_GET['id']);
function check_addslashes($string)
{
    $string = preg_replace('/'.preg_quote('\\').'/',"\\\\\\",$string);      //escape any backslash
    $string = preg_replace('/\'/i','\\\'',$string);                         //escape single quote with a backslash
    $string = preg_replace('/\"/',"\\\"",$string);                          //escape double quote with a backslash
    return $string;
}

可以看到这个函数是个过滤\'"的函数,分别在前面加上\

步骤1:确定宽字节注入

11'1"都能正常回显,可以猜测输入的引号被过滤,从页面给的 hint 也证实了这一点。

猜测是引号是被转义而并非被纯粹过滤,尝试宽字节注入:

http://localhost:8088/sqlilabs/Less-32/?id=1%bb%27

有错误回显,从其中可以看到被单引号闭合。
若无错误回显,可注释后面的查询语句:

http://localhost:8088/sqlilabs/Less-32/?id=1%bb%27--+

用上述第二种方法同样可以做到:

http://localhost:8088/sqlilabs/Less-32/?id=1%bb%5c%5c%27--+

已经确定了单引号闭合且宽字节注入可以绕过,剩下的就是正常的注入,无其他过滤条件。
因未过滤注释,所以只有开头的单引号需要宽字节注入。

0x03. 吐槽

总觉得越到后面越简单了,可能是没把过滤条件都结合起来,后来还得总结一下过滤条件和注入方式。

Less 33

基于错误_GET_单引号_字符型_addslashes()_宽字节注入

Less 32 是自定义的过滤器,本关直接使用了 PHP 的addslashes()函数,在 Less 17 中介绍过:

addslashes()与stripslashes()函数

addslashes(string)函数返回在预定义字符之前添加反斜杠\的字符串:

  • 单引号 '
  • 双引号 "
  • 反斜杠 \
  • 空字符 NULL

该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

注意:默认地,PHP对所有的GET、POST和COOKIE数据自动运行addslashes()。所以不应对已转义过的字符串使用addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc()进行检测。

stripslashes(string)函数删除由addslashes()函数添加的反斜杠。

判断和注入过程同 Less 32 完全相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341