Web安全学习(一)
Web安全学习
一、 注入漏洞
核心原理: 当用户输入被当作代码而非数据执行时,就会产生注入漏洞。其根本原因是程序没有对用户输入进行充分的过滤、验证和转义。
1. SQL注入
- 数字型注入: 注入点类型为数字,通常无需闭合引号。
- 示例:
id=1->id=1 AND 1=2 - 学习记录: 重点掌握
UNION SELECT联合查询注入,用于获取数据。
- 示例:
- 字符型注入: 注入点类型为字符串,需要闭合单引号
'或双引号",并处理后续代码。- 示例:
name='admin'->name='admin' AND '1'='1' - 学习记录: 掌握各种注释符(
--,#,/* */)的使用来闭合语句。
- 示例:
- 盲注: 页面没有回显数据,只能通过页面返回的真假或时间差异来判断。
- 布尔盲注: 通过页面返回
True或False(不同内容)逐位推断数据。- 示例:
and (select substr(database(),1,1))='a'
- 示例:
- 时间盲注: 通过执行延时函数判断条件真假。
- 示例:
and if(1=1, sleep(5), 0)
- 示例:
- 学习记录: 自动化工具(如Sqlmap)利用盲注效率极高,但手动理解原理至关重要。
- 布尔盲注: 通过页面返回
- 报错注入: 利用数据库报错信息回显执行结果。
- 示例:
and updatexml(1, concat(0x7e, (select database())), 1) - 学习记录: 学习
updatexml(),extractvalue(),floor()等报错函数原理。
- 示例:
- 堆叠查询: 可以执行多条SQL语句,危害极大。
- 示例:
id=1; DROP TABLE users; - 学习记录: 并非所有数据库或连接驱动都支持,PHP+MySQL通常不支持。
- 示例:
2. POST注入 & Cookie注入
- 本质: 与GET注入原理完全相同,只是注入参数的位置不同(POST请求体、HTTP请求头中的Cookie字段)。
- 学习记录: 使用Burp Suite/OWASP ZAP等代理工具拦截和修改POST/Cookie请求是测试的关键。
3. 其他注入类型
- 命令注入: 用户输入被当作系统命令执行。
- 示例:
ping 127.0.0.1; cat /etc/passwd - 防御: 严格过滤
|,&,;,$()等shell元字符。
- 示例:
- XXE注入: XML外部实体注入,用于读取文件、探测内网等。
- 原理: 解析恶意构造的XML外部实体。
- LDAP注入: 针对LDAP查询语句的注入,原理类似SQL注入。
二、 文件上传漏洞
核心原理: 未能对用户上传的文件进行有效的检查和限制,导致恶意文件(Webshell)被上传并执行。
1. 绕过技巧
- 前端校验: 绕过JavaScript的文件类型检查(禁用JS或抓包修改)。
- MIME类型绕过: 修改HTTP请求中的
Content-Type为合法类型(如image/jpeg)。 - 后缀名绕过:
- 黑名单绕过: 上传
php3,phtml,phps,.htaccess(Apache)等。 - 大小写绕过:
PhP,aSpX。 - 特殊后缀:
php.,php(空格),php%20,利用系统特性截断。
- 黑名单绕过: 上传
- 文件内容绕过:
- 文件头欺骗: 在PHP文件开头添加
GIF89a等图片魔数。 - 图片马: 将Webshell代码写入图片的元数据中,配合文件包含漏洞执行。
- 文件头欺骗: 在PHP文件开头添加
2. 高级利用
- 竞争条件攻击: 在上传文件被删除前(例如不合规的文件)快速访问和执行它。
- 解析漏洞: 利用服务器特性(非代码漏洞)。
- IIS 6.0:
/asp.jpg/asp会被当作asp文件执行。 - Nginx畸形解析:
test.jpg/.php被解析为php。 - Apache多后缀:
test.php.jpg可能被解析为php。
- IIS 6.0:
3. 防御之道
- 白名单验证文件扩展名和MIME类型。
- 对文件进行重命名(如MD5值),避免解析漏洞。
- 将文件上传到独立域名或无法直接访问的目录,通过脚本分发。
- 对图片进行二次渲染,彻底破坏图片中的恶意代码。
三、 XSS跨站脚本漏洞
核心原理: 恶意脚本被注入到网页中,并在用户浏览器中执行。
1. 反射型XSS
- 非持久化,恶意代码在URL中,需要用户点击才能触发。
- 常见位置: 搜索框、错误信息页。
2. 存储型XSS
- 持久化,恶意代码被保存到服务器(数据库),所有访问该页面的用户都会受影响。
- 常见位置: 留言板、论坛帖子、用户昵称。
3. DOM型XSS
- 纯前端漏洞,不经过服务器。JavaScript代码不当地处理了
document.location,document.referrer等来源的数据,并将其写入了DOM树。 - 示例:
eval(),innerHTML,document.write()等函数使用不当。
4. 绕过技巧
- 绕过HTML标签过滤: 使用不常见的标签
<svg>,<img>,<details>。 - 绕过事件处理器过滤: 使用
onmouseover,onerror,onload等事件。 - 绕过关键词过滤:
- 大小写:
<sCript> - 双写:
<scrscriptipt> - 编码:
<script>(HTML编码),\u003cscript\u003e(Unicode编码)
- 大小写:
5. 危害与利用
- 盗取用户Cookie。
- 发起钓鱼攻击。
- 键盘记录。
- 蠕虫传播(如微博XSS蠕虫)。

浙公网安备 33010602011771号