首页 > 代码库 > 人生第一场CTF的解题报告(部分)

人生第一场CTF的解题报告(部分)

解题报告 濮元杰部分:

王者归来: 120

场景

小王入职了一段时间,最近有点无聊。Web安全项目不多,白天看着其他项目组的同事忙得热火朝天,小王有点坐不住了,这也许是新人都会有的想法,乐于助人。想到这,小王一眼看到了隔壁的小丽,哎,IT界小丽绝对算得上是一位美女啦,于是小王凑了过去对小丽说:小丽,看你眉头紧锁的,需要本大侠帮忙吗?小丽转头看着小王,愣了足足有10秒,突然说:那,那好吧,如果你帮我搞定这三个问题,嗯~我请你吃晚饭,就我们两个。天哪,这,这,小王已经按耐不住突如其来的喜悦,战斗力倍增,大喝一声:好,来吧! (为了得到美女垂青,小王决定放手一搏)

描述

题干:小丽被分派去破解一份被加密的数据库登录配置文件,小丽通过N次测试后发现,原来TEST 用户的密码竟然是TEST123123,但这个数据库帐号能用的功能太少了,而小丽的组长却要求她分析出SA的密码。于是小丽把这个任务作为第二个难题抛给了小王。事实上,这件事对于小王来说也不算难,小王沉下心来努力还原算法,最终得到了 sa的密码(flag)。
DatabaseName="TEST" user="TEST"password="00560041005b00440011007200b3013100300037"
DatabaseName="GCOA" user="sa"password="0071007e007f006a004b002a00e70163006d0065002900500003"

 

解题:一开始关注到了后面的数字都比前面的大,并且是四个四个一组的,上了个厕所后脑洞大开,TEST123123--------ascii----》84 69 83 84 49 50 51 49 50 51------binary---à 1010100 1000101 1010011 1010100 110001 110010 110011 110001 110010110011 

 

0056 0041 005b0044 0011 0072 00b3 0131 0030 0037------binary------à1010110 1000001 1011011 1000100 10001 1110010 10110011 100110001110000 110111

 

将两个二进制放在一起并且添加前导0对比:

1010100 10001011010011 1010100 110001 110010 110011 110001 110010 110011 

1010110 10000011011011 1000100 10001 1110010 10110011 100110001 110000 110111

发现上下两个串便是XOR 10 100 1000 10000 100000…10 100 1000….找到规律后迅速解决了这题

 

1110001 11111101111111 1101010 1001011 101010 11100111 101100011 1101101 1100101 1010011010000 11  --》

1110011 11110101110111 1111010 1101011 1101010 1100111 1100011 1101111 1100001 100001 1000000100011

 

Answer:szwzkjgcoa!@#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

抽丝剥茧: 140

场景

这是一次高手间的较量。就在5分钟前,吴总把小王叫到办公室,神秘的对他说:小王,你在公司表现一直不错,我关注你已经很久了。现在,公司里可能出现了商业间谍,我们初步怀疑是小丁,但没有证据。这件事我决定交给你去处理,但是你要绝对保密。小王寻思:小丁也是一名出色的信息安全工程师,想要从他留下的蛛丝马迹中找出线索,完成吴总交代的任务,着实是一件头痛的事情。

描述

题干:据相关情报得知,小丁一直在公司中访问一个网址的文件服务器,并上传了一些数据,这里很可能都是公司的机密数据,但是这台服务器安全性很好,暂时无法突破,所以我们需要调查小丁使用的密码,这个密码我们一直怀疑跟小丁计算机上的一个压缩文件有关,至于存在什么关系,我们目前还不得而知。(提示:找到最后指向那个文件中隐藏的flag)
地址:http://range.jsxajs.cn:8080/file/one/index.docx

解题报告:这题困了我们大概一天的时间吧,第一天把文件改成rar,发现能打开,无果,寻病终。第二天终于找对了方向,先是在文件中想搜一下flag关键字,谁知搜着搜着搜到了一个白色的http开头的字符,将其变成红色后发现:Next Documenthttp://range.jsxajs.cn:8080/file/one/ e9d520bb983c5ed0.docx

下载之,发现里面有隐藏字符(能那么快发现是因为我的word默认开启了查看隐藏字符233333),直接下载发现一幅图片:b2e514b8576fab1a.jpg

