<?  

if(isset($_GET['text'])) 
{ 
    $text = $_GET['text']; 
     

    $key = '??????????????????????????????????'; 
    //:p ?????????????????????? 

    $_key; 
    $_tob64 = array( 
        "A", 
        "B", 
        "C", 
        "D", 
        "E", 
        "F", 
        "G", 
        "H", 
        "I", 
        "J", 
        "K", 
        "L", 
        "M", 
        "N", 
        "O", 
        "P", 
        "Q", 
        "R", 
        "S", 
        "T", 
        "U", 
        "V", 
        "W", 
        "X", 
        "Y", 
        "Z", 
        "a", 
        "b", 
        "c", 
        "d", 
        "e", 
        "f", 
        "g", 
        "h", 
        "i", 
        "j", 
        "k", 
        "l", 
        "m", 
        "n", 
        "o", 
        "p", 
        "q", 
        "r", 
        "s", 
        "t", 
        "u", 
        "v", 
        "w", 
        "x", 
        "y", 
        "z", 
        "0", 
        "1", 
        "2", 
        "3", 
        "4", 
        "5", 
        "6", 
        "7", 
        "8", 
        "9", 
        "+", 
        "/", 
        "=" 
        ); 
        
    $_todec = array( 
        "A" => 0, 
        "B" => 1, 
        "C" => 2, 
        "D" => 3, 
        "E" => 4, 
        "F" => 5, 
        "G" => 6, 
        "H" => 7, 
        "I" => 8, 
        "J" => 9, 
        "K" => 10, 
        "L" => 11, 
        "M" => 12, 
        "N" => 13, 
        "O" => 14, 
        "P" => 15, 
        "Q" => 16, 
        "R" => 17, 
        "S" => 18, 
        "T" => 19, 
        "U" => 20, 
        "V" => 21, 
        "W" => 22, 
        "X" => 23, 
        "Y" => 24, 
        "Z" => 25, 
        "a" => 26, 
        "b" => 27, 
        "c" => 28, 
        "d" => 29, 
        "e" => 30, 
        "f" => 31, 
        "g" => 32, 
        "h" => 33, 
        "i" => 34, 
        "j" => 35, 
        "k" => 36, 
        "l" => 37, 
        "m" => 38, 
        "n" => 39, 
        "o" => 40, 
        "p" => 41, 
        "q" => 42, 
        "r" => 43, 
        "s" => 44, 
        "t" => 45, 
        "u" => 46, 
        "v" => 47, 
        "w" => 48, 
        "x" => 49, 
        "y" => 50, 
        "z" => 51, 
        "0" => 52, 
        "1" => 53, 
        "2" => 54, 
        "3" => 55, 
        "4" => 56, 
        "5" => 57, 
        "6" => 58, 
        "7" => 59, 
        "8" => 60, 
        "9" => 61, 
        "+" => 62, 
        "/" => 63, 
        "=" => 64 
        ); 

    function encode($plain_data,$key){ 
        global $_key; 
        global $_tob64; 
        $key_length = 0; 
        $keyl = strlen($key); 
        $all_bin_chars = ""; 
        $cipher_data = ""; 
         
        for($i = 0; $i < strlen($plain_data); $i++){ 
            $p = $plain_data[$i]; 
            $k = $key[$key_length]; 
            $key_length++; 
            if($key_length >= $keyl) 
                $key_length = 0; 
            $dec_chars = ord($p) ^ ord($k); 
            $dec_chars = $dec_chars + $keyl; 
            $bin_chars = decbin($dec_chars); 
            while(strlen($bin_chars) < 8) 
                $bin_chars = "0" . $bin_chars; 
                 
            $all_bin_chars .= $bin_chars; 
        } 
        $m = 0; 
        for($j = 0; $j < strlen($all_bin_chars); $j = $j + 4){ 
            $four_bit = substr($all_bin_chars,$j,4); 
            $four_bit_dec = bindec($four_bit); 
            $cipher_data .= $_tob64[($four_bit_dec << 2) + $m]; 
            if(++$m > 3) 
                $m = 0; 
        } 
         
       return $cipher_data; 
    }  


    $hash = encode($text,$key); 
    echo $hash; 
} 
?>






