'문제풀이'에 해당되는 글 13건

[세종 CTF/250] Private Torrent

Posted by nopsled
2016.04.07 15:13 문제풀이



처음 바이너리 받고 확인하면 PK 포맷으로 ZIP파일인걸 알게 됩니다.





토렌트파일인거 확인.






다운 받으려 했지만 불가능.. 트래커 서버가 onion이다...


Tor 브라우저와 토렌트 연결해주어야 사용 가능..인포해쉬나 peer_id 같은거 알면 그냥 밑에 그대로 진행하심 됩니더



::1 - - [02/Apr/2016:16:33:12 +0900] "GET http://ovmqomeprulxo35z.onion/announce.php?info_hash=1%03%86%f8e%f9%159%20%d9%cfn%d3DT%21%efA%88%3b&peer_id=-UM1870-C%a3G%c3V%60bY%8c%dc%0e%e4&port=24874&uploaded=0&downloaded=0&left=73&corrupt=0&key=7305D41C&event=started&numwant=200&compact=1&no_peer_id=1&ipv6=fe80%3a%3a82e6%3a50ff%3afe0f%3a8bac HTTP/1.1" 404 210 "-" "uTorrentMac/1870(41795)"


- 아파치 로그 확인하면 저런 로그가 찍혀 있는데 저거 그대로 복사해서 들어가면 된다. 저기로 들어가주자.




bencode 형식으로 인코딩된 키인데 디코딩 해주면 된다. 해줄 필요도 없긴한데 그냥 해준다.


디코딩하면 json방식 이므로~


>>> print bencode.bdecode('d16:R4sc4l123_is_g0d3:keye')

{'R4sc4l123_is_g0d': 'key'}


사실 R4sc4l123_is_g0d3이거 열심히 입력했는데 R4sc4l123_is_g0d였다..



Thanks to @이상섭

저작자 표시 비영리
신고

[세종 CTF/250] Simple_Calculation

Posted by nopsled
2016.04.07 15:13 문제풀이

Just calculate 60 times! nc 203.250.148.100 31062



60번의 시도로 계산하랍니다. 그냥 간단한 코딩 MISC문제..


코드는 더러워도 이해해주세요.ㅋㅋ




calc.py



import socket, time

def calc(answer):

    operator = ['+','-','*','/','&','|','^']

    test = []

    for i in range(0, len(answer)):

        if not answer[i] in operator:

            test.append(answer[i])

        else:

            if answer[i] == '+':

                test.append(answer[i].replace('+','-'))

            elif answer[i] == '-':

                test.append(answer[i].replace('-', '+'))

            elif answer[i] == '*':

                test.append(answer[i].replace('*', '/'))

            elif answer[i] == '/':

                test.append(answer[i].replace('/', '*'))

            elif answer[i] == '&':

                test.append(answer[i].replace('&', '^'))

            elif answer[i] == '|':

                test.append(answer[i].replace('|', '&'))

            elif answer[i] == '^':

                test.append(answer[i].replace('^','|'))

    return ''.join(test)


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('203.250.148.100' , 31062))


print s.recv(1024) # Lovely Calculation!

s.send('d') # Enter Game


print s.recv(1024) # Two Game

s.send('Myeong\n') # Enter Game


print s.recv(1024)


s.send('\n') # press any key


for i in range(0, 60):

    response = s.recv(1024)

    print response,

    answer = response.split('\r\n')[0].split(' : ')[1]

    answer = calc(answer)

    print str(eval(answer)) + '\t\t' + answer

    s.send(str(eval(answer))+'\r\n')

    time.sleep(1)

print s.recv(1024)

print s.recv(1024)



nopsled@smleeo3o:~/Desktop (=ω´=)$ python test.py

Lovely Calculation!


This problem includes 60 rounds.


Specific Info.

1.Each round has 3 sec. time limit. And all of the answers will be INTEGER ONLY!

2.From round 1 to round 20, there will be less than 5 numbers that you should calculate. The operators will be +,-,*,%.

3.From round 21 to round 40, there will be more than 5 numbers that you should calculate. Also, the equation can have parenthesis. The operators will basically same as round 1 to 20.

4.From round 41 to round 60, there will be more than 10 numbers that you should calculate. Also, the equation can have parenthesis and &,|,^ operator. It follows the standard C language's operator precedence.

5.The operators are little bit different. + -> -, - -> +, * -> /, / -> *, & -> ^, | -> &, ^ -> |


What is your name? :

Have Fun!(Press Any Key)


Round 1 : 7+5*7%1

Answer :  7 7-5/7%1

Round 2 : 2/1+4-2

Answer :  0 2*1-4+2

Round 3 : 4+5%3

Answer :  2 4-5%3

Round 4 : 1%6-8+3

Answer :  6 1%6+8-3

Round 5 : 4+6

