'파도콘 문제풀이'에 해당되는 글 2건

  1. 2010.03.16 [ Padocon 2010 ] Warmup 100
  2. 2010.02.28 [ Padocon 2010 ] Crackme 100 Breakme 풀이

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.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 이전버튼

블로그 이미지
LinkC

태그목록

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

공지사항

Yesterday35
Today61
Total331,081

달력

 « |  » 2019.8
        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

최근에 받은 트랙백

글 보관함


. .