2019年10月31日,由《中国数字医学》杂志社主办、紫光旗下新华三集团支持的2019“新华三杯”中国医疗机构网络安全攻防演练大赛(复赛),在武汉光谷科技会展中心火热开赛。来自全国30多个省市的150家医疗机构,518人参加了本次复赛,这也是迄今为止中国境内规模最大的医疗行业攻防大赛。
复赛共2小时,分为理论题和CTF题,同时进行,CTF共10到题,并且要在2小时内提交writeup…以下是部分题目的writeup,少了一题web综合题,当时没时间去看,现在也没环境了…
题目中已显示 flag,直接填入正确答案。
注入点在id
直接使用sqlmap跑,可以跑出flag
Binwalk发现图片里面藏着其他图片
无法binwalk直接解压,使用winhex,查找jpeg的文件头,从FFD8开头,截取后面的文件,导出图片,成功发现flag
后来听说直接foremost就可以解出来了….果然,好香…
Foremost flag10.jpg
使用音频软件打开,调出频谱图
发现压缩包密码,打开压缩包,获取到part1 flag
使用winhex打开图片,发现flag2
成功获取整个flag
flag{1a6b4d4e0c36581e8256a1a58402bdb4b7cc41bd}
通过目录扫描,发现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
Base64解码发现flag藏在注释中
过滤http数据,直接发现flag
下载文件回来,发现一个压缩文档,需要密码,不是伪加密,另外有个pcap流量文件,打开发现是usb流量,USB协议数据部分在Leftover Capture Data域中,键盘数据包的数据长度为八个字节。其中键盘击键信息集中在第三个字节中。数据如下图所示:。
具体的键位映射关系可参考:《USB键盘协议中键码》中的HID Usage ID,链接:https://www.shsu.edu/csc_tjm/fall2000/cs272/scan_codes.html
所以压缩文档的密码在这个流量包的usb键盘流量中
tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt
https://github.com/WangYihang/UsbKeyboardDataHacker
https://ctf-wiki.github.io/ctf-wiki/misc/traffic/protocols/USB-zh/
跑出来也密码不正确
源码
c3ludHtlYmd1dmVncnJhbmFxb25mcmZ2a2dsZnJpcmF9
经过Base64解码后如下:
synt{ebguvegrranaqonfrfvkglfrira}
发现是flag格式,说明字母进行了转换,与flag{xxx}对比,发现是字母assic码往后减13,直接转了下,发现存在特殊字符,提交flag提示错误,猜想如果减完后的值小于a的assic码97,则要加上26,使其还原成字母范围,在上面字符串去掉{}后转为assic码,写了个python脚本,成功跑出flag(因为现场没有网络,忘记python中string和assic码如何转换了,所以手工使用工具进行转换然后再python脚本简单的加减和判断)。
现在查了下,发现很简单,number = ord(char),char = chr(number),最后的脚本如下
前后添加{}就是最终的flag
Flag{rothirteenandbasesixtyseven}
后来听说是rot13加密方式,直接使用工具就可以解开了……..
当时不懂RSA并且没有网络无法安装相应的Crypto库,运行不了脚本,所以没有做
打开压缩包,发现存在3个文件,通过看py脚本,发现cipher.txt是flag加密后的密文,pubkey.txt是RSA参数中的e和N
所以情况很明了,分解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位,又没有网络,所以最终比赛结束,都没有人算出来…..
E=65537
N=33774167600199691072470424898842928168570559940362770786060699320989546851695106466924163816843729828399984649770900793014896037884774039660562546937090412844276185560384964983508291174867808082182386566813393157054259464108858158903739578119760394228341564696225513954400995543629624209942565369972555679980359992955514826589781286738100616149226885302403505062415492679633217275379153421830105021673417544608398249866398042786421630495968810854036782025120509999022773806069591080190166920079688217334968528641747739241234353918892029263544388161160427668518991666960251381106788899451912317001247537576428186291689
P=177993461816075408240866752227210319316825574291000376727523991315086097605063837563342286560819823849610146713383370383386260295565108973920944593141677024612114517119831676665456754235233172344362610684938542774386956894066675103840244633202469661725050948177995671009070311486253646420435061175078660441183
Q=189749484366449861630736482622030204229600074936733397229668738586605895979811823994029500725448581332746860468289540041125768726148614579255062994177531727784605194094836998282676712435286273497842956368997116036170165393912022560935791934662695453870846024312915604049805219410140420469163797779129644454583
使用RSATool,得到D
D=11264411788839355592444856301614488363956471904061056255881635805090094375457400203763192894221130759558216953395674955120307575813439598378024263407707436165069943146297428393266768825247731038349979486052262807679509336199267919454932934045527300563698215071335234814155316242621058729891886931914187742084664702392602429806835617468209844338711315548455315452692700616464465563108767921693721150452939650725153874644898636543732854250641129411206109642819488878782249575130672657182665780011560050159281212359222980210472602178746411982328739935093883590670811966243661382699777078747677158108250557964576989602089
理论上应该是这样就能够接触来了,可是不知道为什么不对……
附件:
本次比赛能下载的题目,已上传百度云
链接:https://pan.baidu.com/s/14SR1m-vKEUaO_cMDjnQsUw
提取码:9fbv