2020. 9. 3. 07:42ㆍCTF's Write-up
리버싱 handray 문제이다.
리버싱이 평소 약점이라 더 많이 공부해야하는데 정말 어렵다.. 이번에도 시간이 좀 걸려서 풀었다.
main 함수를 보면 다음과 같은데 역시 handray라서 코드를 보려고하면
다음과 같이 많은 코드가 사라진 것 처럼 보인다.
main 화면을 보면 가장 왼쪽에 있는 "flag is %s"쪽으로 보내야 flag가 출력될 것 같지만 실제로 실행해보면
이렇게 flag를 뛰어넘었다고하면서 가운데 함수로 빠지게 된다.
디스어셈블 해서 어셈블리코드를 보면 +19번째코드에서 분기로 빠지게 된다. 이부분을 조건에 맞게 해주면 flag를 출력해 줄 수 있을 것이다.
따라서 +15번째에 bp를 걸어서 실행시킨다음 [rbp-0x4] 를 0으로 바꿔주면 조건을 만족 시킬 수 있을 것이다.
bp설정하고
이렇게 값을 바꿔주고 실행시키면
이렇게 flag를 획득할 수도 있지만, 다른 분의 롸업을 살펴보다 비슷하지만 새로운 방법이라 이부분도 간략하게 포스팅 해보려고한다.
바로 jmp 주소를 변환시켜주는 것인데.
main+19에서 bp를 걸고, RIP변수를 보면 main+19를 가리키고 있다.
여기서 flag를 출력시켜주는 함수가 있는 곳인 main+75로 jmp를 시켜주면 되니, RIP를 조작해주면 될 것이다.
이렇게 동작할테니 main+75면 코드 복호화를 진행한 것을 가지고 있기 떄문에 jle 문에서 flag출력쪽으로 올 것이다.
이렇게 구할 수도 있다.
리버싱..흥미로운데 어렵다 :(
'CTF's Write-up' 카테고리의 다른 글
HACKCTF - Let'S get it ! Boo*4 (0) | 2020.09.07 |
---|---|
HackCTF - Unexploitable #2 (0) | 2020.09.06 |
[보호]HACKCTF - Cookie (0) | 2020.09.01 |
HACKCTF - Yes or no (0) | 2020.08.27 |
HACKCTF - Strncmp (0) | 2020.08.27 |