2010.03.25 21:35 WarGame

아 간만의 Python Challenge 포스팅이로군요

Codegate 문제 좀 푼다고 삽질좀 하느라 정신이 없었네요

지난 해 보다 문제 유형이 다양해진거 같습니다

주말에 Codegate 2문제쯤 포스팅 할 것 같군요

아무튼, Python Challenge level6 시작합니다



소스는



이고 주석에 PayPal은 상관 없다고 합니다

저러면 더 의심가긴 합니다만 -

channel.zip 이라고 쳐보면

텍스트 파일 뭉치가 압축된 파일을 받을 수 있습니다

압축을 풀어보면..?

평소엔 보지 못했던 부분이 있네요



파일명 앞부분에는 말풍선이 있고

평소엔 비어있던 설명 탭에는

알 수 없는 문자들이 있군요

괜히 넣어둔건 아니겠죠

아무튼 압축 파일에 들어있는 Readme.txt 를 읽어보면

welcome to my zipped list.

hint1: start from 90052
hint2: answer is inside the zip


라고 합니다

흠 

90052.txt를 읽어보면

다음 읽어야 할 파일 명이 적혀 있습니다

전에 풀었던 문제와 비슷한거 같네요

순차적으로 읽는 소스를 구현합니다


 

돌려보면 마지막 텍스트 파일이 나오겠죠

이번 문제는 정말 간단했다고 생각하며

파일을 여는 순간



있어야 할 답은 없고

Collect the comments.

라고만 있네요

코멘트를 모으라니 이건 무슨 개소린가 했는데

걸리는게 하나 있네요

좀 전에 설명 탭에 있는 문자들 기억나시나요

아무래도 그 문자를 읽어 출력해야 하는 것 같습니다

그 설명이 텍스트 파일에 첨부 되어 있는게 아니라

Zip 파일에 있는 것 같습니다

그러니까 텍스트 파일의 내용을 읽어서 쭉 추적하되

' 추적 중에 각 파일의 comment 를 모은다 '

Zip 관련 module 을 찾아서 쭉 훑어보면

comment 에 관련된 함수를 찾을 수 있습니다

소스를 작성해보면


 


어때요 참 쉽죠?


는 훼이크고 , 처음에 zip file 설명 부분을 놓치고 못봐서

고생좀 했습니다

이번 문제는 범용성은 좀 .. 많이 떨어지죠

zipfile 의 설명 부분은 거의 쓸일이 없습니다만

새로운 module 을 사용해보고

그 사용법을 익힐 수 있다는 점에선 재밌었습니다 :D

'WarGame' 카테고리의 다른 글

