HACKCTF - Handray

2020. 9. 3. 07:42CTF's Write-up

문제사진

 

리버싱 handray 문제이다.

리버싱이 평소 약점이라 더 많이 공부해야하는데 정말 어렵다.. 이번에도 시간이 좀 걸려서 풀었다.

 

ida

 

main 함수를 보면 다음과 같은데 역시 handray라서 코드를 보려고하면

 

코드사진

 

다음과 같이 많은 코드가 사라진 것 처럼 보인다.

main 화면을 보면 가장 왼쪽에 있는 "flag is %s"쪽으로 보내야 flag가 출력될 것 같지만 실제로 실행해보면

 

 

실행화면

 

이렇게 flag를 뛰어넘었다고하면서 가운데 함수로 빠지게 된다.

 

pdisas main

 

디스어셈블 해서 어셈블리코드를 보면 +19번째코드에서 분기로 빠지게 된다. 이부분을 조건에 맞게 해주면 flag를 출력해 줄 수 있을 것이다.

따라서 +15번째에 bp를 걸어서 실행시킨다음 [rbp-0x4] 를 0으로 바꿔주면 조건을 만족 시킬 수 있을 것이다.

 

 

bp 설정

 

bp설정하고

 

 

변수설정

 

이렇게 값을 바꿔주고 실행시키면

 

flag획득

 

이렇게 flag를 획득할 수도 있지만, 다른 분의 롸업을 살펴보다 비슷하지만 새로운 방법이라 이부분도 간략하게 포스팅 해보려고한다.

바로 jmp 주소를 변환시켜주는 것인데.

 

실행화면

 

main+19에서 bp를 걸고, RIP변수를 보면 main+19를 가리키고 있다.

 

pdiasa main

 

여기서 flag를 출력시켜주는 함수가 있는 곳인 main+75로 jmp를 시켜주면 되니, RIP를 조작해주면 될 것이다.

 

동작순서

 

이렇게 동작할테니 main+75면 코드 복호화를 진행한 것을 가지고 있기 떄문에 jle 문에서 flag출력쪽으로 올 것이다.

 

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