본문 바로가기

시스템해킹

[드림핵] out_of_bound 풀이

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