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

免责声明:本公众号发布的文章均转载自互联网或经作者投稿授权的原创,文末已注明出处,其内容和图片版权归原网站或作者本人所有,并不代表安全+的观点,若有无意侵权或转载不当之处请联系我们处理,谢谢合作! 

欢迎各位添加微信号:qinchang_198231  

加入安全+ 交流群 和大佬们一起交流安全技术

作者介绍:杨秀璋

自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。

一.Sqlmap介绍

Sqlmap

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

Sqlmap下载

可以从官方网址、Github或Python调用PIP命令实现。

官方网址:http://sqlmap.org/

Github下载:https://github.com/sqlmapproject/sqlmap/

由于Sqlmap是通过Python语言开发完成,也可以安装Python环境,调用Pyhon命令pip install sqlmap安装。

建议大家在官方网站下载类似Sqlmap的软件,否则不知道是否有后门,这里从Github下载如下图所示。

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

查看Sqlmap版本命令如下:

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

查询高级帮助信息。

二.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.获取数据库

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

2.获取当前数据库

运行结果如下图所示,其中–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.获取当前用户

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

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

4.获取数据库中所有表

运行结果如下图所示,获取数据库web1的所有表,其中-D表示数据库,–tables表示所有表。

输出结果为flag和web_1两张表。

5.获取表中所有字段

输出结果如下图所示:

输出结果如下图所示:

最终我们需要的结果flag在这个表里。

6.获取用户名和密码

获取的结果如下图所示:

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

如果某网站存在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)

例如:

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

文件型数据库(前提指导数据库绝对路径)

DBMS://DATABASE_FILEPATH(SQLite、Microsoft Access、Firebird、etc.)

2.Sqlmap URL探测

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

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

输出结果如下图所示,获取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目录下,输入命令开始检测,核心命令:

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

4.Sqlmap Google批量扫描注入

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

例如:

因为不能访问谷歌,所以此时不能正常获取数据。如果能正常访问,则显示如下图所示。

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注入检测。

–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的参数,包括:

使用场景:

(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个小时,发现自己网络安全方向的基础非常薄弱,有太多实践知识想学,太多学术论文想看,每天都在忙碌,过程非常艰辛,博士哪有这么好毕业。但是这种苦中带甜,充实的滋味又让我陶醉,还有远方的女神、许多朋友和博友的陪伴。希望未来在网络态势感知、恶意代码检测、嫌疑识别和知识图谱方面能再深入点,多读文献,多找创新,加油。

天行健,君子以自强不息。

地势坤,君子以厚德载物。

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

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章