HCTF 2015 WriteUp-安全盒子

Server is done

  发现,返回的Message和注释掉的加密过的flag,每次都会变化。再然后发现Message长度和我们post过去的arg参数一样长。猜是流密码,然后post一个老长的arg,用返回的Message与arg异或得到本次加密的密码。再用这个密码异或后面的flag就好了。
HCTF 2015 WriteUp-安全盒子
flag:hctf{D0YOuKnovvhOw7oFxxkRCA?iGuE55UCan...Ah}

COMA WHITE

把js拖出来看算法和判定。知道有md5和base64,再用alert打印来本地调试,可以得到一些信息,比如输入的flag的长度应该为32,比如32为被split了,有些2位有些1位,再比如,算法把这些分开的部分全部base64了一次,再比如,base64之后再做了一次MD5。
最后,把上面的得到的每个部分的md5连起来与js中的:

作对比,如果对了,你输入的就是flag。
所以,我们把它逆过来就是,先分片为32字节的md5,然后再去cmd5解密(因为很短,所以都能接),接完后得到base64,再b64decode,而后连接起来。就得到了flag。

真的很友善的逆向题(福利)

额,本来想一两句话说完的,想想,还是好好写吧。打开没加壳,也能直接ida看到关键算法,不过调试会有些奇怪的问题。   恩,运行起来会发现,点不到check按钮,然后就去od对MoveWindow下断,当鼠标移动过去的时候,就断下来了,然后返回到用户空间,得到用户空间地址004018D8。   HCTF 2015 WriteUp-安全盒子
在IDA里跟随到这个地址,然后找跳转的地方,可以知道是不满足:

才跳转的,随意,自然的把00401859处的ja改成jmp,就把按键固定了下来。

本想直接用winhex改下exe,就不用每次调试都改一次,可发现,winhex改完后的确能停下来,但getwindowtexta会出问题,具体,没时间分析。   接着看算法吧,先判断长度是否为22,再有个check1:   做的事情主要是,用程序中写死的316754分别减去用户输入的前五个字符和最后一个字符。结果需要为:

其实猜都能猜到这个是HCTF{},所以还剩中间16位。   再看check2,这里是处理剩下的16位中的前12位,有个算法在里面,静态看似乎比较复杂,直接动态调试,输入ABCDEFabcdef得到结果为:

所以可以知道,大概操作是从字母表中找你输入的字符对应的偏移位置。这里就可以弄个对照表出来了。

完了后再进行置换操作:

得到的结果,再与程序中写好的:

进行一一对比,所以,解密脚本为:

对,还没完,还有四位:

这个地方用od动态调的话,就是个坑,然而,静态吧:

就是,用0x02去异或程序中写死的一段数据Ea57,所以,结合起来的解密脚本是:

flag is: HCTF{UareS0cLeVerGc75}

欧洲人的游戏(你是欧洲人吗?)

被无脑的16位程序折腾了半天后,看到32位还是挺亲切的,而且,代码看起来也挺亲切:

从sub_401190如下:

首先长度要为20字节,而后一个简单的异或与写死的data比较。所以,后十位是:

然而,剩下一个,两个表,各种查表异或,最后比较的,发现,推不回去,就只能爆破了,给力安卓牛写的爆破代码(取关键部分,两个table太长了):

最后得到的奇数和偶数组数挺多,也就是有多解,问了主办方,对方表示~以为多解的几率不大~对,以为。然后就组出flag了,

猜flag是:hctf{c1c 1s v3ry g0Od1367}    ###BrainFuck   想对出题人说的话(见题目描述)。   好吧,正经点,ida看了看,意思是,根据你输入的:   ',[]-+><   这些里面的一些符号,找到对应的代码:

组合起来,在编译成另外一个elf,完了再执行它,意思就是,我给你的主程序没问题,你自己用上面的代码,写个程序,完了再溢出它,对,编译也是在远端。很多不可控需要探测的因素。   文件头给出了:

