参考文章

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靶场训练的更多相关文章

  1. 【靶场训练_DVWA】Command Execution

    low 利用: ;ls ../../ 源码分析: <?php if( isset( $_POST[ 'submit' ] ) ) { //将ip对应的值复制给target $target = $ ...

  2. 通过Portwigge的Web安全漏洞训练平台,学习SSRF

    前言 Portswigger是Burpsuite的官网,也是一个非常好的漏洞训练平台.其Web安全靶场地址为:https://portswigger.net/web-security/ 该靶场的训练内 ...

  3. SSRF——weblogic vulhub 漏洞复现及攻击内网redis(一)(附批量检测脚本)

    0X01 概述 SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务.利用SSRF能实现以下效果:1)        扫描内网(主 ...

  4. DC-1 靶机渗透

    DC-1 靶机渗透 *概况*: 下载地址 https://www.vulnhub.com/entry/dc-1,292/ *官方描述:* DC-1 is a purposely built vulne ...

  5. Lab: 2FA bypass using a brute-force attack:暴力破解双重验证靶场复盘(困难级别)

    靶场内容: This lab's two-factor authentication is vulnerable to brute-forcing. You have already obtained ...

  6. Pikachu靶场SSRF学习

    下载Pikachu靶场:https://github.com/zhuifengshaonianhanlu/pikachu Windows用phpstudy也行,记得要改config.inc文件 打开S ...

  7. MIT jos 6.828 Fall 2014 训练记录(lab 4)

    源代码参见我的github: https://github.com/YaoZengzeng/jos Part A: Multiprocessor Support and Cooperative Mul ...

  8. Lab: Brute-forcing a stay-logged-in cookie:点击保持登录状态返回的Cookie里面破解账号密码靶场复盘

    靶场内容: 此实验室允许用户在关闭浏览器会话后仍保持登录状态.用于提供此功能的 cookie 容易受到暴力破解. 为了解决实验室问题,暴力破解 Carlos 的 cookie 以访问他的"我 ...

  9. MIT jos 6.828 Fall 2014 训练记录(lab 6)

    源代码参见我的github: https://github.com/YaoZengzeng/jos 在这个实验中将实现一个基于Intel 82540M(又称E1000)的网卡驱动.不过,一个网卡驱动还 ...

随机推荐

  1. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...

  2. 阿里技术专家详解 Dubbo 实践,演进及未来规划

    Dubbo 整体介绍 Dubbo 是一款高性能,轻量级的 Java RPC 框架.虽然它是以 Java 语言来出名的,但是现在我们生态里面已经有 Go.Python.PHP.Node.JS 等等语言. ...

  3. jit编译原理

    jit用以把程序全部或部分翻译成本地机器码,当需要装载某个类[通常是创建第一个对象时],编译器会先找到其.class文件,然后将该类的字节码装入内存. hotspot采用惰性评估法: 如果一段代码频繁 ...

  4. [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]

    [简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  5. 基于E-PUCK 2.0多智能体自主协同 高频投影定位系统

    群体智能机器人是一种国际前沿的人工智能研究项目,由多个小型机器人组成的集群式解决系统,灵感源于蚂蚁.蜜蜂.鱼等群体生物,在没有统一领导的情况下,也能合作执行大量复杂的任务,比如组建一个图形,再在此基础 ...

  6. Rejecting mapping update to [xxx] as the final mapping would have more than 1 type: [xxx, xx]

    说明: 1.elasticsearch 版本 6.3.1 2.在同一个index下创建两个type时报错,信息如下: 在创建第二个type:solr时,先前已经在相同索引下创建了一个type:es [ ...

  7. spring boot 邮件服务

    引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...

  8. LeetCode117 每个节点的右向指针 II

    给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...

  9. 【Flutter】功能型组件之颜色和主题

    前言 Color类中颜色以一个int值保存,显示器颜色是由红.绿.蓝三基色组成,每种颜色占8比特,存储结构如下: Bit(位) 颜色 0-7 蓝色 8-15 绿色 16-23 红色 24-31 Alp ...

  10. Centos7 Nginx+PHP7 配置

    Centos7 Nginx+PHP7 配置 内容: 源码编译安装Nginx和PHP 配置PHP和Nginx,实现Nginx转发到PHP处理 测试 设置Nginx.PHP开机自启 安装的版本: Ngin ...