干货 | Sqlmap常用手册(收藏)
sqlmap常用手册
目录
一、sqlmap介绍
二、常用命令
二、进阶命令
–technique=BEUST
–prefix与 --suffix
–level
三、注入https网站
四、进行POST注入
一、sqlmap介绍
相对于手工注入,sqlmap的高效注入大大提高了我们渗透效率。Sqlmap采用了以下5种独特的SQL注入技术:
- 联合查询,在可以使用Union的情况下注入(注入效率最高,成本最低)
- 报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
- 布尔盲注,即可以根据返回页面判断条件真假的注入
- 延时注入,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
- 堆叠查询,可以同时执行多条语句时的注入
注入小技巧:有回显可以用联合查询,有报错可以用报错注入。都没有再看有没有布尔类型的状态(显示或者不显示)。若以上都没有,试试用延时注入。或者我们直接测试延时注入
二、常用命令
当发现sql注入的时候,根据我们注入的不同,对sqlmap使用的参数也不同
\1. 目的是获取网站后台管理的账号密码
- 查看当前数据库名字,即当前网站所属数据库名字
- 列出数据库中的表
- 觉得哪个表放着账号密码,就爆哪个表
- 一般密码经过了md5加密处理,需要进行hash碰撞
\2. 目的是获取mysql的管理账号、密码进行远程连接
-
–users
-
–passwords
sqlmap -u URL 检查注入点 sqlmap -u URL --dbs 列出数据库中所有数据库的名字 sqlmap -u URL --is-dba 当前用户是否是数据库管理员 sqlmap -u URL --current-db 显示当前数据库的名字
-D 指定数据库 --tables 列出所有表名 qlmap -u URL -D “xx” --tables 列出xx数据库中的所有表 -T 指定一个表 --columns 列出所有的字段名 qlmap -u URL -D “xx” -T “cc” --columns 列出表中所有的字段名 -C 指定一个字段名 --dump 列出字段内容 qlmap -u URL -D “xx” -T “cc” -C “x,x,…” --dump 列出字段内容(-T ,-C之类的要用大写不然有时候会读不出来) sqlmap -r a.txt -p username 倒入txt文档的post数据包,并指定参数username进行注入
–dbms mysql 指定注入的数据类型为mysql数据库
–os-shell 尝试写入shell sqlmap -u url --batch --smart 自动聪明的选择,即执行的时候不需要我们再手动的进行选择yes或者no(但是由于机器自动进行选择,所以有时候结果会不一样比如没有结果,所以建议少使用) --force-ssl 测https的时候 --cookie “cookie值” 有些网站要登录才行,所以需设置cookie --threads=10 开启多线程,默认是单线程为1,最大10。线程越大检测速度越快 --users 获取mysql数据库管理用户,mysql安装时会默认有一个root用户,除了这个用户可能还会创建有其他用户,这个参数可以将这些用户列出了 --passwords 获取mysql数据库管理用户的hash值
–dbms:指定注入的数据库类型,如Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, Percona, PostgreSQ
-v 3
如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
- 0 只显示python错误以及严重的信息。
- 1 同时显示基本信息和警告信息。(默认)
- 2 同时显示debug信息。
- 3 同时显示注入的payload。
- 4 同时显示HTTP请求。
- 5 同时显示HTTP响应头。
- 6 同时显示HTTP响应页面。
如果你想看到sqlmap发送的测试payload最好的等级就是-v 3。
二、进阶命令
–technique=BEUST
有时候我们手工探测出来注入是某种类型,为了节省时间,我们可以直接指定sqlmap注入的类型
BEUST的值可以是"BEUST"中的一种。
- B: Boolean-based blind SQL injection(布尔型注入)
- E: Error-based SQL injection(报错型注入)
- U: UNION query SQL injection(可联合查询注入)
- S: Stacked queries SQL injection(可多语句查询注入)
- T: Time-based blind SQL injection(基于时间延迟注入)
sqlmap.py -r x.txt -v3 --technique=B #指定进行布尔盲注
–prefix与 --suffix
- –prefix 在payload最前面加上指定的字符
- –suffix 在payload最后面加上指定的字符
我们在注入的时候经会碰到需要在payload前加上指定的字符要构造闭合,如下这种情况,我们找到了注入点为’ ,但是还得在后面加上 or ’ 才行,与原来的sql语句构成闭合
所以我们就指定sqlmap在每个payload前面加上 ’ ,每个payload后面加上 or ’
- sqlmap.py -r x.txt --prefix "'" --suffix " or '" -v3
复制代码
–level
有时候注入的时候,我们发现了注入点但是使用sqlmap确注入不出来,发现sqlmap只发出了十几个包就说漏洞不存在然后停止运行了。那很有可能是你没有加此参数进行注入。
–level有五个等级(1-5),默认使用等级1进行注入。级别越高sqlmap发送的探测payload就越多,越有可能发现注入漏洞。为了尽可能发现漏洞,我们应该使用更高的级别,如 --level 5
sqlmap.py -r r.txt -dbms mysql --technique=T -v3 --level 5
三、注入https网站
sqlmap跑https站点会报错,传送门目录
–force-ssl
通过本地代理端口进行访问
–force-ssl
使用sqlmap注入https的网站时,如果没有进行任何处理则会报错如下,连接不了目标。就是因为ssl证书的原因,而且sqlmap它是不能自动伪造ssl证书的
可以使用sqlmap直接加上–force- ssl参数,告诉sqlmap这是https服务。或者可以在Host头后门加上:443(默认不是443)。如果还是不行,我们就设置一个代理
通过本地代理端口进行访问
这里通过代理本地的burp进行访问,如下
\1. burp开启代理监听端口
监听的ip为现在使用的网卡的ip,端口输入如8081
\2. 使用–proxy参数
如下进行代理,成功解决ssl报错的问题
四、进行POST注入
不管是POST还是GET型注入,我们都可以在想要注入的参数后加*,代表对此参数进行注入,如对id参数进行注入,sqlmap -u "https://xx.xx.com?id=23* "
——>我们都知道在web中进行数据传参用的最多的就是GET型或者POST型方法,所以根据此我们也可以把注入分为GET型注入和POST型注入
- GET型:http://192.168.80.146/2_Shotting_Range/sql/Less-1/?id=1 通过在可见的URL中进行传参
- POST型:与数据库交互是通过post数据进行,url不可见
post型注入例子
有两种方法,一种是-r的方式,另一种是–data
1. sqlmap -r
如下获取到post的数据,在我们可能认为存在注入的参数后面加上*号,*号代表优先级,sqlmap会识别优先注入这个参数。然后将HTTP请求包保存为txt文件,接着sqlmap -r xx.txt就行。
或者我们不在参数后面加*,sqlmap会依次询问你是否对所有参数进行注入
2. --data
这种不需要将数据进行保存,我们只需要将post数据复制下来
- sqlmap -u --data="key=value"
复制代码
(1)复制所有post数据下来
sqlmap会逐个的检测每一个参数是否存在注入
或者我们也可以在参数后面加*,sqlmap会优先检测这个参数
(2)只复制我们想测试的部分post参数
如下,sqlmap虽然也会检测,但是一直显示不存在漏洞
所以我们使用 --data参数时需要将所有的post数据都复制下来进行测试
sqlmap -r和–data两种方式都可以,看自己方便
**学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!