이번엔 uaf관련 문제인것 같다. 

코드가 C++로 작성되었다.

우선 중요한 부분은  Human class의 give_shell()과 main문 인것 같다. 해석해보면 1번으로 소개를 하고, 2번으로 원하는 값을 동적할당 할 수 있으며, 3번으로 해제가 가능한 것 같다. 일단 선언되어있는 m과 w를 해제해주고, 2번으로 give_shell()의 주소를 잘 올리면, 1번으로 해당 주소를 실행시켜 쉘을 얻을 수 있을 것 같다.

 

우선 쉘코드를 보기 위해 switch 1번 부분 어셈을 봐준다. 참고로 글이 깨져서 나옴으로 'set print asm-demangle on' 명령어를 써주자.

코드를 보면 0x0000000000400fcd주소에 break를 걸어주면 될꺼같다.

`ni`로 진행을 해주다 rax에 0x8을 더하기 직전에 멈춘다.

현재 rax에 쓰여있는 주소를 봐주고 해당 주소가 가르키는 값을 보면 0x0040117a를 가르킨다. 그럼 0x401578은 0x004012d2를 가르키는 것을 알 수 있다. 각각의 주소를 들여다 보면 0x0040117a에 우리가 원하는 give_shell()의 주소가 써있는 것을 알 수 있다. 

그렇다면 우리는 0x12b4c50에 있는 0x00401570을 0x00401568로 덮어야 한다.

이런식으로 하면 쉘이 따인다.

'war game > pwnable.kr' 카테고리의 다른 글

[Toddler's Bottle]-flag  (0) 2019.07.05
[Toddler's Bottle]-bof  (0) 2019.07.05
[Toddler's Bottle]-collision  (0) 2019.07.04
[Toddler's Bottle]-fd  (0) 2019.07.04

+ Recent posts