32bit에 canary, NX가 걸려있다.
문제파일
read함수로 name을 입력받고 scanf로 idx를 입력받은 뒤
system 함수로 command[idx]를 실행한다
name에 /bin/sh주소를 넣고 idx를 통해 command[idx]가
name을 가르키도록 만들면 flag를 얻을 수 있겠다
문제 풀이 과정
1. command와 name 주소찾기
2. payload 작성
3. 실행
1. 주소찾기
파일을 디버깅해 name과 command의 주소를 찍었다
name과 command에 값의 차이를 계산해 이용할 수 있다.
2. payload 작성
찾은 주소로 값의 차이를 계산해 32비트 포인터이기 때문에 4바이트이다
따라서 값의 차이를 4로 나누어 계산해주었다. (값은 19)
name에 /bin/sh주소와 name의 주소를 같이 넣었는데
그 이유는 idx를 입력하는 과정에서 값을 19를 넣는다면 name[0]인 4바이트를 실행하기에
/bin만 실행될 것이다 때문에 /bin/sh이 8바이트, 그다음 name주소를 name에 넣어
name의 인자인 command[19]에서 2를 더해 name의 주소를 실행해
결과적으로 /bin/sh를 system함수로 실행시킬 수 있다.
3. 실행
'시스템해킹' 카테고리의 다른 글
[드림핵] basic_exploitation_002 풀이 (0) | 2024.05.27 |
---|---|
[드림핵] Format String Bug 풀이 (0) | 2024.05.27 |
[드림핵] hook 풀이 (0) | 2024.05.19 |
[드림핵] oneshot 풀이 (0) | 2024.05.19 |
[드림핵] fho 풀이 (0) | 2024.05.19 |