Winhex打开之发现里面藏着另一个图片的地址,再去下载发现1306f3da181885e4.jpg

仍是winhex打开,末尾发现PK文件头,应该是主办方要我们用.rar打开它,但文件应该没有压缩,因此直接往下翻一下就看到了答案:address.txt 鹁?答案字符串 1002F07D8F0088

 

 

 

 

 

 

兵不厌诈: 120

场景

两个星期后,小王顺利入职了公司,首先是为期三个月的实习期。小王与同事A、B、C一同入职,相互比较熟悉。同事A擅长加密与解密,同事B擅长逆向反汇编,同事C主要研究的是移动终端安全,小王自己擅长渗透测试。经公司领导讨论后,决定将小王与A、B、C组成一个团队。于是,小王的实习期开始了。 (声明:web类题目使用扫描工具无效,如因扫描堵塞自己学校的网络出口,后果自负)

描述

题干:揭晓入侵者如何进入后台后,开始对前端1元订单的事件进行处理。下面地址是一个购买页面,队员需要改变商品价格(1元)然后提交订单,获取flag。(提示:key的提交形式为flag:{xxxx})
地址:http://218.2.197.250/Ticket/index.html

 

题目大意:一开始我用fiddle抓包,但是什么包都没有抓到,再看form的action发现属性 是传到本地的,但搜索了tryagain关键字,都没有,于是很好奇tryagain到底是从哪里来的。

CSS不能弹窗,思来想去只能是js的问题,翻到bootstrap.min.js,硬着头皮看了下它的代码,用subline整理以及高亮了它的代码后,我这个强迫症终于能看它的代码了,上下翻了一下,唯一值得注意的表示一个eval函数,上下翻了下,发现alert,try,again ,flag等关键字都在里面,心情顿时好了好多

