Try to be the expert.

Ainsetin's Hacking & PS & Math

Hacking/HackCTF

HackCTF gift Write-up

Ainsetin 2020. 1. 8. 12:41

이번엔 gift 문제를 풀어보겠다.

 

 

우선 바이너리부터 checksec 해보겠다.

 

 

이번엔 RELRO도 없다. NX bit는 기본으로 활성화되어 있다.

 

그럼 IDA로 바이너리를 까 보자.

 

main()

보니까 binsh의 주소와 system의 주소를 전부 다 주고 fgets로 s에 입력을 받은 뒤, 다시 한번 출력 후 입력을 받는다.

 

그런데 binsh에는 아무 값도 없는 것을 보아 내가 직접 저 부분에 "/bin/sh"을 집어넣어야 한다는 것을 알게 되었다.

 

굳이 안 넣고 그냥 libc에 있는 binsh 문자열 주소를 가져올 것이다.

 

fgets에서는 128byte를 입력받을 수 있지만, gets에서는 길이 제한이 없다. 따라서 gets에서 BOF를 터뜨릴 것이다.

 

앞의 fgets에서는 아무거나 넣고, 앞에서 system의 주소가 바뀌므로 leak을 하는 것이 좋겠다.

 

이제 gets의 주소를 알아야 되는데, libc_base를 구해야 정확한 주소가 구해진다.

 

libc-database로 libc를 찾아보자.

 

 

 

 

보니까 system의 주소의 하위 1.5byte는 940으로 고정되어 있어 libc를 찾을 수 있다.

 

 

찾았다. 따라서 system("/bin/sh")을 호출하면 되겠다.

 

이제 구해야 한 것들은 모두 구했다. 이제 exploit code를 작성해보자.

 

 

실행시켜보면...!

 

 

쉘을 실행하여 flag를 획득하였다!!

'Hacking > HackCTF' 카테고리의 다른 글

HackCTF pwning Write-up  (0) 2020.01.14
HackCTF Beginner_Heap Write-up  (0) 2020.01.13
HackCTF Look at me Write-up  (0) 2020.01.08
HackCTF RTL_Core Write-up  (0) 2020.01.07
HackCTF Random Key Write-up  (0) 2020.01.07