awaiting production checklist_解题神器app

awaiting production checklist_解题神器appA7——MissingFunctionalLevelAccessControl应用层访问控制缺失。DirectoryTraversal-Directorieslow未对输入的目录进行限制,可以访问任意目录。http://localhost/bwapp/directory_traversal_2.php?directory=documents/../../../…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

A7——Missing Functional Level Access Control

应用层访问控制缺失。

Directory Traversal – Directories

low

未对输入的目录进行限制,可以访问任意目录。

http://localhost/bwapp/directory_traversal_2.php?directory=documents/../../../../

Alt text

function show_directory($directory)
{    
// Checks whether a file or directory exists    
if(file_exists($directory))
{    
    $dp = opendir($directory);       
    while($line = readdir($dp))
    {     
       if($line != "." && $line != ".." && $line != ".htaccess")
        {          
            echo "<a href=\"" . $directory . "/" . $line . "\" target=\"_blank\">" . $line . "</a><br />";       
        }
    }      
}

medium

   if(strpos($data, "../") !== false ||
   strpos($data, "..\\") !== false ||
   strpos($data, "/..") !== false ||
   strpos($data, "\..") !== false ||
   strpos($data, ".") !== false)

这里在源码中限制了一些符号的使用,但是directory变量的值未做限制,仍可访问bwapp目录下任意文件。

http://localhost/bwapp/directory_traversal_2.php?directory=evil

Alt text

high

这里需要比较我们要访问的目录是不是在我们的目录下。从逻辑上解决了目录遍历的问题。

$directory_traversal_error = directory_traversal_check_3($directory, $base_path = "./documents");           

function directory_traversal_check_3($user_path,$base_path = "")
{

$directory_traversal_error = "";

$real_base_path = realpath($base_path);

$real_user_path = realpath($user_path);

if(strpos($real_user_path, $real_base_path) === false)
{

    $directory_traversal_error = "<font color=\"red\">An error occurred, please try again.</font>";

}

其中,strpos(string, find, [start])查找find在string中第一次中出现的位置,并将位置返回。

base path: ./documents 
real base path: H:\phpstudy\WWW\bwapp\documents

user path: documents/ 
real user path: H:\phpstudy\WWW\bwapp\documents

Directory Traversal – Files

low

http://localhost/bwapp/directory_traversal_1.php?page=666

Alt text

还可以结合目录遍历访问上层目录文件

http://localhost/bwapp/directory_traversal_1.php?page=../../manual.chm

Alt text

medium

同目录遍历medium,只限制了目录遍历,仍可使用文件名访问当前目录任意文件。

high

同目录遍历high,使用real user path进行比较。

Host Header Attack (Cache Poisoning)

low

修改要访问的页面
Alt text
Alt text

medium

限制了首页页面。

if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2")
{
$session_id = session_id();         
?>
<p>Click <a href="http://<?php echo $_SERVER["HTTP_HOST"]?>/bWAPP/portal.php">here</a> to go back to the portal.</p>
<?php
}

else
{
?>
    <p>Click <a href="portal.php">here</a> to go back to the portal.</p>
<?php
}
?>

Remote & Local File Inclusion (RFI/LFI)

low

http://localhost/bwapp/rlfi.php?language=666&action=go

Alt text

medium

http://localhost/bwapp/rlfi.php?language=aim&action=go

Alt text

在medium下,仍有远程文件包含漏洞。

high

限制了可以访问的文件。

case "2" :
$available_languages = array("lang_en.php", "lang_fr.php", "lang_nl.php");
$language = $_GET["language"] . ".php";

Restrict Device Access

low

看到题目就知道这个应该是去修改HTTP头。
在网上找了一段iphone浏览器的浏览器头,然后替换
Alt text

Mozilla/5.0(iPhone;U;CPUiPhoneOS4_0likeMacOSX;en-us)AppleWebKit/532.9(KHTML,likeGecko)

Version/4.0.5Mobile/8A293Safari/6531.22.7

成功绕过
Alt text

medium and high

这个题有一点很不同的是,在medium和high中并没有给出对于这个漏洞的解决方法,三个难度都使用了同样的校验函数。
这大概也就是爬虫程序可以更换http头绕过部分检测的原因吧。

function check_user_agent()
{

$user_agent = $_SERVER["HTTP_USER_AGENT"];

// Debugging
// echo $user_agent;

$authorized_device = false;

$devices = array("iPhone", "iPad", "iPod", "Android");

// Searches for a string in an array
foreach($devices as $str)
{

    // echo $str;
    if(strpos($user_agent, $str) !== false) 
    {      

        // Debugging    
        // echo $user_agent . " contains the word " . $str;

        $authorized_device = true;

    }

} 

Restrict Folder Access

其实一开始因为没有清除浏览器缓存,所以我并没有发现low和medium有什么不同……于是先去读了一遍源码,可以发现在三个难度中,都与一个“.htaccesss”文件有关。搜索了一下这个是什么。

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

所以看来这个应该就是与访问权限有关的文件。

比对一下low和medium的源码发现,在low中,会将“.htaccesss”这个文件删除;而在medium中,会新建这个文件并写入“Deny from all”。

上网快速搜寻了一下这个东西的用法。

https://stackoverflow.com/questions/19118482/deny-access-to-one-specific-folder-in-htaccess

意思就是说,例如在“site/includes/.htaccess”写入“Deny from all”时,“site/includes/.htaccess”该目录下的所有内容都不能被访问。

到这里的话思路大概就清楚了,在low中可以通过直接访问url的方式,在log off后继续访问敏感文件。而在medium和high中,进行了正确的配置修复了漏洞。

low

直接访问http://localhost/bwapp/documents/bWAPP_intro.pdf

        case "0" :            

        // Deletes the '.htaccesss' file        
        if(file_exists($directory . "/.htaccess"))
        {    

            unlink($directory . "/.htaccess");

        }

        $dp = opendir($directory);

        while($line = readdir($dp))
        {

            if($line != "." && $line != "..")
            {

                echo "<a href=\"" . $directory . "/" . $line . "\" target=\"_blank\">" . $line . "</a><br />";

            }

        }        

        break;

medium

访问http://localhost/bwapp/documents/bWAPP_intro.pdf后出现

Alt text

        case "1" :  

        // Creates the '.htaccess' file
        $fp = fopen($directory . "/.htaccess", "w");
        fputs($fp, "Deny from all", 200);
        fclose($fp);

        $dp = opendir($directory);

        while($line = readdir($dp))
        {

            if($line != "." && $line != ".." && $line != ".htaccess")
            {

                echo "<a href=\"restrict_folder_access.php?file=" . $directory . "/" . $line . "\">" . $line . "</a><br />";

            }

        }

        break;

Server Side Request Forgery (SSRF)

low

这个一开始没想到怎么利用,去网上找了下payload,结果网上的弱智payload的文件路径和现在的版本似乎不太一样,耽误了点时间。

在”/evil”下有3个给供ssrf实验用的文件,其中分别包括了三个不同的bwapp的payload。

http://localhost/bwapp/rlfi.php?ip=127.0.0.1&language=http://localhost/bwapp/evil/ssrf-1.txt&action=go
ssrf-1.txt

Alt text
Alt text

ssrf-2.txt,使用XXE访问敏感文件

Alt text

ssrf-3.txt,演示Samsung SmartTV (CVE-2013-4890)

Alt text

XML External Entity Attacks (XXE)

low

<reset><login>bee</login><secret>Any bugs?</secret></reset>替换为

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY popped SYSTEM "http://127.0.0.1/bWAPP/666"> ]>
<reset><login>&popped;</login><secret>Any bugs?</secret></reset>


Alt text

在response中 可以看到返回结果
Alt text

源代码

ini_set("display_errors",1);

$xml = simplexml_load_string($body);

// Debugging
// print_r($xml);

$login = $xml->login;
$secret = $xml->secret;

if($login && $login != "" && $secret)
{

    // $login = mysqli_real_escape_string($link, $login);
    // $secret = mysqli_real_escape_string($link, $secret);

    $sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";

    // Debugging
    // echo $sql;      

    $recordset = $link->query($sql);

medium

禁止了xml外部实体引用。
源代码

// Disables XML external entities. Doesn't work with older PHP versions!
// libxml_disable_entity_loader(true);
$xml = simplexml_load_string($body);

// Debugging
// print_r($xml);

$login = $_SESSION["login"];
$secret = $xml->secret;

if($secret)
{

    $secret = mysqli_real_escape_string($link, $secret);

    $sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";

    // Debugging
    // echo $sql;      

    $recordset = $link->query($sql);

防御

方案一、使用开发语言提供的禁用外部实体的方法

PHP:

libxml_disable_entity_loader(true);

其他语言:

Prevention_Cheat_Sheet”>https://www.owasp.org/index.php/XML_External_Entity(XXE)_Prevention_Cheat_Sheet

方案二、过滤用户提交的XML数据

关键词:,SYSTEM和PUBLIC。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190452.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白[通俗易懂]

    超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白[通俗易懂]0、排序算法说明0.1排序的定义 对一序列对象根据某个关键字进行排序。 0.2术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度…

  • 电商网站的云配置推荐是什么_云服务器配置怎么选

    电商网站的云配置推荐是什么_云服务器配置怎么选电商网站该如何进行云服务器配置呢?电商云服务器的配置选择,其实和网站或应用的类型、访问量、数据量大小、程序质量等因素有关,建议和您的网站或应用的开发技术人员沟通,选择最适合您的配置。如果您没有技术人员可提供建议,可以参考我们的建议进行配置选择。网站初始阶段访问量小,只需要一台低配置的服务器即可,应用程序、数据库、文件等所有资源均在一台服务器上。阿里云服务器具有强大的弹性扩展和快速开通能力。随着业务的增长,你可以随时在线增加服务器的CPU、内存、硬盘以及带宽等配置,或者增加服务器数量,无需担心低配服务器.

  • 手把手用keras分类mnist数据集

    实战流程获得数据,并将数据处理成合适的格式按照自己的设计搭建神经网络设定合适的参数训练神经网络在测试集上评价训练效果一、认识mnist数据集fromkeras.utilsimportto_categoricalfromkerasimportmodels,layers,regularizersfromkeras.optimizersimportRMSprop…

  • Python如何将字符串分割成单个字符,并形成一个list?

    Python如何将字符串分割成单个字符,并形成一个list?一个字符串可以看做是一个list具体操作如下&gt;&gt;&gt;a="这是一段话"&gt;&gt;&gt;a[0]’这’&gt;&gt;&gt;list(a)[‘这’,’是’,’一’,’段’,’话’]&gt;&gt;&gt;forxina: print(x) 这是一段话&gt;&gt;&gt;所以

  • 伽马校正和颜色空间

    伽马校正和颜色空间一、伽马校正所谓gamma校正,实际上是一个颜色的非线性曲线变换。下面来解释这个曲线存在的原因。1.1人眼的非线性视觉效应为什么要有gamma校正了。一言以蔽之,人眼的生理效应。如下图所示,第一行是人眼感受到的线性亮度变化,第二行是真实的非线性亮度变化。可以得出结论,首尾两端是一致的,但是中间值变化不一致;真实的中间亮度值必须更大,才能得到人眼感知的线性亮度变化。我们的目的是让人眼感受到线性的亮度变化曲线,因此输入亮度必须是第二行这种非线性的亮度变化曲线。第二行的亮度变化曲线,就是伽马校正曲线

  • HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)[通俗易懂]

    HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)[通俗易懂]HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号