(MYSQL注入2010年9月第二期.docVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(MYSQL注入2010年9月第二期

前言 之前在《mysql注入取文件》一文中提到在mysql注入中理论上应该可以导出可执行二进制文件到启动项的说法,现给出原理及实例供大家参考。 MYSQL注入中导出文件需满足的条件大家都知道,就不多说了,要导出可执行二进制文件还需注入点必须存在二进制编码格式数据类型的字段(如BLOB或LONGBLOB数据类型)。要导出可执行bat文件对字段的数据类型没有要求。其他一些附加限制条件依环境而定。 在注入页面无法爆出物理路径的情况下,如果满足上述条件,可以考虑用这种方法得到权限。 实现原理 将可执行文件用HEX()编码后,分段导出并UNHEX()解码所有HEX()编码后的文件分段,在导出的文件中重组为完整的文件。 相关以下几个方面的知识,不懂可以参考。 1. 不同数据类型的字段可存储同种编码方式的数据 MYSQL数据库中,要存取不同编码方式的数据,列数据类型必须与欲存取数据的编码方式相对应。当表中各不同数据类型的列中存储的数据采用同一种编码方式时,尽管各个列的数据类型不同,此时表中只有一种编码方式。因此当把一个文件按数据表中的列数分为多段并以同种编码方式存储于各不同数据类型的列中时,若将整个数据表中的数据按列顺序导出到同一个文件中,就可以重组还原成同一编码的完整文件。HEX编码方式役属于几乎所有数据类型,在 int,text,blob,data ...等数据类型中,在其存储范围内,被hex()编码过的文件都可以合法存储。 2. 各数据类型的存储范围 我们平时在注入中使用UNION查询一般都采用数字匹配字段的方式以达到select_expression的适用条件(即UNION后面查选的字段数量、字段数据类型都应该与最前面SELECT的一样),这是因为数字役属于几乎所有数据类型,因此可以匹配任何字段,HEX编码方式同样役属于几乎所有数据类型,因此我们可以把一个文件用HEX()函数编码,接着把编码后的文件按数据表中的列数分为多段数据,每一段数据按顺序匹配对应字段,构造注入 URL,导出完整的文件。 在把HEX()编码后的文件分段时,需要了解各数据类型的存储范围,从而判断注入点各字段允许提交数据的长度和可存储编码范围,以便把最长的分段数据放在存储范围最大的数据类型的字段上。详细请参照《MySQL数据类型简介》(/archives/769/)。 3. UNION的特性导致的不同注入点利用方法 MYSQL只要数据能在对应数据类型的列中完整存储,就可以导出任意文件名的完整文件。也就是说,我们把二进制文件用HEX()编码后可以存储在TEXT数据类型等非二进制编码的字段上,导出时UNHEX()解码依然能保存为完整的二进制文件。如 mysqlcreate table a (id int,cmd TEXT); mysqlinsert into a (id,cmd) values (1,hex(load_file(c:\\windows\\system32\\regedt32.exe))); mysqlselect unhex(cmd) FROM a where id =1 INTO DUMPFILE d:\\regedt32.exe; 语句中unhex(cmd)已经改变了所选字段的数据类型为二进制,因此可以导出完整的二进制文件,而在注入中我们用UNION连接SELECT语句时,UNION后面查询的字段数量、字段数据类型都得与最前面的SELECT一样,此时 SELECT cmd FROM a where id=1 and 1=2 UNION SELECT unhex(cmd) FROM a INTO DUMPFILE d:\\regedt32.exe; 语句中unhex(cmd)字段的数据类型与最前面的cmd字段的数据类型不同,二进制编码的数据无法在TEXT数据类型中完整储存,因此无法导出完整的二进制文件。要导出完整的二进制文件,最前面SELECT所选的字段中必须有以二进制存储数据的数据类型,如BLOB,LONGBLOB等。导出 bat文件无此要求,任何类型的字段只要在其存储范围内都可以。 4. INTO DUMPFILE 的特性 如果使用INTO DUMPFILE导出数据,则MySQL只把一行写入到文件中,不对任何列或行进行终止,也不执行任何转义处理。INTO DUMPFILE 的这个特性说白了就是“无缝连接”,它既可以用于从列中导出数据到文件,也可以用于从表中导出数据到文件。 UNHEX()函数执行从HEX()的反向操作。就是说,它将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返回。0x与UNHEX()意义相同。 当表中的各个不同数据类型的列依次存储了所有的HEX编码后的文件分段时,用SEL

文档评论(0)

sf197103 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档