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。

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

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

(0)
上一篇 2026年2月20日 下午4:15
下一篇 2026年2月20日 下午4:43


相关推荐

  • 全站多语言前后端熟练使用国内外几十种AI欢迎抄作业

    全站多语言前后端熟练使用国内外几十种AI欢迎抄作业

    2026年3月12日
    3
  • 树莓派部署 OpenClaw完整清晰步骤整理

    树莓派部署 OpenClaw完整清晰步骤整理

    2026年3月13日
    3
  • map的containsKey方法

    map的containsKey方法map是一个key和value的键值对集合。map中的containKey(key)方法是判断该key在map中是否有key存在。如果存在则返回true,反之,返回false。程序实例:判断数组中是否有1,有的话就返回1和1所在的位置。我采用的是hashmap,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),时间消耗是很少的。packageTT04;importjava.util.Has…

    2022年6月23日
    110
  • stat函数使用

    stat函数使用要点 通过 stat 函数获取文件属性代码示例 运行结果 a outa outatime mtime ctime a outxyz outErroroccu

    2025年7月31日
    6
  • java实现生成pdf_详解Java生成PDF文档方法

    java实现生成pdf_详解Java生成PDF文档方法最近项目需要实现 PDF 下载的功能 由于没有这方面的经验 从网上花了很长时间才找到相关的资料 整理之后 发现有如下几个框架可以实现这个功能 1 开源框架支持 iText 生成 PDF 文档 还支持将 XML Html 文件转化为 PDF 文件 ApachePDFBox 生成 合并 PDF 文档 docx4j 生成 docx pptx xlsx 文档 支持转换为 PDF 格式 比较 iText 开源协议为 AGPL 而其他两个

    2026年3月16日
    2
  • 简述TCP四次挥手

    简述TCP四次挥手四次握手主要用到了两个标志位(ACK&FIN):ACK示意参考:TCP三次握手FIN:终止数据传输标志位—->当FIN为1的时候代表此数据为终止断开连接的请求四次挥手流程:由于TCP连接是双向传输的对等的模式即双工wiki百科定义:全双工(full-duplex)的系统允许二台设备间同时进行双向资料传输。全双工的系统可以用复线铁路类比。两个方向的车辆因使用不同的轨道,因此不会互相影响。一般的电话、手机就是全双工的系统,因为在讲话时同时也可以听到对方的声音意思是说

    2022年5月29日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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