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'가 안나온다!
'writeup > 해킹캠프CTF 2014' 카테고리의 다른 글
2014 동계 해킴캠프 미니 CTF - 출제 실패한 문제 (0) | 2014.02.19 |
---|---|
2014 동계 해킹캠프 미니 CTF WinRev 풀이 (0) | 2014.02.19 |
2014 동계 해킹캠프 미니 CTF Optimize 풀이(python) (0) | 2014.02.19 |
2014 동계 해킹캠프 미니 CTF recovery 문제 풀이(python) (0) | 2014.02.19 |