[MMA CTF 2nd 2016] Make a Palindrome 50

Category: PPC Point: 50 Solver: 0Alien0 @ BambooFox

Make a Palindrome

這題分兩個階段

只要答對第一題就可以拿到第一階段的 flag

答對剩下的題目則可以拿到第二階段的 flag

題目是他給你好幾個單字要你拼成回文字

b bba ab cc -> ab b cc bba 也就是 abbccbba

我想說先用暴力解解看(畢竟這只是 warm up 題)

然後就過了O_O(發現最大也才 10 個字 3628800 種可能而已 一塊蛋糕)

使用工具 :

pwn -> 連線

itertools -> 產生所有可能

解題流程 :

產生所有可能的字串 -> 檢查是不是回文 -> 答案

from pwn import *
from itertools import *
def isPalindrome(s):
    for i in range(len(s)/2):
        if s[i] != s[len(s)-1-i]:
            return False
    return True

ip = "ppc1.chal.ctf.westerns.tokyo"
port = 31111

s = remote(ip,port)
print s.recv()
print "================"
for i in range(30):
    inp = ""
    while True:
        inp = s.recv()
        if inp.find("Input:") != -1:
            break
    print inp
    inp = inp[inp.find("Input:")+7:inp.find("Answer")].strip()
    L = inp.split()
    num = int(L[0])
    L.remove(L[0])
    #print num,L
    for j in permutations(L,num):
        if isPalindrome("".join(j)):
            s.sendline(" ".join(j))
            #print " ".join(j)
            break

s.interactive()