Answer :  -2 4-6

Round 6 : 2%6

Answer :  2 2%6

Round 7 : 8+7

Answer :  1 8-7

Round 8 : 9+8

Answer :  1 9-8

Round 9 : 7+9

Answer :  -2 7-9

Round 10 : 5-8

Answer :  13 5+8

Round 11 : 4%1+5+7

Answer :  -12 4%1-5-7

Round 12 : 9/1

Answer :  9 9*1

Round 13 : 2/4+1

Answer :  7 2*4-1

Round 14 : 9%1*4%4

Answer :  0 9%1/4%4

Round 15 : 5-4+4%2

Answer :  9 5+4-4%2

Round 16 : 8%5*2+3

Answer :  -2 8%5/2-3

Round 17 : 8-5

Answer :  13 8+5

Round 18 : 2+1

Answer :  1 2-1

Round 19 : 6*3

Answer :  2 6/3

Round 20 : 1+2+8+7

Answer :  -16 1-2-8-7

Round 21 : (4*1-7+5)-1*1*2

Answer :  6 (4/1+7-5)+1/1/2

Round 22 : 1*1+4+9*2

Answer :  -7 1/1-4-9/2

Round 23 : 7-9/5+1/8+1*4-1%3

Answer :  45 7+9*5-1*8-1/4+1%3

Round 24 : 1*7/1+2%4

Answer :  -2 1/7*1-2%4

Round 25 : 1*1*4*2+7*3%1*7

Answer :  0 1/1/4/2-7/3%1/7

Round 26 : 7*7*1-7-3

Answer :  11 7/7/1+7+3

Round 27 : 5+8*7-4/8-4-9+1

Answer :  48 5-8/7+4*8+4+9-1

Round 28 : 1+1/1+1*4

Answer :  0 1-1*1-1/4

Round 29 : 8*3%1+8+3-9+1+7

Answer :  -10 8/3%1-8-3+9-1-7

Round 30 : 6-1/1/1+4

Answer :  3 6+1*1*1-4

Round 31 : 3+4+5-4*1%7+2+7

Answer :  -11 3-4-5+4/1%7-2-7

Round 32 : 3+4/1+8-3/7/4/2*8

Answer :  12 3-4*1-8+3*7*4*2/8

Round 33 : 7*4*6*7+1+9

Answer :  -10 7/4/6/7-1-9

Round 34 : 1+7%1%8%6+9+1

Answer :  -9 1-7%1%8%6-9-1

Round 35 : 4-6+5%4-7*1

Answer :  16 4+6-5%4+7/1

Round 36 : 1-7%1/9-4*8/1

Answer :  1 1+7%1*9+4/8*1

Round 37 : 3%1+5%1+6*1+7*1+5

Answer :  -18 3%1-5%1-6/1-7/1-5

Round 38 : 3-8/4+3+9

Answer :  23 3+8*4-3-9

Round 39 : 1/9-6+7/1-1+2-2/8

Answer :  23 1*9+6-7*1+1-2+2*8

Round 40 : 6+3%8+1-6

Answer :  8 6-3%8-1+6

Round 41 : 8+7|(7-1)+4|7^5*4

Answer :  1 8-7&(7+1)-4&7|5/4

Round 42 : 3|8%2-7%4

Answer :  3 3&8%2+7%4

Round 43 : 1^3+7-4%6+3+7+3

Answer :  -13 1|3-7+4%6-3-7-3

Round 44 : 1%9+1-5+3

Answer :  2 1%9-1+5-3

Round 45 : 7+5+4-5|9/1+9^4

Answer :  4 7-5-4+5&9*1-9|4

Round 46 : 3+8+1+7|6+1%1%2%8

Answer :  2 3-8-1-7&6-1%1%2%8

Round 47 : 1&4+3%2*1+1

Answer :  3 1^4-3%2/1-1

Round 48 : 1+6+1^6^8&1%1+1+9

Answer :  -2 1-6-1|6|8^1%1-1-9

Round 49 : 3/5+9*1+4/3

Answer :  -6 3*5-9/1-4*3

Round 50 : 4%1+7^7+8^4%4

Answer :  -1 4%1-7|7-8|4%4

Round 51 : 5-9%1+7-6+9

Answer :  -5 5+9%1-7+6-9

Round 52 : 3+1+2*8^4*9*4%1%7

Answer :  2 3-1-2/8|4/9/4%1%7

Round 53 : 4*7|1|3%3+5-4+4*1

Answer :  0 4/7&1&3%3-5+4-4/1

Round 54 : 1+7*7|6+9

Answer :  0 1-7/7&6-9

Round 55 : 3%1^4/7/2+1%1%1

Answer :  56 3%1|4*7*2-1%1%1

Round 56 : 8+5^6/8/4

Answer :  195 8-5|6*8*4

