赛博地球杯线下赛WEB_RCE Write_up

这次参与赛博地球杯线下赛出题,看到巨佬们强还是强啊,先膜一下,然后献上自己的出题思路,萌新出题,轻喷 !!!

第一步、登录

查看网站发现网站无法登录,并且根据robots.txt能发现hint.php和hack.php

赛博地球杯线下赛WEB_RCE Write_up_第1张图片

不过可以注意到cookie中存在isLogin=0,设置cookie,isLogin=1,发现成功登录

赛博地球杯线下赛WEB_RCE Write_up_第2张图片

第二步、文件包含

成功登录,发现一个管理页面admin/admin.php?file=index&ext=php,推测存在文件包含,可以发现存在过滤,不过可以绕过,访问

admin/admin.php?file=….//….//….//….//….//….//etc/passwd&ext=

可以成功包含文件

赛博地球杯线下赛WEB_RCE Write_up_第3张图片

不过尝试hint.php会发现是文件包含,不能显示源代码,伪协议也无法使用

赛博地球杯线下赛WEB_RCE Write_up_第4张图片

第三步、审计nginx配置

不过可以读取一些配置文件,比如读取nginx配置文件

admin/admin.php?file=….//….//….//….//….//….//etc/nginx/sites-enabled/default&ext=

可以发现配置文件中存在问题

这里写图片描述

存在一个location是/web-img,使用alias指向了/images/,不过location的后面没有/,alias的后面有斜杠,存在隐患

访问/web-img../,发现列出了根目录

赛博地球杯线下赛WEB_RCE Write_up_第5张图片

由于这个location不解析php,

访问/web-img../usr/share/nginx/html/hint.php获得flag的重要信息

赛博地球杯线下赛WEB_RCE Write_up_第6张图片

hint.php中提示我们flag存在于FLAGFLAGFLAGFLAG.pcapng中,我们尝试访问/web-img../usr/share/nginx/html/FLAGFLAGFLAGFLAG.pcapng发现403 forbidden,无法获取FLAGFLAGFLAGFLAG.pcapng。这里我们有两种方式获取FLAGFLAGFLAGFLAG.pcapng。

一种是通过文件包含对FLAGFLAGFLAGFLAG.pcapng源码数据包进行分析:

访问:/admin/admin.php?file=….//FLAGFLAGFLAGFLAG.pcapng&ext=得到数据包源码

赛博地球杯线下赛WEB_RCE Write_up_第7张图片

第二种是利用题目中给的hack.php的webshell进行连接,下载数据包进行查看。这里主要说明第二种方式:

第四步、根据hack.php进行webshell连接RCE

最初robots.txt还提示了我们一个hack.php,我们根据上面数据包分析也可以发现hack.php就是利用weevely生成的webshell,

通过最前的方法,下载hack.php,查看hack.php,我们可以看到webshell加了混淆和替换,将这些混淆替换掉,就可以看到webshell的源码了,

赛博地球杯线下赛WEB_RCE Write_up_第8张图片

赛博地球杯线下赛WEB_RCE Write_up_第9张图片

利用weevely连接webshell,但是我们发现源码中并没有给我们weevely连接的密码,但是源码中有两个变量$kh="42f7"$kf="e9ac"

审计weevely源码,我们会知道weevely生成的webshell进行连接时密码的验证方式是将我们输入的密码进行md5加密然后取md5加密后的字符串后8位,即就是我们源码中的42f7和e9ac

赛博地球杯线下赛WEB_RCE Write_up_第10张图片

所以在我们不知道连接密码的时候,我们可以直接修改weevely源码,强行让他的share_key等于我们的webshell的42f7e9ac然后不论我们输入什么密码都可以直接连接webshell

赛博地球杯线下赛WEB_RCE Write_up_第11张图片

成功RCE

赛博地球杯线下赛WEB_RCE Write_up_第12张图片

第五步、数据包分析

成功连接shell,利用weevely的file_download命令下载FLAGFLAGFLAGFLAG.pcapng数据包。

查看数据包,跟踪tcp流,我们可以看出这是weevely的数据包,题目提示,flag在数据包中,所以我们需要解密这个webshell。

赛博地球杯线下赛WEB_RCE Write_up_第13张图片

第六步、weevely源码分析

从github中下载weevely3并分析weevely3的源码,我们可以知道weevely执行命令操作的加密方式

赛博地球杯线下赛WEB_RCE Write_up_第14张图片

根据这个加密函数,编写自己的解密方法,直接解密得到flag:

赛博地球杯线下赛WEB_RCE Write_up_第15张图片

这里写图片描述

你可能感兴趣的:(CTF)