[pwnable.xyz] misalignment write up
pwnable.xyz 4번째 문제 misalignment 이다.
실행 해보면 아래와 같다.
Analyze
이 문제에 사용자 정의 함수는 아래와 같다.
위 바이너리 파일을 peda-gdb 로 열어 main 함수의 어셈블리어를 보자.
아래 사진은 main 함수의 일부분 이다.
위 어셈블리어 코드를 pseudo 코드로 나타내면 아래와 같다.
6번째 줄에서 Arbitrary overwrite 가 가능한 취약점이 존재하는 것을 볼 수 있다.
사용자가 입력한 3개의 인자를 잘 조작하면 Arbitrary overwrite가 가능하다.
아래 어셈블리어는 main 함수의 일부분 이다.
rax에 &((rbp-0xa0) + 0xf ) 주소를 넣고
rdx에 rax 주소의 값을 넣는다.
rdx 와 0xb000000b5 비교하여 같으면 win 함수를 실행하는 구조이다.
그렇다면, Arbitrary overwrite 취약점으로 (rbp-0xa0) + 0xf 주소에 있는 값을 0xb000000b5 으로 overwrite 한다면 문제가 풀리게 된다.
(rbp-0xa0) + 0xf 이 주소를 알기 위해 main+242에 breakpoint를 걸고 실행해준다.
RAX에 0x7fffffffe4df 라는 주소가 저장되어 있다. 이것이 (rbp-0xa0) + 0xf의 주소이다.
(이 주소에는 0xdeadbeef 라는 값이 저장되어 있다.)
위에서 봤던 pseudo 코드에서 4번째 줄 rbp+rax*8-0x98 이 값이 0x7fffffffe4df 가 되면 된다.
이때의 rbp 값은 디버깅으로 0x7fffffffe570 으로 확인했다.
즉,
0x7fffffffe570 + rax*8 - 0x98 = 0x7fffffffe4df
식이 성립하려면 rax 값이 10진수로 22.875 이어야 한다.
실수형이 나왔기 때문에 다른 주소를 이용해야 한다.
다른 방법으로는 0x7fffffffe4df 이 주소를 두 부분으로 나누어 값을 overwrite 하면 된다.
0x7fffffffe4d8 이 주소로 접근해보면 아래와 같다.
0xef00000000000000 이 값을 0xb500000000000000 으로 바꾸면
0x00000000deadbeb5으로 바뀌게 된다.
마찬가지로 0x7fffffffe4e0 이 주소에 접근하면 0x0000000000deadbe 값이 출력이 된다.
이를 0x000000000b000000 로 바꾸면 0xb000000b5 이 값이 완성이 된다.
그럼 각각의 2개 식이 만들어 진다.
0x7fffffffe570 + rax*8 - 0x98 = 0x7fffffffe4d8
=> rax = 0 (int)
=> 최종 rax = 0 - 0x6 = -6
0x7fffffffe570 + rax*8 - 0x98 = 0x7fffffffe4e0
=> rax = 1
=> 최종 rax = 1 - 0x6 = -5
이렇게 scanf 함수에서 3번째 인자의 값이 -6과 -5 임을 구했다.
rdx는 아래 코드에 의해 각각 0xb500000000000000, 0x000000000b000000이면 된다.
0xb500000000000000 = -5404319552844595200
0x0000000000b00000 = 184549376
따라서 아래의 값을 순서대로 넣으면 된다.
rcx | rdx | rax |
0 | -5404319552844595200 | -6 |
0 | 184549376 | -5 |
Payload
from pwn import *
p = remote("svc.pwnable.xyz", 30003)
p.sendline("0 -5404319552844595200 -6")
p.sendline("0 184549376 -5")
p.interactive()
'🚩CTF' 카테고리의 다른 글
[pwnable.xyz] two targets write up (0) | 2020.01.02 |
---|---|
[pwnable.xyz] xor write up (0) | 2020.01.01 |
[pwnable.xyz] add write up (0) | 2019.12.28 |
[pwnable.xyz] sub write up (0) | 2019.12.28 |
[pwnable.xyz] Welcome write up (0) | 2019.12.26 |
댓글
이 글 공유하기
다른 글
-
[pwnable.xyz] two targets write up
[pwnable.xyz] two targets write up
2020.01.02 -
[pwnable.xyz] xor write up
[pwnable.xyz] xor write up
2020.01.01 -
[pwnable.xyz] add write up
[pwnable.xyz] add write up
2019.12.28 -
[pwnable.xyz] sub write up
[pwnable.xyz] sub write up
2019.12.28