最开始考虑的是,能否构造leak,因为只有leak出了栈上面的信息才能慢慢摸索服务端的不可控因素。这时候,安卓牛就开始画栈结构了~   开辟的256字节空间的code是在栈上的,ptr是放在code下面的,里面存的是code的地址。   HCTF 2015 WriteUp-安全盒子  那我怎么才能leak出栈上面的信息呢?

一直这样下去似乎可行,而且,读到256字节需要传入512行代码,而可传入的代码顶多255行。用个while也不行,因为,不可控制退出,那leak到的东西也用不上。   于是,机智的写了下面的代码:

可以实现用\x00退出循环,并且控制ptr的值。ptr上有用的信息都是在code区间之后,那leak的信息也应该先写满code,再读取堆栈。于是,上面的代码再加上几句:

就能得到信息了,而且,你会发现整个程序都只有一个main函数,那再进main函数的时候,肯定会往栈上放一个ret地址,我们找到ret地址,然后用getchar()可以控制eip。于是,关键就是怎么获取到system地址,怎么获取到libc地址。   在调试的时候,发现,main的返回地址是__libc_start_main里的,意味着,其实程序是ret到libc上的,那拿到这个地址就可以算出system()地址,/bin/sh地址了。然后找个rop链,让rdi指向/bin/sh(tm好久没玩pwn,给记成x86的压栈传参了,然后坑了好久~),就可以getshell了。   exp如下

还有个坑就是,你敲得回车键会算一个字符压栈~   HCTF 2015 WriteUp-安全盒子

Andy

jeb 查看apk, 找到最终比较的key:SRlhb700YZHKvlTrNrt008F=DX3cdD3txmg。

找到核心函数Andy

首先,编写Classical.make逆方法。

由于Array1和Array2存在重复字串,故需要对逆算之后得到的值进行修正,得到: OHMxdWloZDBpMnczcmluYXk2bjhkbmE=

接着,base64解码数据。8s1udhd0i2w3rdnay6n8dna

最后,将字符串逆序,得到:and8n6yandr3w2i0dhdu1s8。flag即:hctf{and8n6yandr3w2i0d}

injection

http://120.26.93.115:24317/0311d4a262979e312e1d4d2556581509/index.php hint: user=user1 Xpath注入

学习链接 http://www.w3school.com.cn/xpath 猜测查询语句为/*[1]/user[user=’user1’] //* 选取文档中的所有元素。 | 计算两个节点集 //book | //cd 返回所有拥有 book 和 cd 元素的节点集 根据链接可以拼凑一个语句来查询所有元素 payloadhttp://120.26.93.115:24317/0311d4a262979e312e1d4d2556581509/index.php?user=user1%27]|//*|ss[%27 flag hctf{Dd0g_fac3_t0_k3yboard233}

Personal blog

访问了http://404.hack123.pw 发现是静态BlogHCTF 2015 WriteUp-安全盒子看到了澳大利亚的国旗。。 想到了这是不是gitpage搭建的Blog(自己blog也是搭在gitpage上。。) 访问了404.hack123.pw/CNAME 验证了想法 直接去github搜404.hack123.pw 在gitpage项目里有个here is f10g.html base64decode一下 getflag

hctf{H3xo_B1og_Is_Niu8i_B1og}

Fuck ===

php md5函数只对字符串进行加密 如果传入数组的话 返回NULL

payloadhttp://120.26.93.115:18476/eff52083c4d43ad45cc8d6cd17ba13a1/index.php?a[]=123&b[]=33 Flag: hctf{dd0g_fjdks4r3wrkq7jl}

404

访问 http://120.26.93.115:12340/3d9d48dc016f0417558ff26d82ec13cc/webI.php 看一下http herader就发现flag了

hctf{w3lcome_t0_hc7f_f4f4f4}

Hack my net

http://120.26.224.102:25045/ea57f09ea421245047b86eaba834fae1/?u=http://nohackair.net:80/usr/themes/trapecho/css/bootstrap-responsive.min.css

