参考文章

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. SpringBoot+Vue 前后端合并部署

    前后端分离开发项目 前端vue项目 服务端springboot项目 如何将vue的静态资源整合到springboot项目里,通过启动jar包的方式部署服务. 前端项目执行npm run build 命 ...

  2. [leetcode349]Intersection of Two Arrays

    设计的很烂的一道题 List<Integer> res = new ArrayList<>(); // int l1 = nums1.length; // int l2 = n ...

  3. 编写高质量JAVA代码之让接口的职责保持单一

    上述标题读者朋友应该也注意到了是让接口的职责保持单一,而不是实现者单一. 设计模式六大原则之单一原则: 定义 不要存在多于一个导致类变更的原因.**通俗的说,即一个类只负责一项职责. 下面以一个电话模 ...

  4. 详细介绍如何自研一款"博客搬家"功能

    前言 现在的技术博客(社区)越来越多,比如:imooc.spring4All.csdn.cnblogs或者iteye等,有很多朋友可能在这些网站上都发表过博文,当有一天我们想自己搞一个博客网站时就会发 ...

  5. 安装Apache2.4 操作系统:Centos7.4

    正式安装Apache2.4 操作系统:Centos7.4,(需要关闭Selinux)1.在每安装一个服务都要养成查看是否安装,如果安装则需要卸载: #[root@yankerp ~]# rpm -qa ...

  6. Linux系统性能排查

    一.性能监控Sar命令 语法格式: [root@cdh init.d]# sar -h -A:所有报告的总和 -b:显示I/O和传递速率的统计信息 -B:显示换页状态 -d:输出每一块磁盘的使用信息 ...

  7. MySQL/MariaDB二进制安装

    本文说明MySQL/MariaDB二进制安装的过程 mysql和mariadb的安装方式基本一致,唯一初始化方式有点不一样 1.规划: 数据文件存储位置                /data/my ...

  8. Solon rpc 之 SocketD 协议 - RPC鉴权模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  9. dbms_job和dbms_job基础学习

    一.dbms_job学习 a.创建job: dbms_job.submit(jobno,what,next_date,interval);b.删除job: dbms_job.remove(jobno) ...

  10. 【C++】《Effective C++》第九章

    杂项讨论 条款53:不要轻忽编译器的警告 请记住 严肃对待编译器发出的警告信息.努力在你的编译器的最高(最严苛)警告级别下争取"无任何警告"的容易. 不要过度依赖编译器的报警能力, ...