第十周SSRF漏洞
1.SSRF漏洞
SSRF(Server-Side Request Forgery:服务端请求伪造)是由攻击者构造形成,由服务端发起请求的一种安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所以它能够访问到与它相连而与外网隔离的内部系统。
大多是由于服务端提供了从其他服务器(相当于中介)应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以控制后端服务器对传入的任意地址发送请求,并返回对该目标请求的响应。
通过控制Web服务器当作跳板机来发起请求,攻击内网中其他服务从而获得内网的敏感信息。比如,通过控制前端请求的远程地址,来让请求数据由远程URL域名修改为本地或者内网的IP地址及服务,来造成对内网系统的攻击。
案例的话可以:360某处ssrf漏洞可探测内网信息(附内网6379探测脚本) | wooyun-2016-0229611| WooYun.org
1.1漏洞危害
- 扫描内网开放服务
- 向内部任意主机的任意端口发送 payload 来攻击内网服务
- DoS 攻击(请求大文件,始终保持连接 Keep-Alive Always)
- 攻击内网的 Web 应用,例如直接 SQL 注入、XSS 攻击等
- 利用 file、gopher、dict 协议读取本地文件、执行命令等
1.2漏洞检测和绕过
php:http、https、file、gopher、phar、dict、ftp、ssh、telnet...java:http、https、file、ftp、jar、netdoc、mailto...



场景3:限制请求只为http协议:采⽤302跳转(访问的是A,跳转到B),还是用短网址-短链接生成,也可以用其他的短网址生成 - 7OK.CN
场景4:利用句号绕过
SSRF绕过方法总结:SSRF绕过方法总结 - SecPulse.COM | 安全脉搏
1.3漏洞出现点
sharewapurllinksrcsourcetargetdisplaysourceURlimageURLdomain还有其他的可以自己找
- 观察法:观察 URL 中是否有 share、url、image 等关键字,可能存在 SSRF 漏洞,尝试将关键字的值修改为内网地址并发起请求。
- 使用 DNSLog 等工具进行测试,查看是否被访问。生成一个域名用于 SSRF 漏洞测试,看漏洞服务器是否发起 DNS 解析请求,若成功访问在DNSLog Platform上就会有解析日志。就代表有SSRF漏洞,但执行不了的话也不能完全证明没有漏洞
- 抓包分析发送的请求是不是由服务端发送的,如果不是客户端发出的请求,则有可能存在 SSRF,接着寻找存在 HTTP 服务的内网地址尝试发起访问。
- 访问日志检查:伪造请求到自己控制的公网服务器,然后在服务器上查看访问日志是否有来自漏洞挖掘 SSRF 漏洞的服务器(即服务端)的请求。
- 扫描工具。
1.4实验来看看。
使用Pikachu演示
更改http后面,或者使用dnslog
还可以利用file协议
因为源码
file_get_content()函数的作用是把整个文件读入一个字符串中。
php://filter(伪协议)可以在访问数据流之前进行「过滤」,并指定过滤方式,用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。前提是代码不是串接代码,就是前面没有字符串
名称 | 描述 |
resource=<要过滤的数据流> | 这个参数是必须的。它指定了你要筛选过滤的数 据流,即要读的⽂件。 |
read=<读链的筛选列表> | 可选。可以设定⼀个或多个过滤器名称, 以管道符(` |
write=<写链的筛选列表> | 可选。可以设定⼀个或多个过滤器名称, 以管道符(` |
<;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛 选器列表会视情况应⽤于读或写链。 |
http://127.0.0.1/vul/ssrf/ssrf_fgc.php?file=php://filter/resource=ssrf.php


2.XXE漏洞
外部实体注入(XXE)漏洞。这种漏洞产生的根本原因是 XML 解析器在处理包含外部实体引用的 XML 文档时,没有对外部实体进行严格的安全限制和过滤,导致攻击者可以构造恶意的 XML 内容,诱导解析器加载并执行外部资源,从而可能造成敏感信息泄露、服务器端请求伪造等安全问题。
xml简介
XML是一种用于结构化电子文档的标记语言,能够标记数据并定义数据类型。作为可扩展的标记语言,它允许用户自定义标记规则。典型的XML文档包含三个主要部分:XML声明、文档类型定义(DTD)和文档元素。(XML 被设计用来传输和存储数据,不用于表现和展示数据)

内部声明实体 <!DOCTYPE 实体名称 "实体的值">引⽤外部实体 <!DOCTYPE 实体名称 SYSTEM "URL"> 或者 <!DOCTYPE 实体名称 PUBLIC "public_ID" "URL">
危害:
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网服务等危害。
Pikachu演示
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE note [<!ENTITY hack "magedu">
]>
<name>&hack;</name>

<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY magedu SYSTEM "file:///etc/passwd">(如果没有回响的可以更改为DNSlog来查看是否有xxe漏洞)
]>
<x>&magedu;</x>(必须引用的,跟上面的一摸一样)
3.目录遍历漏洞(相当于信息泄露)