Round 57 : 4^1*2|8%9*1+3+9

Answer :  4 4|1/2&8%9/1-3-9

Round 58 : 1+4*1|7^1

Answer :  5 1-4/1&7|1

Round 59 : 7+1^3%1%6^2^3%5

Answer :  7 7-1|3%1%6|2|3%5

Round 60 : 2-9^4+1*1

Answer :  11 2+9|4-1/1

Congrats! You've cleared whole probs!

The key is on https://www.youtube.com/watch?v=NQlnVVQbpi0 




네 넘나 이쁘고 귀여워서 문제 만든분께 감사합니다.


Thanks to @sup3rv1s0r

저작자 표시 비영리
신고

[세종 CTF/109] 당신은 Robots 입니까?

Posted by nopsled
2016.04.07 15:12 문제풀이



첫 메인 접속시 로봇이냐고 물어본다.


공격 벡터도 없고 생각좀 하다가 robots.txt가 생각나서 들어가봤다.




SSG_Browser만 접근가능하게끔 되어 있고..




SSG_Browser로 바꿔서 들어가면 위와 같은 인증창이 나오는데 페이지 소스를 본다.




eval코드를 복호화하면 다음과 같은 코드가 나온다.




POST로 값을 보낸다.



a를 보냈을때 리스폰값에 -5가 붙어 있고



4를 넣었을때 -5가 사라진다.


사이드채널어택이나 타이밍 어택으로 보고 코딩시작~




robots.py




# -*- coding: utf8 -*-

import requests

alphabet = 'abcdefghijklmnopqrstuvwxyz01234567890'

answer = []

while True:

    find = False

    for i in range(0, len(alphabet)):

        data = {'a':''.join(answer)+alphabet[i]}

        res = requests.post('http://sandbox.smishing.kr:32810/post.php', data=data,headers={'User-Agent':'SSG_Browser'}).content

        if res.find('-5') == -1:

            answer.append(alphabet[i])

            find = True

            print ''.join(answer)

            break


    if find == False: break

print 'Key : ' + ''.join(answer)

print '----- webdata -----'

data = {'a':''.join(answer)}

res = requests.post('http://sandbox.smishing.kr:32810/post.php', data=data,headers={'User-Agent':'SSG_Browser'}).content

print res 





유니코드로 출력해주면 끝.


결론은 앙 주난띠!



Thanks to @이준환, @최인준

저작자 표시 비영리
신고

Holyshield 2013 - Findakey

Posted by nopsled
2014.03.26 01:27 문제풀이








1
2
3
4
5
6
7
8
9
10
11
12
13
14
F1::
SetBatchLines, -1
Loop {
      PixelSearch, vx, vy,x,y,width,height,0xFDFDFE
      if errorlevel=0
           click, %vx%, %vy%
      if errorlevel=1
           Break
}
MsgBox,64,, Done!,0.5
Exitapp
return
 
F2::Exitapp



AutoHotKey를 이용하여 프로그래밍 하였습니다.

픽셀서치하여 RGB가 0xFDFDFE인 값만 검정색으로 칠합니다.


저작자 표시 비영리
신고

Hack The Packet 2013 - 동건이는 악성앱을 설치하였다. 이때 정보가 빠져나갔다. 빠져나간 시각을 찾아라.

Posted by nopsled
2014.03.26 00:57 문제풀이

HEQ : Donggun installed malicious android application. when Information is stoled?


정보가 빠져나갔다는 소리에 method가 POST라고 생각하고 필터링 걸었습니다.

http.request.method eq POST로 필터링걸고 시작하겠습니다.



Destination IP가 117.53.114.12인게 꽤 많아서 찾아보니까 mail3.nate.com이더군요..

mail3.nate.com까지 필터링 하고 싶으시다면 http.request.method eq POST and http.host ne mail3.nate.com이라고 필터링 걸어주시면 됩니다.


Destination IP가 1.234.38.88인게 하나 있는데(패킷 인덱스 33176) POST로 /send_sim_no.php로 무언가를 보냅니다.

이번에도 Follow TCP Stream를 해줍니다.



sim_no, datetime이라는 파라미터 두개로 값을 보내는데 datetime 파라미터를 보시면 URL Encoding이 되어 있는데, Decode하시면 2013-10-10+10:20:52 이라고 나옵니다.


Password is 2013-10-10+10:20:52

저작자 표시 비영리
신고

Hack The Packet 2013 - 메신저로 전달된 우탱이 먹고 싶은 라면에 이름은?

Posted by nopsled
2014.03.26 00:26 문제풀이

Hint : nateon, * Key format is the animal name of related food. If you find a fried chicken, the answer should be chicken.


힌트에서 네이트온이라고 해서 필터링을 이렇게 걸었습니다.

http.request.full_uri contains nateon



