By lake2 ( http://lake2.0x54.org )
随着技术的发展,ASP数据库插马也不是什么新鲜的东东了,相信阁下也玩过这个的吧。呵呵,那你有没有遇到过插入的asp代码被空格拆开的情况呢(即插入的每个字符之间都出现了空格)?现在,就让我们来解决这个问题。
经过对多例实际情况的分析,我发现只要出现代码被空格隔开的数据库,相应的字段的Unicode压缩属性总是“否”。相反,如过Unicode压缩属性为“是”,则可以通过该字段进行插马。
经过搜索,发现微软官方对Unicode压缩的描述:“Microsoft Access 2000 或更高版本使用 Unicode 字符编码方案来表示文本、备注和超链接字段中的数据。Unicode 将每个字符表示为两个字节……需要的存储空间比在 Access 97 或更早版本中要多……可通过将“文本”、“备注”或“超链接”字段的“Unicode 压缩”属性的默认值设为“是”来弥补 Unicode 字符表达方式所造成的影响”
哦,原来开启了 Unicode 压缩的话,数据库会自动把拉丁字符(西欧语言如英语、西班牙语或德语)用1个字节来存储;如果没开启,数据库就会用2个字节(1个字节为0x00,作为文本将被自动转换为空格)存储拉丁字符,也就造成了插入的asp代码被空格隔开的情况。
那么,在这种情况下如何插马呢?
突破口就在 Unicode 压缩那儿,既然数据库不给我们压缩,那么就让我们自己来压缩吧。很简单,就是把asp代码先转化为 Unicode 然后再插入数据库。我用VB写了个小软件来实现这个功能,注意由于转换的时候容易产生不可显示的字符(将会出现?),所以要精心构造代码咯,当然你也可以捡便宜用图中那个我构造的^_^
对VB来说,转换之后的代码的长度已经减少一半,嘿嘿,那这个可不可以说是对最小的ASP后门的一种突破呢?
程序可在这里下载之:http://www.0x54.org/lake2/program/a2u4hack.exe,呵呵,Enjoy It !