Skip to content

Latest commit

 

History

History
357 lines (197 loc) · 9.13 KB

Web-vulnerability.md

File metadata and controls

357 lines (197 loc) · 9.13 KB

瞎编乱造

以下内容纯属自嗨

  • 从代码审计角度来看,就是分析可能存在漏洞的位置是否外部可控,比如命令执行函数中的参数是否来自外部http,是否进行了足够过滤或者白名单。
  • 逻辑漏洞是一些功能上的执行流程上的疏漏,代码层面考虑不够全面。
  • 挖漏洞不能急,要仔细观察每个链接,分析每个流程,分析代码实现逻辑。

SQL注入

漏洞原理

攻击者注入恶意SQL语句,拼接到后端成功执行。

漏洞测试

  1. 输入单引号、双引号或括号等闭合

  2. 常用测试payload

    https://github.com/payloadbox/sql-injection-payload-list
    
  3. 在存在数据交互的链接参数测试

测试工具

  1. Burpsuite

    • 使用intruder功能 自带SQL注入爆破字典,可探测注入点
  2. sqlmap

    可联动CO2插件

    使用手册
    https://sqlmap.kvko.live/usage
    
    常用命令
    python sqlmap.py -u http://xxx.xom --random-agent --cookie=COOKIE --batch -v 3 --delay 2
    
    从http请求探测
    -r
    
    测试指定参数 加*
    python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"
    
    指纹识别
    默认识别指纹,如果想更准确识别开启下列参数
    -f 或 --fingerprint
    
    并发
    --threads
    
    使用技巧
    - 没检测到问题时可提升level等级探测尝试一下
    

漏洞防御

  • WAF

  • 预编译

    这种形式是预先确定了SQL的语法格式,用户输入不能改变后端SQL语法

身份验证漏洞

漏洞原理

身份验证和授权的区别:一个是验证身份,另一个是被允许做某事。

  1. 身份验证机制弱,无法防止爆破
  2. 代码逻辑存在问题,可绕过

漏洞测试

  1. 基于密码登录

    • 同时爆破用户名密码

    • 固定密码爆破用户名或固定用户名爆破密码

    • 用户名枚举

      靶场练习1

      靶场练习2

      • 检查验证码、错误消息、响应时间差异

      • 相应差异这里有时候一个符号的差异也可能有收获

      • 如果大多数请求都以相似的响应时间处理,那么任何偏离此时间的请求都表明幕后正在发生不同的事情。这是猜测的用户名可能是正确的另一个迹象;例如,网站可能仅在用户名有效时才检查密码是否正确。这个额外的步骤可能会导致响应时间略有增加。这种差异可能很小,但攻击者可以通过输入一个过长的密码来使这种延迟更加明显,该网站需要明显更长的时间来处理。

  2. 多因素身份认证

    例如带验证码

    • 当口令输入和验证码输入不在一个页面

      尝试用自己账户或已知账户登录,记录登录后的URL,然后切换其他用户,在跳转验证码页面时候,修改URL。这种情况是后端在没确认验证码就认为用户已经登录

    • 测试验证码是否可以绕过

    • 爆破验证码

  3. 绕过限制

    根据目标限制策略制定爆破方式

    • 限制失败次数阻止IP,若登录成功则重置计数

      可结合已知用户口令,添加到字典,实现在限定次数内正确登录一次,绕过限制。

    • 存在逻辑缺陷的锁IP

      这种在一定次数爆破后,报错信息可能出现差异,从而爆破出用户名

      靶场

    • JSON 请求,一次填充多个口令

      靶场

  4. 分析逻辑,考虑多种可能性

测试工具

  • Burpsuite

目录遍历

漏洞原理

加载文件内容功能的链接没有过滤,或者文件名后台没有进行标准化处理过滤,攻击者可以拼接系统绝对路径或上层目录方式读取任意文件。

漏洞测试

  1. 在读取文件内容或加载文件的参数后添加payload

    ../../ect/passwd
    直接添加绝对路径:/etc/passwd
    
  2. 在web页面图片右键新链接打开,更改文件名为payload

  3. 绕过限制

    • 双写payload
    • URL编码或双重URL编码
    • 给定文件目录后添加payload
    • 后缀名前%00截断

测试工具

  • Burpsuite自带fuzz 目录遍历字典,或使用自己的字典,包含常规测试payload。
  • 爆破位置:文件名处、后缀前、指定目录文件名后边