[ CodeGate 2010 ] Challenge 5 풀이  (2) 2010.03.28
[ CodeGate2010 ] Chanllenge 4 풀이  (0) 2010.03.28
[ Python Challenge ] level6 풀이  (0) 2010.03.25
[ CodeGate 2010 ] Challenge 11 풀이  (0) 2010.03.19
[ Codegate 2010 ] Chanllenge 1 풀이  (2) 2010.03.17
[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
Posted by LinkC

2010.03.19 10:06 WarGame


다른 문제에 비해 비교적 간단한 문제인데

문제 설명부터 빵 터져서 올려봅니다 :D



Real Badass ㅋㅋㅋㅋ

아 아무튼 ex-grilfriend에 링크가 되어있고

들어가보면 태연 사진이 걸려있습니다

취약한 구석은 그쪽이 아니라 물론 업로드 쪽이겠죠~

.jpg 파일만 업로드 가능합니다

혹 다른 파일을 업로드 하면

I only take a file that has .jpg extension. Because I'm bad.

라고 하시는군요

문제 풀면서 내내 웃어댔습니다 ㅋㅋ

아무튼 web server 를 파악해보면 IIS 인것을 알 수 있습니다

 



IIS extension vulnerability , IIS 업로드 취약점, IIS webshell

등등을 쳐보면 취약점 정보가 나옵니다

대략 test.php;.jpg 이런식으로 우회가 가능하구요

웹쉘을 올려보면 에러가 뜹니다

흠 일반적인 웹쉘은 막아놓은 모양인데요

문제를 다시 봐보면

 Get a value of HKLM\Software\codegate2010, it's the flag.

목적은 특정 레지스트리 값을 얻어오는 것입니다

아마 레지스트리 값을 얻어오는 코드를 발견하면

답을 뿌려주고 나머지는 모두 막아놓았겠죠

read the registry php 정도로 구글링 해보니

http://www.tek-tips.com/faqs.cfm?fid=5334

에 간단한 예제가 있습니다

살펴보니 COM 으로 WScript.shell을 호출하고

WScript는 local 상에서 프로그램을 구동하거나 registry를 읽는 등의

여러가지 기능을 할 수 있는 거 같더군요

아무튼

이를 살짝 고쳐주면





업로드 하고 경로 확인해주면 답이 출력됩니다

'WarGame' 카테고리의 다른 글

[ CodeGate2010 ] Chanllenge 4 풀이  (0) 2010.03.28
[ Python Challenge ] level6 풀이  (0) 2010.03.25
[ CodeGate 2010 ] Challenge 11 풀이  (0) 2010.03.19
[ Codegate 2010 ] Chanllenge 1 풀이  (2) 2010.03.17
[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
[Python Challenge] level5 풀이  (2) 2010.03.11
Posted by LinkC

2010.03.17 18:51 WarGame


먼제 문제 설명은

beist likes drinking.
feel free to give a shot to him when you meet him.
this challenge doesn't need to give many hints to you guys.
just get to http://ctf7.codegate.org/31337/

YOU NEED TO GET A SHELL AND SEE A FILE THAT CONTAINS A FLAG OF THIS CHALLENGE. GOOD LUCK.

beist 님의 맥주 사랑을 여실히 느낄 수 있게 해 주는군요 :D




전형적인 웹 쪽 문제화면이로군요

메뉴 하나 하나 찔러보고 소스를 봤습니다만

그중에 의심가는건

Beer list 에 계산기 부분이었습니다

You need to pay 450000 KRW, thank you. You drank 150

대략 한병에 3천원씩 계산해서 보여주는데 이 숫자가 overflow 되는 현상이 

발생했기 때문인데요

cgi 파일이라 그쪽 취약점이 있나 싶어

인자를 다르게 집어 넣어봤는데 숫자만 허용합니다 -.-

한참 삽질해보다 다른 부분을 건드려보기로 했습니다

http://ctf7.codegate.org/31337/index.php?page=

page 인자를 공백으로 주니




Local and Remote File Inclusion , LFI 취약점이 있습니다

Wowhacker 의 Bobana 님이 번역 하신 문서를 보심이 좋겠군요

http://wowhacker.com/Translation/289072

일단 요청하는 페이지에 우리가 원하는 명령어를 실행시키도록 조작을 한 다음에

그 결과값을 서버의 로그 혹은 proc 폴더에서 확인하는 방법이 있습니다

로그 폴더를 찾는데 실패해서 고정 위치인 proc 폴더를 공략하기로 했습니다

proc 폴더는 각종 프로세스의 환경 변수 등을 담고 있는 폴더인데요

가장 쉽게 접근하는 방법은 최근 프로세스에 바로 접근토록 하는 

 /proc/self/environ 을 공략하는 것이죠

먼저 접근을 시도해보면..


퍼.미.션 이 없다는군요

그럼 우리가 실행하는 프로세스 ID , PID를 구해야 하는 작업이 추가되어버렸습니다

현재 실행중인 PID는 proc 폴더 내의 loadavg 를 참조하면 됩니다

그러니까

1. /proc/loadavg 에서 PID를 얻는다

2. /proc/{pid}/environ 의 내용을 얻어낸다

이를 소스로 구현하면




해당 pid 의 환경 변수 값을 얻지 못할 경우에 뜨는 메시지인 'Warning' 을 기준으로

성공/실패 여부를 판단합니다

자, PID를 구하고 그 프로세스에 해당하는 환경변수 값은 얻을 수 있게 되었습니다

그럼 이제 취약한 프로세스를 만들어 볼 차례로군요

pid 값을 지속적으로 출력시켜주도록 위 소스를 구현하여 실행하면

일반적인 요청은 pid 값을 증가시키지 못하는 것을 알 수 있습니다

한페이지씩 요청하면서 pid 값을 확인해보면

Server Side Script 중에서도 cgi 파일의 요청만 pid 값을 증가시키는 것을 볼 수 있고

이는 , ' cgi 요청은 프로세스를 생성한다 ' 라는 결론을 도출하게 합니다

그렇다면 이제 cgi 요청을 변조 하여 원하는 정보를 얻어 내는 일만 남았군요

LFI 문서를 보시면 알겠지만, 보내는 요청에 php 코드를 삽입하는 방식으로 이루어지게 됩니다

php에서 system 명령어가 실행하는 코드 <?php passthru('$cmd');?> 말이죠

이를 헤더에 추가시켜서 요청을 하고 이를 읽어내기만 하면

우리가 원하는 결과가 '쨘' 하고 나올 것이란건 의심할 바 없죠

자, 그럼 헤더를 추가해서 보내는 소스를 간단히 짜봅시다





자 그럼 답이 쨘?

.....

pid 값이 증가되서 프로세스가 생성되는 것을 확인한 것은 좋은데

환경변수 값이 뜨질 않습니다



네. 바로 프로세스가 생성되서 연산을 하고 응답을 하는건 좋은데

그 후엔 프로세스 정보가 삭제되고, 이 시간은 '매우' 짧다는 것입니다

몇번 실험을 해보니 잡아 내긴 합니다만 그게 언제가 될지 모르는 점이 큰 문제입니다

프로세스가 오래 남아있다면 캐치 하기 훨씬 쉽겠죠

계산을 하는 cgi 파일에서 프로세스가 오래 남도록 하고 싶다



숫자를 아주 크게 넣어줍시다

pid를 계속 읽어주면서 다른 창으로 헤더를 변조해서 보내면 됩니다

물론 이 헤더를 변조하는 작업은 proxy 툴이나 파폭을 이용하는 방법도 있겠습니다만..

아무튼

cgi 인자에 크으으으으게 넣어주고 인자를 변조해서 요청을 하고

 loadavg 에서 그 인자를 확인하게 됩니다




답이 뭔지는 다 보이시죠?

항상 좋은 문제 내주시는 beist lab 분들께 감사를!



P.S 소주 150병이면 당신도 엘리트!

'WarGame' 카테고리의 다른 글

[ Python Challenge ] level6 풀이  (0) 2010.03.25
[ CodeGate 2010 ] Challenge 11 풀이  (0) 2010.03.19
[ Codegate 2010 ] Chanllenge 1 풀이  (2) 2010.03.17
[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
[Python Challenge] level5 풀이  (2) 2010.03.11
[Python Challenge] level4 풀이  (0) 2010.03.10
Posted by LinkC

2010.03.16 10:20 WarGame


Padocon 의 시스템 쪽 문제로군요

물론 문제를 입수하진 못했고 어떤 식으로 문제가 이루어졌는지만

파악 하고 있습니다

자세한 풀이는 http://nibbles.tuxfamily.org/?p=775 에 올라와 있군요

프랑스어로 짐작되는 글이지만 -,.-

풀이 보는데는 지장이 없습니다

어셈블리어는 만국 공통어라 편하군요 :D

이번 포스팅은 이런 방법도 있구나~ 하는 걸 소개 하기 위함입니다

먼저 문제 소스는




보편적인 BOF 취약점 소스로군용

처음 봤을땐

RTL로 될 것 같았는데 생각해보니

Libc 크기가 16MB 이하라서 앞에 널 바이트가 들어가버리게 되는군요

그렇다면 Fedora Core 4에서 썼던

Ret Execl Overflow 는 어떨 까요

[ 이에 관한 문서는 http://linkc.tistory.com/entry/26-kernel-에서의-BOF 에서 확인 하실수 있답니다 :D ]

execl 함수에 접근하는 것은 좋으나 

그 폴더엔 쓰기 권한이 없어서

symbolic link 로 연결해 주는 것도 곤란합니다

그 때 발견한게 저 프랑스 친구가 쓴 글인데요

시나리오는 간단합니다

스택 값을 하나씩 쫓아올라가서

argv[0] 의 값을 execl 함수로 바꿔버리는 거죠

그렇게 되면 인자 전달에 있어서 고민 할 이유도 없고 말입니다





여기 보이는 stack 값에서 쭉쭉 위로 올라가면 된다는 거죠



이 때 이용하게 되는게 ret 명령어 입니다

execl 함수 값을 argv[0] 값에 넣어주면

나머지 인자는 주르륵 execl 로 타고 들어가는 겁니다

argv[0] 값 까지 ret으로 박아넣고 나머지는 execl 인자를 넣으면 되겠죠

자세한 결과는 위 링크를 타고 들어가서 보시면 됩니다

간단하지만 확실한 방법이죠 음음

기억도 되살리고 배운것도 있는 좋은 경험이었네요  :D

'WarGame' 카테고리의 다른 글

[ CodeGate 2010 ] Challenge 11 풀이  (0) 2010.03.19
[ Codegate 2010 ] Chanllenge 1 풀이  (2) 2010.03.17
[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
[Python Challenge] level5 풀이  (2) 2010.03.11
[Python Challenge] level4 풀이  (0) 2010.03.10
[Python Challenge] level3 풀이  (0) 2010.03.09
Posted by LinkC

2010.03.11 10:19 WarGame




문제 설명은 갈수록 간결해지는군요

소스를 봐보니


주석처리된 힌트와

<peakhell src="banner.p"/>

가 보입니다

링크 타고 들어가보면 알수 없는 문자들이 한참 나오는군요

저번 문제들처럼 조건에 맞는 문자들만 골라내는 건가 하는 생각도 드네요

그럼 다음 힌트를 봅시다

peak hell sounds familar?

이건 뭐... 순전히 말 장난인데

'peak hell' 이 발음을 가지고 정확한 스펠링의 모듈명을 찾기란 한글을 사랑하는 저에겐 다소 어려워보입니다

분명 모듈 이름일 것이라고 생각해서

p 로 시작되며 peak hell 가 비슷한 발음을 가지고 있는

모듈을 찾아보니

'pickle' 을 발견했습니다

이 모듈은 python의 object를 serialize 하는데 쓰인다고 합니다

리스트나, 튜플 등을 통째로 저장할때 쓰인다는 말이죠

대략 저 알 수 없는 문자열들은 serialize 된 것이고

우리는 그 문자열을 다시 de-serialize 하면 됩니다




자 그럼 답이 쨘

....



매우 아름다운 광경이 펼쳐집니다

단순히 하나의 리스트나 튜플이 아닌모양이군요

일단 2중 리스트이고, 안쪽 리스트는 다시 크기 2의 튜플들로 채워져있습니다

이게 대체 무슨 말인고 ...

유심히 보니 안쪽 리스트에서 튜플의 2번째 인자들의 총합은 95입니다

공백과 # 으로 이루어져 있고 그 공백과 #은 한 튜플 내에서 항상 번갈아 가면서 등장하구요

대략 튜플의 첫번째 인자는 문자, 두번째 인자는 그 문자가 반복되는 횟수 라고 추측할 수 있겠죠

즉, 각 리스트 마다 한줄을 출력하겠고

그 리스트는 튜플 값으로 구성됩니다

예를 들어 ('#',5),(' ',1),('#',2) 라고 하면

##### ##

가 될 것입니다

이를 코드로 짜보면



cmd 창으로 해보면 잘려서 알아보기가 힘드므로

Python shell을 이용해서 실행하는걸 추천해드립니다







'WarGame' 카테고리의 다른 글

[ Codegate 2010 ] Chanllenge 1 풀이  (2) 2010.03.17
[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
[Python Challenge] level5 풀이  (2) 2010.03.11
[Python Challenge] level4 풀이  (0) 2010.03.10
[Python Challenge] level3 풀이  (0) 2010.03.09
[Python Challenge] level2 풀이  (0) 2010.03.05
Posted by LinkC

2010.03.10 14:14 WarGame




페이지 상에 씌인 말은 아무것도 없습니다

소스를 봐보면

<!-- urllib may help. DON'T TRY ALL NOTHINGS, since it will never end. 400 times is more than enough. -->

라고 주석처리가 되어있군요

저 사진에는 링크가 걸려 있구요

들어가보면

해당 페이지에 nothing 이라는 변수에 12345라고 인자가 주어져있습니다

그리고 내용은

and the next nothing is 92512

92512 로 인자를 다시 주고  들어가면 다음 숫자가 나오구요

대략 어떻게 해야 할지 감이 오시나요?

페이지에 뿌려주는 값을 읽어 들여서 다시 인자로 주고

요청하는 방식이면 되겠군요

urllib 모듈을 쓰는게 좋을 거이고, 400번이면 충분하다고 합니다

bruteforce는 하지 않는게 신상에 좋아보이는군요 :D

urllib 를 참조해봅시다

먼저 특정 url 의 응답을 긁어와야합니다

urlopen 함수가 적절해보이는군요



응답은 파일 처리 할때와 같은 형식으로 처리해야 하는거 같군요

and next nothing is...

이 문자열이 나오지 않는 부분에서 멈추게 하고 반복해서 요청합니다





그러면 답이 쨘

읭?

Yes. Divide by two and keep going.

가 답은 아니겠죠?

2로 나누고 계속 하랍니다

소스 코드를 수정해줍니다




이번에야 말로 답이 쨘

'WarGame' 카테고리의 다른 글

[ Padocon 2010 ] Warmup 100  (0) 2010.03.16
[Python Challenge] level5 풀이  (2) 2010.03.11
[Python Challenge] level4 풀이  (0) 2010.03.10
[Python Challenge] level3 풀이  (0) 2010.03.09
[Python Challenge] level2 풀이  (0) 2010.03.05
[Python Challenge] level1 풀이  (0) 2010.03.05
Posted by LinkC

2010.03.09 14:16 WarGame




소스를 보니 2번처럼 잔뜩 문자들이 있군요

2번과는 다른 조건이 주어졌지만 특정 조건을 만족하는 문자들을

찾는다는 목표는 동일합니다

조건이 상당히 까다로워지긴 했지만요

음..

예를 들면 AAAbAAA 이런식이라면 b가 바로

우리가 찾는 문자가 되겠죠

무식하게 일일히 찾는 방법도 있겠습니다

효율이 안좋긴 하지만 매우 직관적이죠




이러고 끝내기는

편한 방법을 두고 돌아가는것 같아서 다른 방법을 모색해봤습니다

분명 어딘가 힌트가 있을 것이라고 생각했는데

마침 페이지의 제목이 re 라는게 눈에 띕니다

혹시나 해서 python re 라고 구글링을 해보니

제대로 짚은거 같군요

Regular Expression  정규표현식의 준말이군요

re 라는 모듈이 있고 그 함수 중에 우리가 원하는 함수를

찾아야겠죠

제가 선택한 함수는 Findall 입니다

일단 이 함수를 사용하기 위해서는 Python 정규표현식을 알아야하는데

kukuta 님의 블로그에서 퍼왔습니다

http://kukuta.tistory.com/4 


반복 메타문자

문자

의미

*

0회 이상 반복

ca*t => ct, cat, caat, caaat, …

+

1회 이상 반복

ca+t => cat, caat, caaat

?

0회 혹은 1

ca?t => ct, cat

{m}

m회 반복

ca{2}t => caat

{m, n}

m회부터 n회까지 반복

ca{2,4}t => caat, caaat, caaaat



최소 매칭

기호

의미

*?

* 와 같으나 문자열을 최소로 매칭한다.

+?

+ 와 같으나 문자열을 최소로 매칭한다.

??

? 와 같으나 문자열을 최소로 매칭한다.

{m, n}

{m,n}와 같으나 문자열을 최소로 매칭한다.



매칭
매타 문자

메타 문자

의미

.

개행 문자를 제외한 모든 문자와 매칭 된다. re.DOTALL 플래그가 셋팅되어져 있다면 줄바꿈 문자 까지도 매칭 대상에 포함된다.

^

문자열의 시작과 매칭된다.

re.MULTILINE 모드에서는 각 라인의 시작과 매칭된다.

[] 메타기호 안에서는 반대의 문자열을 취한다

) [^a-zA-Z0-9] 모든 알파벳과 숫자를 제외한 것 들과 매칭된다

$

문자열의 마지막 또는 문자열 끝의 개행 문자와 매칭되며, MULTILINE 모드 역시 개행 문자의 앞까지 매칭된다. ‘foo$’가 오직 foo 매칭되는 것과는 반대로 foo foo foobar 다 매칭된다. 흥미로운 것은 foo.$ ‘foo1\nfoo2\n’에서 찾는다면 foo2는 매치가 되지만 foo1MULTILINE 모드에서만 매칭이 된다는 것이다.

[]

문자 집합을 나타낸다. [abc]‘a’, ‘b’, ‘c’ 문자 중 하나를 의미한다. [a-c]와 같이 나타낼 수도 있다.

|

a|b 는 해당 문자가 ‘a’이거나 ‘b’라는 뜻이다.

()

규식을 그룹으로 묶는다. 이것은 match 또는 search를 통해 리턴되는 Match 오브젝트의 group를 호출할 때 사용된다.




이스케이프
문자

문자

설 명

\\

역슬래쉬 문자

\d

모든 숫자와 매칭된다 [0-9]

\D

숫자가 아닌 모든 문자와 매칭된다 [^0-9]

\s

모든 화이트 스페이스 문자와 매칭된다 [\t\n\r\f\v]

\S

화이트 스페이스가 아닌 모든 문자와 매칭된다. [^\t\n\r\f\v]

\w

모든 숫자 또는 문자와 매칭된다. [a-zA-Z0-9]

\W

숫자 또는 문자가 아닌 모든 문자와 매칭된다 [^a-zA-Z0-9]

\b

단어의 경계를 나타낸다. 단어는 영문자 혹은 숫자의 연속 문자열로 가정한다.

\B

\b의 반대로 단어의 경계가 아님을 나타낸다.





여기서 우리가 쓸 표현식은

[] 와 {} 정도가 되겠군요

정규식을 완성시키면


[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]
 
가 되겠고  우리가 원하는 부분은 저 소문자 부분이니 괄호를 씌워주면 되겠죠
 
거기에 결과가 한글자가 아닐테니 Join 으로 통합 시켜주면 완성입니다
 
또한 정규식 부분은 부정을 의미하는 ^을 첨가해서
 
[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]로 나타낼 수도 있겠습니다
 
소스 코드 보면 정말 너무 간단하죠
 
파이썬 참 대단한 언어라고 생각합니다 :D
 

'WarGame' 카테고리의 다른 글

[Python Challenge] level5 풀이  (2) 2010.03.11
[Python Challenge] level4 풀이  (0) 2010.03.10
[Python Challenge] level3 풀이  (0) 2010.03.09
[Python Challenge] level2 풀이  (0) 2010.03.05
[Python Challenge] level1 풀이  (0) 2010.03.05
[ Padocon 2010 ] Crackme 100 Breakme 풀이  (0) 2010.02.28
Posted by LinkC

2010.03.05 19:06 WarGame

level1에 이어서

level2 입니다



Page Source에 있다고 대놓고 힌트를 주는군요

힌트를 보면

특수문자들이 매.우.많.이 주석처리가 되있는거 볼 수 있습니다

눈 빠지죠

일단 주석 처리된 다음 힌트 부분을 보면

문자를 걸러내라고 합니다

알파벳 문자를 제외한 다른 문자들은 제거해버리기만 하면

답이 쨘 하고 나오겠죠

음 그렇게 어렵진 않은거 같습니다

일단 뽑아내야 하는 원본 덩어리가 워낙 길어서

일단 파일로 저장한 다음에 그 파일을 대상으로

문자들을 추출하는 방식을 썼습니다





풀고 나서 보니 다른 사람들이 푼 답들을 볼 수 있었는데

정말 다양한 방법들이 있더군요

멋집니다 :D
 

'WarGame' 카테고리의 다른 글

[Python Challenge] level4 풀이  (0) 2010.03.10
[Python Challenge] level3 풀이  (0) 2010.03.09
[Python Challenge] level2 풀이  (0) 2010.03.05
[Python Challenge] level1 풀이  (0) 2010.03.05
[ Padocon 2010 ] Crackme 100 Breakme 풀이  (0) 2010.02.28
Vortex level3 풀이  (0) 2010.02.20
Posted by LinkC

2010.03.05 18:44 WarGame

전부터 몇번 풀리라 마음은 먹었는데

이제서야 풀어보게 됬군요 -.-

아무튼 Python에 더 익숙해지고 싶어서

하나 하나 풀어보기로 했습니다

넌센스 문제도 많아 머리 식히기에 괜찮은 문제 같더군요




의미를 알수 없는 문자열이 나열되어 있고 노트에는

K -> M
O -> Q
E -> G

가 적혀있습니다

그러니까 특정 규칙을 통해 저 문자열을 제대로 나타내야 하는게 관건이겠죠

아마 완전한 문장이겠죠

위의 규칙 . 그리고 첫번째 문자가 g

감이 오시나요?

영어 문장 중에 한글자로서 문장 가장 앞에 나올수 있는게 그렇게 많지는 않죠

거기에 기존 문자보다 2만큼 큰 변환 문자

g에서 2만큼 떨어진 문자는 i 가 있습니다

확인도 할겸 좀 더 분석해볼까요?

fmnc -> hope

맞는거 같군요!

일일히 손으로 하기는 모양새가 좋지 못하니 간단한 코딩을 통해 풀어봅시다 :D

주의점은 문자만 바꾸는 것이겠죠. 공백이라던가 온점 등은 변경하지 않는것이 좋아보이는군요

또한 y나 z 의 경우는 각각 a 와 b로 변경해준다는 점~





이 문자열을 풀어 내면

손으로 풀질 않았길 바란다며 maketrans 함수를 추천한답니다

이를 이용해서도 한번 풀어봅시다

maketrans 함수는 특정 문자를 변경해줄 수 있으며 이 규칙을 지정해 줄 수 있는 함수인걸

구글링을 통해 쉽게 알아낼 수 있었습니다



동일한 결과가 나오는군요 :D

어때요 참 쉽죠?


'WarGame' 카테고리의 다른 글

[Python Challenge] level3 풀이  (0) 2010.03.09
[Python Challenge] level2 풀이  (0) 2010.03.05
[Python Challenge] level1 풀이  (0) 2010.03.05
[ Padocon 2010 ] Crackme 100 Breakme 풀이  (0) 2010.02.28
Vortex level3 풀이  (0) 2010.02.20
Vortex level2 풀이  (0) 2010.02.16
Posted by LinkC

2010.02.28 19:59 WarGame


지난번에 Padocon CTF 경기가 있었습니다

제가 참가하진 못했지만 문제는 쉽게 구할수 있더군요 '-'

그래서 구한 문제들을 한번 풀어보았습니다




Check the Value 버튼을 클릭하면

값을 검증한뒤

메세지 박스를 하나 띄웁니다

그 값을 검증 하는 부분을 찾아서

우회하면 답이 나오 겠죠

검증 하는 부분을 찾는 방법에는

메세지 박스 위로 쭉 trace 하며 찾는 방법과

사용자가 입력한 값을 T search 등을 이용해 메모리에서 찾아서 BP를 건다음에 그곳에서 부터 진행하는 방법

등이 있겠습니다

아, 간단한 안티 디버깅 부분이 있습니다



code 영역 초반에 보이는 부분입니다

위 스샷은 제가 이미 수정한 부분이구요

현재 실행된 프로세스 중에 ollydbg.exe 가 있는지를 검사하는 간단한 안티 디버깅 루틴이군요

문자열만 살짝 바꿔주면 정상적인 디버깅이 가능해집니다 :D




자 그럼 계속해서 

검증 루틴을 찾아보면




위 SendMessageW 에서는 각  슬라이더에서 값을 윈도우로부터 받아옵니다

리턴 값을 보면 각각의 값이 기록되있는걸 볼 수 있죠

그리고 IMUL 부분

모두 곱한다는 의미죠

다 곱해서 나온 값이 16진수로 6B77 , 그러니까 27511 이군요

이 값과 비교해서 맞으면 정답 메세지를 출력하겠죠

우회해봅시다



정답이라고 보기엔 너무 규칙성 없는 문자열이네요

모두 곱한 값을 체크 한다음에

사용자가 입력한 값을 기준으로 문자열을 생성하는 모양입니다

그 루틴을 찾아도 우리가 원하는 문자열이 무엇인지 모르기 때문에

세 수의 곱이 27511 인 값을 찾는게 해답을 찾는 방법이죠

끝자리가 1이니 손으로 찾는 것도 어렵진 않겠습니다만

간단히 코드를 짜봅시다 :D


어때요, 참 쉽죠?


'WarGame' 카테고리의 다른 글

[Python Challenge] level2 풀이  (0) 2010.03.05
[Python Challenge] level1 풀이  (0) 2010.03.05
[ Padocon 2010 ] Crackme 100 Breakme 풀이  (0) 2010.02.28
Vortex level3 풀이  (0) 2010.02.20
Vortex level2 풀이  (0) 2010.02.16
Vortex level1 풀이  (0) 2010.02.10
Posted by LinkC
이전버튼 1 2 3 4 5 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday42
Today26
Total328,587

달력

 « |  » 2019.5
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

최근에 받은 트랙백

글 보관함


. .