casi vs sqlmap 的yy

作者:superhei
来源:5up3rh3i'blog

今天在某牛的blog[1]看到这样一句话:"CASI在他面前感觉就象一个玩具,根本就没有可比性",看到这个自感惭愧啊,的确由于本人code水平不是一般的烂,所以写出来的东西效率确实差,不过在mysql注射的技术上,casi应该也不会那么烂? 既然人家牛牛都不帮我比较,那只好自己yy了.

首先我们看看sqlmap,我记得这个我早就测试过,果然在自己电脑上找到了sqlmap 2.0,是py写的
usage: sqlmap.py [options]

options:
-h, –help show this help message and exit
-u URL target url
-p URL_PARAMETER injectable parameter
-f HEADERS_FILE_NAME load http headers from file
–method=HTTP_METHOD http method, GET or POST (default: GET)
–cookie=COOKIE http cookie header
–proxy=PROXY use a proxy to connect to the url
-b, –banner get database banner
–current-db get current database name
–current-user get current database user
–users get database users
–dbs get available databases
–tables get available databases tables (optional: -D)
–columns get table columns (require: -T optional: -D)
–dump dump a database table (require: -T optional: -D)
–file=FILENAME read a specific file content
-e EXPRESSION expression to evaluate
-D DB, –database=DB database to enumerate
-T TABLE, –table=TABLE
table to enumerate
-v, –verbose be verbose

sqlmap 确实牛,我手上这个版本支持mysql和Postgres. 因为casi只是对mysql的所以我们只看看mysql的部分的.sqlmap是基于经典注射的[and 1=1/2],而casi支持union的同时支持经典注射,我们来看看大牛对sqlmap赞叹又加的"精确的指纹识别,对数据库巧妙的判断",就我所知道注射来判断版本有几个方法:
1.注射得到version()
2.通过注释/*!40000%20s*/ /*!30000%20s*/ ….
3.版本的一些新/特有的函数的值啥的,还有一些特性:比如4.0开始支持union ,4.1开始支持子查询,5.0支持数据字典 …

sqlmap做的确实比好:
def check_dbms(self):
self.log("testing MySQL")
random_int = str(random.randint(1, 9))
stm = "CONCAT('%s', '%s')" % (random_int, random_int)

if self.__get_value(stm) == (random_int * 2):
stm = "SELECT %s " % random_int
stm += "FROM information_schema.tables "
stm += "LIMIT 0, 1"

if self.__get_value(stm) == str(random_int):
self.__has_information_schema = True

self.__current_db = self.__get_value("database()")
if self.__current_db == self.__get_value("schema()"):
self.__fingerprint = "MySQL >= 5.0.2 and MySQL < 5.1"

stm = "SELECT %s " % random_int
stm += "FROM information_schema.partitions "
stm += "LIMIT 0, 1"

if self.__get_value(stm) == str(random_int):
self.__fingerprint = "MySQL >= 5.1"
else:
self.__fingerprint = "MySQL = 5.0.[0|1]"
else:
self.__fingerprint = "MySQL < 5.0"

coercibility = self.__get_value("COERCIBILITY(user())")
if coercibility == "3":
self.__fingerprint = "MySQL >= 4.1.11 and MySQL < 5.0"
elif coercibility == "2":
self.__fingerprint = "MySQL >= 4.1.1 and MySQL < 4.1.11"
elif self.__get_value("current_user()"):
self.__fingerprint = "MySQL >= 4.0.6 and MySQL < 4.1.1"

if self.__get_value("CHARSET(current_user())") == 'utf8':
self.__fingerprint = "MySQL = 4.1.0"
else:
self.__fingerprint = "MySQL >= 4.0.6 and MySQL < 4.1.0"
elif self.__get_value("FOUND_ROWS()") == "0":
self.__fingerprint = "MySQL >= 4.0.0 and MySQL < 4.0.6"
elif self.__get_value("CONNECTION_ID()"):
self.__fingerprint = "MySQL >= 3.23.14 and MySQL < 4.0"
elif re.search("@[\w\.\-\_]+", self.__get_value("USER()"), re.I):
self.__fingerprint = "MySQL >= 3.22.11 and MySQL < 3.23.14"
else:
self.__fingerprint = "MySQL < 3.22"

self.__banner = self.__get_value("version()")
else:
self.warn("remote database is not MySQL")
return False

可以看出sqlmap在fingerprint费了很大的力气,但是这个有必要吗? 就我的mysql的那么知识,就注射方面和版本的关系好象就:"4.0开始支持union ,4.1开始支持子查询,5.0支持数据字典 …",如果你要精确的版本直接得到user()/current_user()的结果最精确 ,那么casi可以得到user()的值,那么casi比sqlmap的更精确!! :)

而且casi在使用union前有大致版本判断:
url11 = Url & "/*!40000%20s*/"
url12 = Url & "/*!30000%20s*/"

在测试sqlmap后面的功能,发现原来sqlmap主要是针对mysql5的,利用 数据字典(information_schema) 可以和mssql/ora等一样 直接得到数据结构 我在文章<Hackfing in Mysql5>[2] 早就写,只是一直没有更新casi :(
所以从这个方面来比就没有啥意义了….

casi其实里面包含了很多技巧的,写过mysql注射工具/或者认真分析过casi的应该知道.比如:
1.注射字段位置的判断
2.union注射里的'无错判断'
3.substring()的利用
…..

还有很多,不过随着时间的推移,现在这些根本不算技巧了 :)

最好写个小结:
0.mysql注射市面上没有什么新技术出来[可能有大牛发现什么新的,不愿意公布]
1.casi和sqlmap确实没的比[sqlmap主要对mysql5]
2.casi写的确实很烂[谁叫俺vb就那水平]
3.大牛愿意把我的东西当玩具,那时我的荣幸[记得居里夫人把自己的奖牌给女儿当玩具的]

参考:
[1]:http://www.csnexp.com/blog/?action=show&id=29
[2]:http://www.xfocus.net/articles/200601/847.html

相关日志

楼被抢了 3 层了... 抢座Rss 2.0或者 Trackback

  • superhei

    由于激动,原来的文章出现重大错误:
    注射得到user()/current_user()
    应该是 version()

  • 鬼仔

    已修正,谢谢提醒。

  • 暗夜血祭

    呵呵,朋友,影子牛研究的那些东西确实比较有意思,SQLMAP这个程序确实还是不错的,但是嘛,萝卜白菜各有所爱,都是高手,无所谓哪个跟哪个咯!! 技术在大家的研究下才能进步嘛!!!

发表评论