writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

2019年10月31日,由《中国数字医学》杂志社主办、紫光旗下新华三集团支持的2019“新华三杯”中国医疗机构网络安全攻防演练大赛(复赛),在武汉光谷科技会展中心火热开赛。来自全国30多个省市的150家医疗机构,518人参加了本次复赛,这也是迄今为止中国境内规模最大的医疗行业攻防大赛。

复赛共2小时,分为理论题和CTF题,同时进行,CTF共10到题,并且要在2小时内提交writeup…以下是部分题目的writeup,少了一题web综合题,当时没时间去看,现在也没环境了…

1.签到题

题目中已显示 flag,直接填入正确答案。

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

2.SQL注入

注入点在id

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

直接使用sqlmap跑,可以跑出flag

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

3.图片隐写

Binwalk发现图片里面藏着其他图片

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

无法binwalk直接解压,使用winhex,查找jpeg的文件头,从FFD8开头,截取后面的文件,导出图片,成功发现flag

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

后来听说直接foremost就可以解出来了….果然,好香…

Foremost flag10.jpg

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

4. 音频隐写

使用音频软件打开,调出频谱图

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

发现压缩包密码,打开压缩包,获取到part1 flag

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

使用winhex打开图片,发现flag2

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

成功获取整个flag

flag{1a6b4d4e0c36581e8256a1a58402bdb4b7cc41bd}

5. 本地文件包含

通过目录扫描,发现phpinfo页面,发现

allow_url_fopen on

allow_url_include off

直接包含flag.php发现直接运行了脚本,没有flag,猜测flag藏在注释中,需要读取到php源码才可以,所以只能使用伪协议命令,输出 flag.php 的 base64 编码

?page=php://filter/convert.base64-encode/resource=flag.php

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

Base64解码发现flag藏在注释中

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

6. 数据包分析1

过滤http数据,直接发现flag

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

7. 数据包分析2

下载文件回来,发现一个压缩文档,需要密码,不是伪加密,另外有个pcap流量文件,打开发现是usb流量,USB协议数据部分在Leftover Capture Data域中,键盘数据包的数据长度为八个字节。其中键盘击键信息集中在第三个字节中。数据如下图所示:。

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

具体的键位映射关系可参考:《USB键盘协议中键码》中的HID Usage ID,链接:https://www.shsu.edu/csc_tjm/fall2000/cs272/scan_codes.html

所以压缩文档的密码在这个流量包的usb键盘流量中

  1. 使用kali linux中的tshark 命令把cap data提取出来:

tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt

  1. 根据《USB键盘协议中键码》中的HID Usage ID将数据还原成键位,github上有脚本,但不知道为什么,一直没跑出来….

https://github.com/WangYihang/UsbKeyboardDataHacker

https://ctf-wiki.github.io/ctf-wiki/misc/traffic/protocols/USB-zh/

跑出来也密码不正确

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

8.EasyCrypto

源码

c3ludHtlYmd1dmVncnJhbmFxb25mcmZ2a2dsZnJpcmF9

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

经过Base64解码后如下:

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

synt{ebguvegrranaqonfrfvkglfrira}

发现是flag格式,说明字母进行了转换,与flag{xxx}对比,发现是字母assic码往后减13,直接转了下,发现存在特殊字符,提交flag提示错误,猜想如果减完后的值小于a的assic码97,则要加上26,使其还原成字母范围,在上面字符串去掉{}后转为assic码,写了个python脚本,成功跑出flag(因为现场没有网络,忘记python中string和assic码如何转换了,所以手工使用工具进行转换然后再python脚本简单的加减和判断)。

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

现在查了下,发现很简单,number = ord(char),char = chr(number),最后的脚本如下

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

前后添加{}就是最终的flag

Flag{rothirteenandbasesixtyseven}

后来听说是rot13加密方式,直接使用工具就可以解开了……..

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

9. Easy RSA

当时不懂RSA并且没有网络无法安装相应的Crypto库,运行不了脚本,所以没有做

打开压缩包,发现存在3个文件,通过看py脚本,发现cipher.txt是flag加密后的密文,pubkey.txt是RSA参数中的e和N

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

所以情况很明了,分解N,算出p和q,然后计算d,就可以解析出明文了(当然也可以直接运行脚本,穷举p和q,然后判断是否得出的N等于原始给的N,这样也可以获取P和Q)

但是发现N特别的大,

如果n小于256bit,可以使用本地工具进行暴力分解,例如windwods平台的RSATool,可以在数分钟之内完成256bit的n的分解。

如果n大于768bit,可以尝试利用在线网站http://factordb.com, 这一类在线网站的原理是储存了部分n分解成功的的值。

这里的N有617位,又没有网络,所以最终比赛结束,都没有人算出来…..

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

E=65537

N=33774167600199691072470424898842928168570559940362770786060699320989546851695106466924163816843729828399984649770900793014896037884774039660562546937090412844276185560384964983508291174867808082182386566813393157054259464108858158903739578119760394228341564696225513954400995543629624209942565369972555679980359992955514826589781286738100616149226885302403505062415492679633217275379153421830105021673417544608398249866398042786421630495968810854036782025120509999022773806069591080190166920079688217334968528641747739241234353918892029263544388161160427668518991666960251381106788899451912317001247537576428186291689

P=177993461816075408240866752227210319316825574291000376727523991315086097605063837563342286560819823849610146713383370383386260295565108973920944593141677024612114517119831676665456754235233172344362610684938542774386956894066675103840244633202469661725050948177995671009070311486253646420435061175078660441183

Q=189749484366449861630736482622030204229600074936733397229668738586605895979811823994029500725448581332746860468289540041125768726148614579255062994177531727784605194094836998282676712435286273497842956368997116036170165393912022560935791934662695453870846024312915604049805219410140420469163797779129644454583

使用RSATool,得到D

D=11264411788839355592444856301614488363956471904061056255881635805090094375457400203763192894221130759558216953395674955120307575813439598378024263407707436165069943146297428393266768825247731038349979486052262807679509336199267919454932934045527300563698215071335234814155316242621058729891886931914187742084664702392602429806835617468209844338711315548455315452692700616464465563108767921693721150452939650725153874644898636543732854250641129411206109642819488878782249575130672657182665780011560050159281212359222980210472602178746411982328739935093883590670811966243661382699777078747677158108250557964576989602089

理论上应该是这样就能够接触来了,可是不知道为什么不对……

writeup 2019“新华三杯”中国医疗机构网络安全攻防演练大赛CTF(复赛)

附件:

本次比赛能下载的题目,已上传百度云

链接:https://pan.baidu.com/s/14SR1m-vKEUaO_cMDjnQsUw

提取码:9fbv