writeup/해킹캠프CTF 2014

2014 동계 해킹캠프 미니 CTF SleepSleepSleep 문제 풀이

진모씨 2014. 2. 19. 15:29

strace ./SleepSleepSleep 으로 실행해보니까 nanosleep으로 30초나... 쉰다.


그냥 gdb로 보니까 sleep 함수 실행을 30초 하는 부분이 있다.

귀찮으면 gdb 열고 이렇게 하면 된다.


r

Ctrl+C를 누른다. 이러면 함수 주소가 로딩된다.

b sleep

r

y를 눌러서 강재 재실행 해준다.

이제 sleep에 브릭포인트가 걸린다.


Breakpoint 2, __sleep (seconds=0) at ../sysdeps/unix/sysv/linux/sleep.c:42

42 ../sysdeps/unix/sysv/linux/sleep.c: No such file or directory.


이렇게 걸리면 이제 인자를 조작해주면 된다.
몇번 더 걸리는데, 똑같이 해준다.
set *($esp+4)=0
(0초로 조작한다.)



풀이 2)

사실 나는 그냥 디스어셈블리로 main 함수 보고 mov edx, 30 이라고 되있는 부분 그냥 명령어를 수정했다.

이 명령어를 바이트 배열로 변환하면 BF 1E 00 00 00 이 된다. 헥스에디터로 열고 그냥 수정하면 될거라 생각했고 실제로 잘 먹혔다.

HxD로 열고 이렇게 하면 된다.


Ctrl+R 을 눌러서 바꾸기(&A) 창을 연다.

bf1e000000 를 검색 란에 넣고,

bf00000000 를 바꿀 텍스트 란에 넣고,

데이터 형식을 16진수 값으로 한 뒤 검색 방향을 전체로 선택한다.

그다음 모두 바꾸기를 누른 다음 저장 후 다시 실행해본다.

키가 잘 나온다. 바로바로..


풀이 3)


그냥 메모장으로 열기만 해도 키가 나온다.

끝의 한글자 'Y'가 안나온다!