看u可以发送 简单测试了一下命令执行和任意文件读取发现行不通 觉得是SSRF 利用 http://120.26.224.102:25045/ea57f09ea421245047b86eaba834fae1/?u=http://nohackair.net:80@youip/1.css 可以成功访问
但是请求自己本地用SimpleHTTPServer搭建的web服务器下的1.css还是提示501 自己本地curl了两个文件差别 发现Content-Type不同 所以猜测探测的是Content-Type 而在请求的时候HTTP头有个提示Config http://localareanet/all.conf 而之前测试发现服务器也支持跳转 本地写了个php 成功geflag

description:hctf{302_IS_GOOD_TO_SSRF}

Easy Xss

简单测试了一下 发现debug处没有过滤 http://120.26.224.102:54250/0e7d4f3f7e0b6c0f4f6d1cd424732ec5/?errmsg=a&t=2&debug=%27;alert%281%29//

有长度限制 去掉了’;还可以输入10个字符 而errormsg变量是可控的 所以打算通过异常来输出errormsg 所以通过定义$变量来让try里面语句出错 从而执行document.write(errormsg); errormsg过滤了一些字符 但是问题不大可以通过一些常见方式来绕过 比如unescape

payload

flag:JAVASCRIPT_DRIVES_ME_CREAZY_BUT_YOU_GOODJB

confuse question

login.txt

parse_str可以进行一次urldecode 而浏览器也能进行一次urldecode 传入%2561%2564%256d%2569%256e 经过parse_str处理就能让绕过替换达成$n=admin的条件 脚本进行了全局的过滤 但是$username取了$v[‘username’] 如果我们传入的$v是个字符串不是数组 那么$v[‘username’]=$v[0]取第一个字符(php真6:)) 那么全局过滤 单引号变成了'取第一个字符\就能闭合username后面的引号 注入get!

payload :HCTF 2015 WriteUp-安全盒子

MC服务器租售中心-1

mc.hack123.pw

查看源代码获取了几个网址

http://kirie.hack123.pw/page/13/ 有个文章需要密码访问 密码123456

http://kirie.hack123.pw/archives/4/ 一张动车票HCTF 2015 WriteUp-安全盒子帐号kirie 密码19940518登录管理地址

登录成功后有一个手机验证的界面HCTF 2015 WriteUp-安全盒子debug信息泄漏短信验证码 登录后提示

查看cookie ht固定不变

解不出来 猜测bit fip 写了个脚本跑了一下 测试到第5个成功了

HCTF 2015 WriteUp-安全盒子

What Is This

http://120.26.60.159/WhatIsThis/what-is-this.1d9bb46782a411bdb72ac82590539826 下载下来用模拟器打开。。 是赤色要塞 而且无限条命 大家拼命一直冲就行了。。 通关记得最大化截屏。。HCTF 2015 WriteUp-安全盒子虽然被飞机遮住了 但是看到FUCK*OU 很容易想到FUCKYOU… flagILOVENESFUCKYOUHCGORSA

送分要不要?(萌新点我)

http://120.26.60.159/Andy/Andy.apk.f1bc4dcb815253922a6746316890c05e 用hex编辑器直接打开压缩包。。 在图片开头处有一串奇怪字符串。。HCTF 2015 WriteUp-安全盒子base64+base32+hex..HCTF 2015 WriteUp-安全盒子Flag hctf{nn1sc_ls_s0_34sy!}

RedefCalc(PPC)

nc 120.55.113.21 4799

开始给了四位数的两组样本:

38+11+4 15+38-7

由开始提示的一组三位样本,首先想到的是运算符的优先级。分别将+,-,*的优先级分开,优先级如下:

但是这样算出的数据只有15+38-7符合,而38+11+4经过了一番挣扎。想到把每个运算符都考虑成单独的,分别做先后运算,如下:

通过以后验算给的六位样本

6[2,5,10,9,3,34]++- 得到159001通过。

代码如下

ppc.cpp

HCTF 2015 WriteUp-安全盒子

flag hctf{672cb40bfc5df1527f3a5ea5d1b3e348}