NISA-easyssrf(wp)

在做这道题之前我先简单回顾一下这道题的考点

(1)LFI漏洞

LFI漏洞产生的原因是由于程序员未对用户可控变量进行输入检查,此漏洞的影响可能导致泄露服务器上的敏感文件,如若攻击者能够通过其他方式在Web服务器上放置代码,那么他们便可以执行任意命令。也就是说在用户输入的界面比如查询界面由于程序猿没有过滤掉一些函数,导致用户可以不怀好意去添加恶意代码去查询网站原有文件信息

主要涉及到的函数 include() require() include_once() require_once() magic_quotes_gpc() allow_url_fopen() allow_url_include() move_uploaded_file() readfile() file() file_get_contents() upload_tmp_dir() post_max_size() max_input_time()

各个协议实现的命令执行

1)file://用于访问本地文件系统

条件(php.ini) allow_url_fopen off/on allow_url_include off/on 使用方法: file://[文件的绝对路径和文件名]

2)php://访问各个输入输出流

php伪协议 php://filter:用于读取源码并进行base64编码输出 条件(php.ini) allow_url_fopen off/on allow_url_include off/on php://input:可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行 条件(php.ini) allow_url_fopen off/on allow_url_include on php://stdin是只读的,php://stdout和php://stderr是只写的 php://output是一个只写的数据流,允许你以print和echo一样的方式,写入到输出缓冲区 php://fd允许直接访问指定的文件描述符*

这道题就需要使用php伪协议进行查询并用base64进行输出

(2)ssrf漏洞

简介:服务器端请求伪造(SSRF:Server-Side Request Forgery)是一个 Web 安全漏洞,意为:攻击者诱导服务器将 HTTP 请求发送到攻击者选择的一个目标上。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

产生原因:SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

转码服务

在线翻译

分享

图片加载与下载(通过URL地址加载或下载图片)

图片、文章收藏功能

#

危害:1.主机本地敏感数据的读取,file、gopher、dict协议读取本地文件、执行命令等

2.攻击内网的web应用,例如直接SQL注入、XSS攻击等 mysql默认不允许外部访问,但对于本地没有防护

# SSRF相关函数和协议

file_get_contents()

file_get_content函数从用户指定的url获取内容,然后指定一个文件名进行保存,并展示给用户。

协议

1)file: 在有回显的情况下,利用 file 协议可以读取任意内容 (2)dict:泄露安装软件版本信息,查看端口,操作内网redis服务等 (3)gopher:gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell (4)http/s:探测内网主机存活

假设一个漏洞场景:某网站有一个在线加载功能可以把指定的远程图片加载到本地

那么网站请求的大概步骤应该是类似以下: 用户输入图片地址->请求发送到服务端解析->服务端请求链接地址的图片数据->获取请求的数据加载到前台显示

这个过程中可能出现问题的点就在于请求发送到服务端的时候,系统没有效验前台给定的参数是不是允许访问的地址域名,例如,如上的链接可以修改为本地127.0.0.1:22端口

如果协议允许,甚至可以使用其他协议来读取和执行相关命令。

举个例子:http://www.xxx.com/image.php?image=file:///etc/passwd

这就可以实现在etc文件夹里查询passwd

扩展到这里,开始复现这道题

e5d005b15612467e8f3cac7a67f4ecd6.png

这就是上面说的明显有ssrf漏洞,可以看回显。利用file 协议可以读取flag试试

1d62ec6cc8d343f5a29bf496bcd0e387.png

文件不在这里,试试/fl4g

e1d81f766de84956b04c6943092f46f0.pngb35ebb1e0d7544e6be9d8f6e6530251e.png

代码简单审计一下

参数是file,需要用到file_get_contents(),而且flag就在resource=/flag里面。已经很清楚了,就是利用我上面写的LFI漏洞的第二点(还不清楚可以再回看)

总结一下的payload就是?file=php://filter/read=convert.base64-encode/resource=/flag

f5a21cb431ef4477b4eab7c7de7bad6a.png

读出来的flag拿去base64解码就可

这一道题虽然很简单,但是伴随的考点很多,科普的这两种漏洞可以之后多了解

 

  • 43
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值