1. 보호기법 확인
2. 과정
password가 매 실행마다 random으로 결정되는데 그 값을 출력해주지 않는다.
근데 password를 입력했을 때 이 password 변수의 값과 일치해야지 flag 파일 내용이 출력된다.
근데 이름을 buf 변수에 입력받고 출력할 때 그냥 printf(&buf)로 출력해서 format string bug 취약점이 존재한다.
따라서 이름을 입력받을 때 password의 주소를 알 수 있으므로 FSB를 사용해서 password 값을 leak하고,
nptr 변수에 패스워드를 입력받을 때 이 leak 한 값을 줘서 flag가 출력되도록 한다.
$를 사용하면 %n 전까지의 정확한 위치를 알지 않아도 구할 수 있다.
payload를 pay = p32(password_addr) + "%10$s%n" 으로 주면, password 주소 위치인 %s로 password값이 출력된다.
4바이트이므로 leak해서 받은 password의 길이 4만큼 잘라서 password 변수에 저장하고 unpack한다.
패스워드를 입력하고 atoi 함수로 password 값과 비교하므로 str 형으로 변환한다.
[HITCON 2016] SleepyHolder (0) | 2020.01.08 |
---|---|
[HITCON-Training] craxme (0) | 2020.01.02 |
[Codegate2018] BaskinRobins31 (0) | 2020.01.01 |
simple_heap (0) | 2019.12.21 |
[TAMU 2019] pwn3 (0) | 2019.08.23 |