SSRF-Vulnerable-Lab靶场训练
参考文章
- SSRF-Vulnerable-Lab
- tag: #SSRF
- Ref:
1、file_get_content.php
提取并显示指定文件内容的应用程序代码
在编程语言中,有一些函数可以获取本地保存文件的内容。这些功能可能能够从远程URL以及本地文件(例如PHP中的file_get_contents)中获取内容。
如果没有对输入内容进行处理,或者处理的不够严格,将有可能导致SSRF漏洞攻击。
输入:file_get_content.php
显示:
---
直接暴露源码
输入:file:///C:/Windows/System32/drivers/etc/hosts
暴露出hosts文件内容
输入:http://127.0.0.1:80
可以探测端口
查看源码(部分):
if(isset($_POST['read']))
{
$file=trim($_POST['file']);
echo htmlentities(file_get_contents($file));
}
发现对输入没有任何过滤。
2、sql_connect.php
应用程序提供接口以连接到远程主机
Web应用程序具有允许用户使用任何端口指定任何IP的接口。在这里,该应用程序具有尝试连接到“ MySQL”,“ LDAP”等服务的功能。
应用程序希望用户在输入字段中指定远程服务器的主机名/ IP,用户名和密码。然后,应用程序尝试通过指定的端口连接到远程服务器。在这种情况下,应用程序尝试与侦听特定端口的远程服务进行通信。当易受攻击的代码具有连接到MySQL之类的服务器的功能并且用户指定了SMB端口时,易受攻击的应用程序将尝试使用MySQL服务器服务数据包与SMB服务进行通信。即使端口是开放的,由于通信方式的差异,我们仍无法与服务进行通信。
按照默认值访问如图:
修改Host IP为:127.0.0.1:80 (80端口开启了)
明显不一样,用burpsuite爆破IP和端口,
查看源码(部分):
<?php
set_time_limit(0);
error_reporting(0);
if(isset($_POST['sbmt']))
{
$host=trim($_POST['host']);
$uname=trim($_POST['uname']);
$pass=trim($_POST['pass']);
$r=mysqli_connect($host,$uname,$pass);
if (mysqli_connect_errno())
{
echo mysqli_connect_error();
}
}
echo "<br>";
?>
可知,主要是通过mysqli_connect()连接,错误信息是mysqli_connect_errno(),
3、download.php
与file_get_content.php类似,
输入:download.php
,就会下载download.php文件
同样的,输入:file:///C:/Windows/System32/drivers/etc/hosts
查看源码(部分):
function file_download($download)
{
if(file_exists($download))
{
header("Content-Description: File Transfer");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Accept-Ranges: bytes');
header('Content-Disposition: attachment; filename="'.basename($download).'"');
header('Content-Length: ' . filesize($download));
header('Content-Type: application/octet-stream');
ob_clean();
flush();
readfile ($download);
}
else
{
echo "<script>alert('file not found');</script>";
}
}
if(isset($_POST['download']))
{
$file=trim($_POST['file']);
file_download($file);
}
其中没有过滤,通过readfile()函数读取文件。
4、dns-spoofing.php
输入:dns-spoofing.php
直接爆出源码:
查看源码(部分):
if(isset($_POST['read']))
{
$file=strtolower($_POST['file']);
if(strstr($file, 'localhost') == false && preg_match('/(^https*:\/\/[^:\/]+)/', $file)==true)
{
$host=parse_url($file,PHP_URL_HOST);
if(filter_var($host, FILTER_VALIDATE_IP))
{
if(filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)== false)
{
echo '
<table width="50%" cellspacing="0" cellpadding="0" class="tb1" style="opacity: 0.6;">
<tr><td align=center style="padding: 10px;" >
The provided IP is from Private range and hence not allowed
</td></tr></table>
<table width="50%" cellspacing="0" cellpadding="0" class="tb1" style="margin:10px 2px 10px;opacity: 0.6;" >';
}
else
{
echo '<textarea rows=20 cols=60>'.file_get_contents($file)."</textarea>";
}
}
else
{
echo '<textarea rows=20 cols=60>'.file_get_contents($file)."</textarea>";
}
}
elseif(strstr(strtolower($file), 'localhost') == true && preg_match('/(^https*:\/\/[^:\/]+)/', $file)==true)
{
echo '
<table width="30%" cellspacing="0" cellpadding="0" class="tb1" style="opacity: 0.6;">
<tr><td align=center style="padding: 10px;" >
Tyring to access Localhost o_0 ?
</td></tr></table>
<table width="50%" cellspacing="0" cellpadding="0" class="tb1" style="margin:10px 2px 10px;opacity: 0.6;" >';
}
else
{
echo '<textarea rows=20 cols=60>'.file_get_contents($file)."</textarea>";
}
}
简单的说就是,该脚本具有允许用户从远程URL获取数据的功能。用户需要指定远程URL与任何IP或域名这个脚本检查用户是否指定了“localhost”、“Internal IPs”或“Reserved IPs”的输入。如果用户指定的域/IP被列入黑名单,脚本将不会获取内容并停止处理。注意的是,该代码并没有将域/IP列入黑名单中
所以,没有可以类似题一的方法,输入:file:///C:/Windows/System32/drivers/etc/hosts
但这是不正规的,依作者的题意,应当基于DNS的欺骗绕过IP黑名单。目前并没有掌握该技巧,暂且放下。
5、dns_rebinding.php
应用程序不仅实现了内部和私有范围的IP黑名单,而且还将用户提供的域名解析为其IP,并再次执行检查是否已解析为黑名单。
在这种情况下,基于DNS的欺骗手段也不会访问内部/保留IP上托管的内容。应用程序代码对其IP执行域解析,并再次对解析的IP执行黑色列出的IP检查。
与题4类似,暂且放下
SSRF-Vulnerable-Lab靶场训练的更多相关文章
- 【靶场训练_DVWA】Command Execution
low 利用: ;ls ../../ 源码分析: <?php if( isset( $_POST[ 'submit' ] ) ) { //将ip对应的值复制给target $target = $ ...
- 通过Portwigge的Web安全漏洞训练平台,学习SSRF
前言 Portswigger是Burpsuite的官网,也是一个非常好的漏洞训练平台.其Web安全靶场地址为:https://portswigger.net/web-security/ 该靶场的训练内 ...
- SSRF——weblogic vulhub 漏洞复现及攻击内网redis(一)(附批量检测脚本)
0X01 概述 SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务.利用SSRF能实现以下效果:1) 扫描内网(主 ...
- DC-1 靶机渗透
DC-1 靶机渗透 *概况*: 下载地址 https://www.vulnhub.com/entry/dc-1,292/ *官方描述:* DC-1 is a purposely built vulne ...
- Lab: 2FA bypass using a brute-force attack:暴力破解双重验证靶场复盘(困难级别)
靶场内容: This lab's two-factor authentication is vulnerable to brute-forcing. You have already obtained ...
- Pikachu靶场SSRF学习
下载Pikachu靶场:https://github.com/zhuifengshaonianhanlu/pikachu Windows用phpstudy也行,记得要改config.inc文件 打开S ...
- MIT jos 6.828 Fall 2014 训练记录(lab 4)
源代码参见我的github: https://github.com/YaoZengzeng/jos Part A: Multiprocessor Support and Cooperative Mul ...
- Lab: Brute-forcing a stay-logged-in cookie:点击保持登录状态返回的Cookie里面破解账号密码靶场复盘
靶场内容: 此实验室允许用户在关闭浏览器会话后仍保持登录状态.用于提供此功能的 cookie 容易受到暴力破解. 为了解决实验室问题,暴力破解 Carlos 的 cookie 以访问他的"我 ...
- MIT jos 6.828 Fall 2014 训练记录(lab 6)
源代码参见我的github: https://github.com/YaoZengzeng/jos 在这个实验中将实现一个基于Intel 82540M(又称E1000)的网卡驱动.不过,一个网卡驱动还 ...
随机推荐
- JavaScript 获取数组对象中某一值封装为数组
1.获取数组对象中某一值封装为数组(一) data = [["2000-06-05",116],["2000-06-06",129]]; var dateLis ...
- [LeetCode]223. Rectangle Area矩形面积
/* 像是一道数据分析题 思路就是两个矩形面积之和减去叠加面积之和 */ public int computeArea(int A, int B, int C, int D, int E, int F ...
- JVM初始化类契机
* 对于初始化只有主动使用类字段时才会初始化<br> * 除非对一个类的主动引用,否则所有引用类的方式都不会触发其初始化<br> * 主动引用有且只有以下场景:<p> ...
- python安装库报错的处理方法
在安装python map库时遇到了还多问题,找了好的方法都没有安装成功,最后改安装basemap库参考了了:https://www.jb51.net/article/147780.htm一文操作,最 ...
- 大数据量查询容易OOM?试试MySQL流式查询
一.前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM). 其实在 MySQL 数据库中提供了流式查询,允许把符 ...
- RocketMQ 简介
本文根据阿里云 RocketMQ产品文档整理 地址:https://help.aliyun.com/document_detail/29532.html?userCode=qtldtin2 简介 Ro ...
- Hbase Rowkey设计原则
Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位 ...
- NOIP初赛篇——07信息编码表示
一.基本概念 编码 计算机要处理的数据除了数值数据以外,还有各类符号.图形.图像和声音等非数值数据.而计算机只能识别两个数字0,1.要使计算机能处理这些信息,首先必须要将各类信息转换成0与1表示的 ...
- 对于k8s微服务的性能测试监控平台搭建
之前有写过对于传统项目的性能测试监控,但是对于目前市场占比已经很低,大部分项目使用k8s,今天讲一下对于k8s如何去监控. 对于k8s的监控我们所有的操作都要在master下进行. 一.部署grafa ...
- 【数据结构与算法】Java制作一个简单数组类
bobo老师的玩转算法系列–玩转数据结构 简单记录 文章目录 不要小瞧数组 - 制作一个数组类 1 .使用Java中的数组 数组基础 简单使用 2.二次封装属于我们自己的数组 数组基础 制作属于我们自 ...