文件包含和目录遍历的区别
- 文件包含漏洞是通过include、require、read等函数把文件读取到当前路径内并进行加载和解析,而目录遍历漏洞则是中间件配置不完善所引发的问题,一般不具备解析功能。
- 从URL表现来看:文件包含中URL = 后面的内容通常是文件名,而目录遍历中URL = 后面的内容不⼀定是⽂件名,也有可能是目录。
- 从内容表现来看:文件包含造成的信息泄漏,泄漏的信息是展示在HTML文件中,而目录遍历引发的泄漏可能是泄漏文件自身。
- 从攻击效果来看:⽂件包含可以实现Getshell,⽬录遍历则是造成信息泄露。
如何发现⽬录遍历漏洞
1.手工发现
2.自动化扫描
利用avws,goby
常见绕过
1.绝对路径绕过
应用程序禁用了目录跳转符如 ../ ,直接换成绝对路径即可实现绕过。
../../../etc/passwd ===> /etc/passwd
2.双写绕过
应用程序通过正则匹配目录跳转符然后清除,但是仅清除⼀次,所以利用双写即可实现绕过。
../../../etc/passwd ===> ..././..././..././etc/passwd
3.编码绕过
../../../etc/passwd ===> ..%2f..%2f..%2fetc%2fpasswd
4.加密参数绕过
应用程序对文件名加密后再提交。
../../../etc/passwd ===> Li4vLi4vLi4vZXRjL3Bhc3N3ZA==
5.预期路径绕过
../../../etc/passwd ===> /var/www/html/../../../etc/passwd
实验
http://pikachu_ip/vul/dir/dir_list.php?title=../../../../../../etc/passwd
4.CSRF漏洞
跨站请求伪造(也称 CSRF),是一种挟持用户在当前已登录的Web应用程序上执行非本意操作的攻击方法,允许攻击者诱导用户在不知情的情况下执行他们并不打算执行的操作(改密码什么之类的)。当用户访问包含恶意代码的网页时,会向指定正常网站发送非本人意愿的请求数据包,如果此时用户恰好登录了该正常网站(也就是身份验证是正常的),就会以该用户的身份执行该恶意代码的请求,从而造成CSRF漏洞。当你U
- 一个功能操作。应用程序中存在攻击者有可能诱导用户的操作,这可能是特权操作(例如修改其他用户的权限)或对用户特定数据的任何操作(例如更改用户的邮箱、密码)。
- 基于 Cookie 的会话处理。执行该操作涉及发出一个或多个 HTTP 请求,并且应用程序仅依赖会话 cookie 来识别发出请求的用户,没有其他机制可用于跟踪会话或验证用户请求。
- 没有不可预测的请求参数。执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不会受到攻击,因为攻击者预先构造的恶意链接中无法提前预测并定义“现有密码”的值。
DVWA演示
可以看到密码是password
1.顶部的URL
http://127.0.0.1:8080/vulnerabilities/csrf/?password_new=123456&password_co
nf=123456&Change=Change#
更改密码
http://127.0.0.1:8080/vulnerabilities/csrf/?password_new=aaa&password_conf=
2&Change=Change#
这么长的地址一看就有问题,所以使用短网址,让人容易点击
访问地址,正常的来说是不希望有提示,可以更换一个短地址来写。
这样子就换好了。我们其实还可以更好的,把代码写的不会停留该页面过久,且不会输入提示。
真正的攻击是会找一个跟你的目标域名相似的,至少不会让人简单的看出破绽。就像风灵月影宗一样,也有人盗版它的,长的几乎一样,不细看的话分不出来。