다행히 하나만 나오네요. Follow TCP Stream해서 보아야겠네요.



filename은 working.jpg이긴한데 파일 포맷이 PNG로 시작하네요.

Save As를하여 파일을 덤프 떠줍니다.



HxD로 열어서 00000221까지 삭제해서 올바른 PNG포맷으로 만들어줍니다.



너구리 라면이네요.

너구리 = raccoon

(네이버에서는 racoon이라고 나와서 계속 인증하는데 안되서 구글보니까 raccoon이더라구요..-_-)



Password is raccoon

저작자 표시 비영리
신고

Hack The Packet 2013 - 이번엔 어디로 놀러갈까?

Posted by nopsled
2014.03.26 00:11 문제풀이

Hint : hexdecode %% steganograpy



File -> Export Objects -> HTTP



둘러보다가 패킷인덱스가 669부분에 Content Type이 application/zip이 보입니다.

수상하길래 669패킷으로 가서 Follow TCP Stream해줍니다.



파일포맷이 PK이므로 zip인걸 확인했으니 다시 Export Objects로 가서 *.zip을 저장합니다.



비밀번호가 걸려있는데 생각해보니 힌트에 hex를 decode하라고 합니다.

Save As한 파일의 이름은 아닐테고.. 다시 Follow TCP Stream으로 가서 확인합니다.



filename이 있는데 python으로 hex를 decode해봅니다.


1
2
prob = "6861636b7468657061636b6574"
print prob.decode('hex')


hackethepacket을 리턴해줬습니다.

리턴한값을 이용하여 압축을 풀면 이미지파일이 보입니다.



해당 이미지를 가지고 구글 이미지 검색을 해보면 turkey istanbul에 있는 maiden's tower라고 합니다.

Istanbul, istanbul, madientower, maidenstower해봤는데 안되길래 turkey라고 인증하니까 됬습니다.


Password is turkey



저작자 표시 비영리
신고

Hack The Packet 2013 - 뭐가 궁금해? 네이버에서 search 해봐!

Posted by nopsled
2014.03.25 23:39 문제풀이

Hint : When you find a search keyword on naver, translate it to English. * If you find the keyword “에이비씨"", Key should be “ABC”


네이버의 쿼리는 search.naver?where로 시작합니다.

따라서 http.request.full_uri contains "search.naver?where" 이렇게 필터링하면 됩니다.




필터링을 걸어서 확인하면 인덱스가 두개(1397, 29998)가 나오는데 둘중하나가 답입니다.


1397. http://search.naver.com/search.naver?where=nexearch&query=%EC%97%90%EC%9D%B4%EC%B9%98%ED%8B%B0%ED%94%BC&sm=top_hty&fbm=1&ie=utf8


29998. http://search.naver.com/search.naver?where=nexearch&query=%EB%8D%B0%EC%9D%BC%EB%A6%AC%EC%8B%9C%ED%81%90&sm=top_hty&fbm=1&ie=utf8



1397 패킷이 답입니다 :D


Password is HTP

저작자 표시 비영리
신고

Hack The Packet 2013 - 메일보고 이곳으로 와!

Posted by nopsled
2014.03.25 23:03 문제풀이

Hint : Use your fingers


문제 제목에서 메일보고 이곳으로 오라길래 필터를 다음과 같이 걸었습니다.

http.request.full_uri contains mail and http.request.method eq POST



30341패킷을 Follow TCP Stream합니다.



Follow TCP Stream해보면 이미지의 이름이 com here.jpg인걸 알 수 있고, JFIF 포맷인걸 보아하니 JPEG포맷인걸 알 수 있습니다.

Save As를하여 저장하고 HxD(헥스에디터)와 같은 헥사툴을 이용하여 올바른 JPEG포맷으로 만들어줍니다.

00001100까지 삭제하시면 됩니다.

혹은 BackTrack에서 foremost를 사용하여 추출해내시면 됩니다.



http://m.site.naver.com/qrcode/view.nhn?v=08D0q

Password is mychelsea


저작자 표시 비영리
신고

Hack The Packet 2013 - 누군가 80포트를 통해 나의 중요한 파일을 삭제했다.

Posted by nopsled
2014.03.25 22:37 문제풀이

Hint : METHOD vulnerability. check the contents of uploaded file.


http.request.method에는 OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT와 같은 method들이 있습니다.

파일을 삭제했을때 쓰는 method는 POST, PUT, DELETE 정도가 있는데 힌트에서 보이듯이 METHOD vulnerability라고 합니다.


PUT과 DELETE method가 vulnerability하기 때문에 exploit이 가능해집니다.




필터링을 http.request.method eq DELETE or http.request.method eq PUT으로 걸어줍니다.



37525패킷을 Follow TCP Stream합니다.





password is W26d@v@ttack

저작자 표시 비영리
신고