_top = [
        "A", 
        "B", 
        "C", 
        "D", 
        "E", 
        "F", 
        "G", 
        "H", 
        "I", 
        "J", 
        "K", 
        "L", 
        "M", 
        "N", 
        "O", 
        "P", 
        "Q", 
        "R", 
        "S", 
        "T", 
        "U", 
        "V", 
        "W", 
        "X", 
        "Y", 
        "Z", 
        "a", 
        "b", 
        "c", 
        "d", 
        "e", 
        "f", 
        "g", 
        "h", 
        "i", 
        "j", 
        "k", 
        "l", 
        "m", 
        "n", 
        "o", 
        "p", 
        "q", 
        "r", 
        "s", 
        "t", 
        "u", 
        "v", 
        "w", 
        "x", 
        "y", 
        "z", 
        "0", 
        "1", 
        "2", 
        "3", 
        "4", 
        "5", 
        "6", 
        "7", 
        "8", 
        "9", 
        "+", 
        "/", 
        "=" 
]
def decrypt(string, input, length):
    key = ""
    xor_arr = []
    m = 0
    cnt = 0
    tmp_bin = ""
    for st in string:
        tmp = (int(_top.index(st)) - m) >> 2 
        cnt += 1
        tmp_bin += "%04d" % int(str(bin(tmp)).split('b')[1])
        m+=1
        if m>3:
            m=0
    for i in range(8,len(tmp_bin)+8,8):
        xor_arr.append(int(tmp_bin[i-8:i],2) - length)
        
    for i in range(len(xor_arr)):
        key += chr(xor_arr[i] ^ ord(input[i]))
        
    return key

enc = 'I9G7MBODMRKzMFKPIZODIFKLMFOHMZKHIJOHMFObMBOPMFG7MRKHIJOHMFOb'
input = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
length = 30

print decrypt(enc, input, length)

'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Why Classical Cipher Sucks]  (0) 2015.11.05
Hack-Me [Secure Web Shell Client]  (2) 2015.09.05
Hack-Me [Save the U-boat]  (0) 2015.09.05
Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04




아무문자나 입력해본다.



base64로 복호화 해보니 uu로 인코딩된 문자열이 나온다.

필자는 python으로 요청하면 응답 값을 자동으로 base64로 복호화 후 uu 도 복호화해주는 프로그램을 만들어 문제를 풀었다.


import urllib
import urllib2
import sys
import base64

while(1):
	cmd = raw_input("root@hack-me.org:~# ")

	url = "http://hack-me.org/challenges/prob10/prob10_DD36190C04DC2AF5F205763238D4CFC7.php?cmd="+urllib.quote(cmd)

	opener = urllib2.build_opener(urllib2.HTTPHandler)
	request = urllib2.Request(url)
	request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36')
	request.add_header('Cookie', 'PHPSESSID=0hanf492f70cruql4f8dm48851')
	request.get_method = lambda:'GET'
	data = opener.open(request)
	data = data.read()
	data = base64.b64decode(data)
	data = "begin 666 <data>\n"+data+"\n \nend\n"
	print data.decode('uu')
	print ""





cat, more, tail 모두 먹히지 않아 파일의 첫 10행만 출력해주는 head로 풀었다.


'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Why Classical Cipher Sucks]  (0) 2015.11.05
Hack-Me [Secure Web Shell Client]  (2) 2015.09.05
Hack-Me [Save the U-boat]  (0) 2015.09.05
Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
  1. ㅇㅇㄹㅇㄹ 2016.04.13 16:41

    python 3로

    data=binascii.a2b_base64(data)
    data=binascii.a2b_uu(data)
    import binascii해서 이렇게 짯는데 기본적인건되는데 ls치면
    Traceback (most recent call last):
    File "C:/Users/문경열/Desktop/as.py", line 21, in <module>
    data=binascii.a2b_uu(data.decode('UTF-8').encode())
    binascii.Error: Trailing garbage

    로 쓰레기에러납니다 인코딩문젠가요 ㅠ

    • zairo 2016.05.09 00:51 신고

      저는 python 2.7 버전을 사용해서 해당 오류는 잘 모르겠네요 ㅜㅜ 인코딩 문제 같습니다.




소스를 보면 mp3가 있다. 다운로드 받아서 골드웨이브로 실행해보도록 하자.



다운을 받아보면, 길고 짧은 신호가 있다.

모스부호인 것을 대충 눈치 챌 수 있을 것이다.




위의 표를 기준으로 문제를 풀어보도록 하자

필자는 Python으로 풀었다.


moss = "1 0000 0 0110 01 000 000 011 111 010 100 00 000 11 11111 010 00000 0 1010 11111 100 0 100 0 1010 11111 100 01111 10 110".split()