漏洞防御

  1. 白名单过滤
  2. 后台使用路径规范化函数过滤

命令注入

漏洞原理

(白盒)后台代码调用系统命令的位置可被外部控制。

漏洞测试

白盒代码审计可较好的覆盖该漏洞类型,定位命令执行函数,分析参数是否外部可控,是否过滤。

逻辑漏洞

漏洞原理

开发过程中对某一功能或流程考虑不全面,对用户输入考虑不充分,导致流程绕过或者意外输入产生威胁。

漏洞测试

  1. 商城常见场景
    • 修改代表数量、价格的参数值
    • 数量不小于0不大于某个整数,抓包也无法修改,爆破最大数量试一试
  2. 首先正常走完功能流程,然后分析可能出现的逻辑缺陷

测试工具

Burpsuite

  • 修改、爆破

漏洞防御

  • 充分考虑用户各种输入

越权漏洞

漏洞原理

使用不严谨的访问控制手段,如通过URL参数来判别用户授权访问资源,攻击者可以绕过鉴权逻辑,达到越权访问资源的目的。

漏洞测试

  • 结合burpsuite Autorize插件可检测

    在测试时候要做到仔细,仔细访问每个链接,测试是否可以越权

  • 其他方式

    分析鉴权逻辑,找到绕过方式

文件上传漏洞

漏洞原理

web服务器没有充分验证上传文件的名称、类型、内容或者大小的情况下将文件上传到其文件系统,这些不符合预期的上传文件对系统造成破坏。

漏洞测试

类似跨目录或者zip炸弹这种黑盒测试无法看到结果,且可能造成破坏。外部找到上传点,结合白盒代码审计可高效测试。

  1. 文件类型

  2. 文件名称

    java跨目录上传,文件名包含 ../

    前后端是否校验一致

  3. 文件大小

    过大文件可造成资源耗尽

  4. 文件内容

    包含恶意代码

  5. 压缩文件上传

    • 文件大小,zip炸弹
    • 文件内容,跨目录
  6. 白盒代码审计

测试工具

  • burpsuite抓包修改
  • find-sec-bugs+IDEA 代码审计(java)

漏洞防御

  • 校验文件类型、名称、大小
  • 白名单、路径标准化

SSRF漏洞(待补充)

漏洞原理

服务端请求伪造,攻击者诱导服务器向非预期的位置发出请求。

漏洞测试

  • 重点关注存在URL、加载资源的链接
  • 爆破
  • 探测端口

测试工具

burpsuite

跨站脚本漏洞

漏洞原理

  1. 反射型XSS

    输入处注入恶意脚本,后端没有对用户输入安全过滤,脚本返回被浏览器解析。

  2. 存储型XSS

    恶意脚本注入了数据库,用户访问漏洞页面,加载恶意脚本。

  3. DOM型XSS

    页面DOM从用户输入获取内容,注入恶意脚本被DOM解析。

漏洞测试

  1. 手工测试

    • 在输入点输入一串数字 如:111111

    • 观察是否原样返回

    • 输入测试payload

    • payload 常用技巧

      闭合、大小写、双写、伪协议

    • XSS备忘单

  2. 自动化测试

    • burpsuite爆破插入点
    • xray被动扫描
    • AWVS和appscan也能扫描

漏洞防御

  • 输入过滤,后台过滤
  • 输出内容编码

跨站请求伪造

漏洞原理

攻击者伪装成网站信任用户对网站发起恶意请求。

利用条件

  • 用户已经登录网站
  • 用户用同一浏览器访问恶意链接
  • 没有不可预测的参数

漏洞测试

  • 使用burpsuite自带poc生成工具进行测试

  • 测试cftk

    测试是否可截断、退出登录后是否有效,在cookie中是无法防御的

相关知识

  1. 攻击条件是利用浏览器访问网站自动携带认证cookie的特性
  2. 同源策略可以通过html tag加载资源,同源策略不拦截跨域请求而是阻止返回结果,参考
  3. 注意攻击请求和正常请求页面代码区别,攻击请求是嵌入在hack网站页面代码中的,这部分代码没办法获取正常用户请求token字段内容

漏洞防御

  • 表单token

    每次发送请求在表单附带一个token随机数,攻击者网站可以构造请求,但是攻击者网站页面代码是没办法获取服务器发送给用户的token的。

  • header头token

    用户获取服务器返回token,每次请求Ajax自定义请求头,提取token值附带在request

  • 防御代码分析