把文件头eval(function(p,a,c,k,e,r)搜索了一下 发现这个http://www.jb51.net/article/9705.htm

于是本地构造了这个HTML ,把eval函数整个放进去,解密出来看到还是加密了的内容,再次解密一下,发现了当值大于100 alert(“tryagain”),否则alert flag:{a10V101IGlzIGY101MTIzayEyWyky}

本来还以为要把里面这串再decode,后来发现想多了,直接把这个输进去即是答案,好开心

 

 

 

 

庐山真面: 120

场景

小王工作了一段时日,已经对现有的工作驾轻就熟了,他一直希望不断丰富自己的经验技能。正好公司即将举行底层安全工程师的竞岗考试,对于小王来说,这无疑是一个巨大的挑战。本次考试的考官是公司里出了名的“黑面罗刹”李经理——公司里做逆向分析技术的泰斗。据同事说,此次竞岗考试都是基础题目,只考核是否具备基本的逆向知识,小王略松了一口气,走进了考场。

描述

题干:李经理分发给参加每一个竞岗考试的员工一个被加密的html,李经理要求大家分析这个文档并给出第一轮考试的明文通关flag。
hash="118,97,114,32,74,61,102,117,110,99,116,105,111,110,40,109,41,123,114,101,116,117,114,110,32,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,109,94,50,41,125,59,101,118,97,108,40,74,40,49,48,54,41,43,74,40,57,57,41,43,74,40,49,49,51,41,43,74,40,49,48,54,41,43,74,40,51,52,41,43,74,40,54,51,41,43,74,40,51,52,41,43,74,40,51,55,41,43,74,40,56,51,41,43,74,40,49,49,48,41,43,74,40,49,49,52,41,43,74,40,49,48,57,41,43,74,40,55,55,41,43,74,40,56,54,41,43,74,40,54,56,41,43,74,40,54,52,41,43,74,40,56,53,41,43,74,40,56,49,41,43,74,40,56,56,41,43,74,40,56,54,41,43,74,40,56,53,41,43,74,40,57,49,41,43,74,40,49,49,53,41,43,74,40,53,53,41,43,74,40,49,48,49,41,43,74,40,49,49,57,41,43,74,40,49,48,49,41,43,74,40,54,55,41,43,74,40,54,55,41,43,74,40,54,55,41,43,74,40,57,57,41,43,74,40,55,50,41,43,74,40,49,48,49,41,43,74,40,55,52,41,43,74,40,56,51,41,43,74,40,56,51,41,43,74,40,55,55,41,43,74,40,53,50,41,43,74,40,49,49,55,41,43,74,40,56,51,41,43,74,40,54,55,41,43,74,40,54,53,41,43,74,40,54,55,41,43,74,40,54,55,41,43,74,40,55,57,41,43,74,40,56,55,41,43,74,40,49,49,55,41,43,74,40,54,55,41,43,74,40,54,55,41,43,74,40,56,51,41,43,74,40,55,49,41,43,74,40,49,50,51,41,43,74,40,55,54,41,43,74,40,55,57,41,43,74,40,57,57,41,43,74,40,55,51,41,43,74,40,49,49,48,41,43,74,40,55,54,41,43,74,40,56,51,41,43,74,40,55,52,41,43,74,40,56,50,41,43,74,40,56,54,41,43,74,40,56,50,41,43,74,40,49,50,51,41,43,74,40,55,48,41,43,74,40,57,49,41,43,74,40,56,53,41,43,74,40,54,52,41,43,74,40,55,54,41,43,74,40,54,56,41,43,74,40,52,57,41,43,74,40,55,50,41,43,74,40,54,56,41,43,74,40,55,55,41,43,74,40,54,56,41,43,74,40,54,53,41,43,74,40,56,51,41,43,74,40,49,48,55,41,43,74,40,49,49,50,41,43,74,40,49,49,49,41,43,74,40,54,53,41,43,74,40,53,50,41,43,74,40,54,55,41,43,74,40,54,51,41,43,74,40,51,55,41,43,39,39,41,59,10"

解题报告:一看这题眼都花了,密集恐惧症伤不起TUT仔细看下数字范围确定是ASCII值,虽然比较水,但好歹是密码吧混了3年,CCBC出题及参赛都经历过的,岂能败在编码题上!把ascii跑出来后发现是varJ=function(m){return String.fromCharCode(m^2)};eval(J(106)+J(99)+J(113)+J(106)+J(34)+J(63)+J(34)+J(37)+J(83)+J(110)+J(114)+J(109)+J(77)+J(86)+J(68)+J(64)+J(85)+J(81)+J(88)+J(86)+J(85)+J(91)+J(115)+J(55)+J(101)+J(119)+J(101)+J(67)+J(67)+J(67)+J(99)+J(72)+J(101)+J(74)+J(83)+J(83)+J(77)+J(52)+J(117)+J(83)+J(67)+J(65)+J(67)+J(67)+J(79)+J(87)+J(117)+J(67)+J(67)+J(83)+J(71)+J(123)+J(76)+J(79)+J(99)+J(73)+J(110)+J(76)+J(83)+J(74)+J(82)+J(86)+J(82)+J(123)+J(70)+J(91)+J(85)+J(64)+J(76)+J(68)+J(49)+J(72)+J(68)+J(77)+J(68)+J(65)+J(83)+J(107)+J(112)+J(111)+J(65)+J(52)+J(67)+J(63)+J(37)+‘‘);

可对JAVASCRIPT不熟,如果没有函数可以直接浏览器url里写个javascript:跑出来,可这里有函数,仔细看J函数的功能是将所有数字异或2,于是弱弱的写了个C++(ACMer表示2分钟写不出这程序直接退役的了)

#include<cstdio>

#define maxn2001

using namespacestd;

int ch[maxn]={0,106,99,113,106,34,63,34,37,83,110,114,109,77,86,68,64,85,81,88,86,85,91,115,55,101,119,101,67,67,67,99,72,101,74,83,83,77,52,117,83,67,65,67,67,79,87,117,67,67,83,71,123,76,79,99,73,110,76,83,74,82,86,82,123,70,91,85,64,76,68,49,72,68,77,68,65,83,107,112,111,65,52,67,63,37};

int main()

{

    for(inti=1;ch[i];i++)printf("%c",(char)(ch[i]^2));

    return 0;

}

跑出来结果是:

hash=‘QlpoOTFBWSZTWYq5gugAAAaJgHQQO6wQACAAMUwAAQEyNMaKlNQHPTPyDYWBNF3JFOFCQirmC6A=‘

唔,最后的等号明显提示是base64,但直接解得到的是乱码,百度一下头部‘QlpoOTFBWSZTW发现是BZ2压缩

 

 

 

人生第一场CTF的解题报告(部分)