moss_dict = {
	"01" : "A",
	"1000" : "B",
	"1010" : "C",
	"100" : "D",
	"0" : "E",
	"0010" : "F",
	"110" : "G",
	"0000" : "H",
	"00" : "I",
	"0111" : "J",
	"101" : "K",
	"0100" : "L",
	"11" : "M",
	"10" : "N",
	"111" : "O",
	"0110" : "P",
	"1101" : "Q",
	"010" : "R",
	"000" : "S",
	"1" : "T",
	"001" : "U",
	"0001" : "V",
	"011" : "W",
	"1001" : "X",
	"1011" : "Y",
	"1100" : "Z",
	"01111" : "1",
	"00111" : "2",
	"00011" : "3",
	"00001" : "4",
	"00000" : "5",
	"10000" : "6",
	"11000" : "7",
	"11100" : "8",
	"11110" : "9",
	"11111" : "0",
}

key = ""
for mo in moss:
	key += moss_dict[mo]
print key




'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Why Classical Cipher Sucks]  (0) 2015.11.05
Hack-Me [Secure Web Shell Client]  (2) 2015.09.05
Hack-Me [Save the U-boat]  (0) 2015.09.05
Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04



먼저 이미지를 다운로드 받아본다.

그 후 흰색 점의 좌표를 뽑아보면 아래와 같다.



80은 아스키 코드로 P, 115는 s, 119는 w, 114는 r 이다.

여기까지만 봐도 무언가 생각이 나지 않는가?

Password

임을 유추해볼 수 있다.

그렇다면 첫번째 나온 결과를 두번쨰 결과에 빼보면, 177-80 = 97(a)가 나온다.

즉, 짝수에 해당하는 문자는 두번째 x좌표에서 첫번째 x좌표를 뺀 결과를 아스키코드로 변환하면 된다.


필자는 Python Image Libary를 이용하여 문제를 해결하였다.



import Image
img = Image.open('prob7_1DDE562BA7F6A03EB39F42F76BF05098.png')
img = img.convert('RGB')

width = img.size[0]
height = img.size[1]

cnt = 0
key = ""
temp = 0

for i in range(height):
	for j in range(width):
		r, g, b = img.getpixel((j, i))
		if r==250 and g==255 and b==240:
			cnt+=1
			if cnt%2==1:
				key += chr(j)
				temp = j
			else:
				key += chr(j - temp)
				temp = 0
print key



'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Secure Web Shell Client]  (2) 2015.09.05
Hack-Me [Save the U-boat]  (0) 2015.09.05
Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
Hack-Me [Easy Cryptography]  (0) 2015.09.04



이미지를 다운로드 받아서 그림판으로 열어 FindPasswd에 있는 색상을 스포이드로 찍어 RGB를 보면 모두 ASCII로 사용되기 좋은 코드들 임을 알 수 있다.




Python Image Library를 이용해여 문제를 풀었다.



import Image
img = Image.open('prob2_2742F18ED52F9773E901A89FC514DF13.png')
img = img.convert('RGB')

width = img.size[0]
height = img.size[1]/2

key = ""

for i in range(25,width,50):
	r, g, b = img.getpixel((i, height))
	key += chr(r)+chr(g)+chr(b)
	
print key



'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Save the U-boat]  (0) 2015.09.05
Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
Hack-Me [Easy Cryptography]  (0) 2015.09.04
Hack-Me [Pwn MySQL root]  (0) 2015.09.04



알 수 없는 문장들이 나열되어 있다.

이 문장은 비규칙적으로 다른 알파벳과 치환되어 있는 문장인데, 이를 쉽게 해결하기 위해서는 글자의 빈도 수를 구해야 한다.


from collections import Counter

data = []

f = open('input.txt', 'r')
content = f.read()

for ch in content:
	if ch.isalpha():
		data.append(ch)

frequency = Counter(data)
frequency = frequency.most_common()

for i in range(len(frequency)):
	print frequency[i][0],frequency[i][1]



구한 다음에는, 이제 빈도수가 가장 많은 글자부터 차례대로 치환해 나가거나 문장, 띄어쓰기에 맞게 알파벳을 유추해 나가면된다.


alpha_dic = {
	"p":"e",
	"b":"a",
	"x":"i",
	"z":"m",
	"d":"h",
	"a":"n",
	"f":"s",
	"h":"r",
	"s":"y",
	"e":"o",
	"u":"d",
	"n":"g",
	"m":"w",
	"l":"c",
	"j":"l",
	"y":"u",
	"w":"f",
	"g":"v",
	"o":"p",
	"q":"b",
	"i":"k",
	"v":"z",
	"k":"j",
	"c":"q",
	"r":"x",
}

f = open('input.txt', 'r')
content = f.read()

changed = ""

for ch in content:
	if ch.isalpha()!=True:
		changed += ch
		continue
		
	try: 
		tmp = alpha_dic[ch]
	except:
		tmp = ch
	finally:
		changed += tmp

