이번엔 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 |