[pwnable.xyz] note(50 pts) :: Write-Up

두비니

·

2020. 10. 9. 16:03

 

이 글이 wargame 카테고리의 100번째 글이에요! 와아아아 더 열심히 하겠습니다ღ'ᴗ'ღ

 

 

Note taking 101

 

 

 

일단 문제분석을 해봅시다.

 

 

 

메뉴는 1이면 edit_note()를, 2이면 edit_desc()를, 3이면 종료하네요.

각각 edit_note()와 edit_desc()를 좀 더 봅시다.

 

 

먼저 edit_note()입니다. 

note의 길이를 입력받고, buf에 해당 메모리 만큼 malloc으로 동적할당을 받은 뒤, 입력값을 전역변수 s에 복사합니다.

strncpy()를 한 뒤에는 buf는 free()시키네요.

 

 

 

다음은 edit_desc()입니다. 만약 buf에 주소가 할당되어있지 않는 경우, 0x20만큼의 메모리를 동적할당 해주고, buf에 값을 read()를 통해 읽어오네요.

 

 

마지막으로 win()함수가 있네요. 당연히 이 함수의 주소를 ret에 집어넣든, GOT overwrite를 하든 해야겠죠?

 

 

이건 변수들 사이의 상태를 보고 시나리오를 짜야할 것 같네요.

 

 

다음은 이 문제에서 쓰이는 변수들의 메모리 상황입니다. s와 buf변수 모두 전역변수이기때문에 bss영역에 있는 것을 볼 수 있고, 두 변수 사이간의 offset은 0x20으로, 충분히 edit_note()를 통해 buf까지 buffer overflow를 할 수 있는 상황입니다. 이걸 이용해서 GOT overwrite를 이용하려고 합니다.

 

 

GOT overwrite는 PIE가 걸려있지 않아야 하는데, PIE도 걸려있지 않아서 사용할 수 있겠네요.

자, 그러면 공격 시나리오는 다음과 같습니다.

 

 

시나리오

 

목적 : win()함수를 실행시키고자 함

방법 : GOT overwrite를 통해 printf()가 실행되었을 때 win()이 실행하게 하고자 함

           +) GOT overwrite는 edit_desc()안에있는 read()함수를 이용할 것임

 

시나리오 : 

1. edit_note()를 통해 buf까지 buffer overflow를 시킵니다. 이때, buf에는 printf의 got주소가 오도록 합니다.

2. edit_desc()를 실행시키고, 내용에 win()함수의 주소를 입력합니다.

3. 다시 main함수로 돌아오면, printf함수는 win함수의 주소로 got overwrite되었기때문에 printf대신 win이 실행되면서 flag가 얻어집니다.

 

 

참고로 GOT overwrite를 모르시는 분들은 찾아보고 옵시다. 저는 개인적으로 다음 두 글이 제일 잘 설명했다고 생각해요.

 

참고1) d4m0n.tistory.com/83

 

GOT Overwrite

GOT Overwrite란? GOT Overwrite는 Dynamic Link 방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할 때 사용되는 PLT & GOT를 이용하는 공격 기법이다. PLT는 GOT를 가리키고, GOT에는 함수의 실제 주소가..

d4m0n.tistory.com

참고2) bbolmin.tistory.com/75

 

GOT overwrite - GOT를 PLT로 덮는다??

GOT, PLT에 대한 설명 - PLT(Procedure Linkage Table), GOT(Global Offset Table) - 그럼 본론으로 .... 보통 GOT overwite를 하면 got주소를 plt주소로 덮어서 공격한다. ex) printf의 got를 system의 plt로 덮..

bbolmin.tistory.com

 

페이로드

 

그럼 페이로드 기릿

 

 

 

 

<<후배들한테 받은 질문들>>

 

1. 꼭 printf를 got overwrite를 해야하나요?

 

아니요! 어떤 함수든 상관없습니다. 대신 got overwrite해준 함수는 꼭 실행시켜주어야하겠죠?

 

 

2. 함수의 got는 어떻게 구하나요?

 

제가 써놓은글 있으니 이거 읽읍시다 ㅎㅅㅎ

dokhakdubini.tistory.com/295