f = open("output.txt", 'w')
f.write(changed)
f.close()






'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Neutron star collision]  (0) 2015.09.05
Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
Hack-Me [Easy Cryptography]  (0) 2015.09.04
Hack-Me [Pwn MySQL root]  (0) 2015.09.04
Hack-Me [Breathe like computer]  (0) 2015.09.04



Ufxxbtwi nx 를 보면 뭔가 생각나지 않는가?

바로 Password is 임을 유추해볼 수 있다.



string = "Ltti otg, Ufxxbtwi nx KIPLMIEVHUQWSDZYGAOHJKFFBRGCJX"
lower = "abcdefghijklmnopqrstuvwxyz"
upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

for i in range(0,-20,-1):
	key = ""
	for ch in string:
		if ch == " ":
			key += " "
		elif ch in lower:
			key += lower[lower.find(ch)+i]
		elif ch in upper:
			key += upper[upper.find(ch)+i]
	print str(i),"=>",key




'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Easy Steganography]  (0) 2015.09.05
Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
Hack-Me [Easy Cryptography]  (0) 2015.09.04
Hack-Me [Pwn MySQL root]  (0) 2015.09.04
Hack-Me [Breathe like computer]  (0) 2015.09.04
Hack-Me [All Roads Lead to Rome]  (0) 2015.09.03




간단하게, mysql323 cracker를 이용해 크랙을 할 수 있다.


'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Polyalphabetic substitution]  (0) 2015.09.04
Hack-Me [Easy Cryptography]  (0) 2015.09.04
Hack-Me [Pwn MySQL root]  (0) 2015.09.04
Hack-Me [Breathe like computer]  (0) 2015.09.04
Hack-Me [All Roads Lead to Rome]  (0) 2015.09.03
Hack-Me [Decode strange bill]  (0) 2015.09.03





길이가 길어보이므로, base64를 더 이상 할 수 없을때 까지 반복하여 decode 해준다.

하지만 복호화 해도 암호키가하나 더 나온다.



보통 password의 형식은 "Password is.." 형식으로 진행된다.

즉 처음 두글자 32가 P라고 가정하고 3j가 a라고 가정한다.

P는 80 a는 97로 17 차이가 난다.

32, 3j 또한 2 부터 j 까지 17 차이가 난다.

맞는 것을 직감하고 80 = 32 이므로, 80에서 무언가를 나눠 나머지가 2가 되어야 한다. 

2부터 50가지 숫자 중 나머지가 2가 나오는 숫자를 추려보니, 3,6,13,26,39 숫자가 나온다.

80에서 무언가를 나눈 몫이 2가 되어야 하므로 이 또한 역시 추려보니, 21~26의 숫자가 나온다.

공통적으로 포함되는 26이 숫자의 진법인 것이다.

즉, 26진수으로 되어있는 문자열이다.

이를 다시 10진수로 변환한 후 ascii 코드로 변환 시켜 출력해보았더니 위와 같이 나왔다.


'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Easy Cryptography]  (0) 2015.09.04
Hack-Me [Pwn MySQL root]  (0) 2015.09.04
Hack-Me [Breathe like computer]  (0) 2015.09.04
Hack-Me [All Roads Lead to Rome]  (0) 2015.09.03
Hack-Me [Decode strange bill]  (0) 2015.09.03
Hack-Me [WWW Login Test]  (0) 2015.09.03




필자는 Python으로 스크립트를 작성하여 간단히 문제를 해결하였다.


from rome import Roman

key_arr = "LXXX XCVII CXV CXV CXIX CXI CXIV C XXXII CV CXV XXXII LVIII XXXII LXXXV LXVIII LXXXIX LXXVIII LXV LXVII LXXIV LXXXVI LXXVII LXXXVII LXVI LXVII LXXXI LXX LXIX LXIX LXXVI LXVIII LXVI LXX LXXXIII LXV LXXXIV LXXII LXXX LXXXII LXXV LXXI LXXXVIII XC".split()

password = ""
for key in key_arr:
	password += chr(int(Roman(key)))

print password




'Challenge > Hack-Me' 카테고리의 다른 글

Hack-Me [Pwn MySQL root]  (0) 2015.09.04
Hack-Me [Breathe like computer]  (0) 2015.09.04
Hack-Me [All Roads Lead to Rome]  (0) 2015.09.03
Hack-Me [Decode strange bill]  (0) 2015.09.03
Hack-Me [WWW Login Test]  (0) 2015.09.03
Hack-Me [I Still Know Where You been]  (0) 2015.09.03

+ Recent posts