1. 문제
소스코드가 상당히 심플하다.
gets() 를 통해 입력을 받고, printf() 를 통해 입력 받은 것을 출력한다.
그런데 gets 를 통해서 입력을 받을 때, 입력값 검증을 하지 않기에 bof 가 발생한다.
따라서 ret를 변경해주면 될 것 같다.
1. 환경 변수에 등록한 걸 이용
2. nop을 줘서 풀어도 될 듯함.
이번엔 환경 변수를 이용해 풀어보겠다.
이때, 코드에 권한을 상승하는 부분이 없기에 setruid 함수를 포함하는 41byte shellcode 를 환경변수에 등록해줘야한다.
2. 문제 해결 과정
환경 변수를 등록할 때 앞에 nop을 적당히 주는 것을 추천한다!
처음에 nop 을 주지 않았는데, 쉘이 잘 따지지 않았다.
컴파일 한 후 실행하면 환경 변수의 주소가 출력된다.
페이로드는 다음과 같을 것이다.
"A"*44 + 0xbffffc5a
3. 익스플로잇
다음과 같은 방법으로 쉘을 따도 된다.
ret( setruid 시작 주소 ) + ret (쉘 코드가 등록된 환경 변수) + 인자(3100) + 인자 (3100)
'Wargame > Hackerschool FTZ' 카테고리의 다른 글
[FTZ] 해커스쿨 FTZ level 18 (0) | 2021.04.13 |
---|---|
[FTZ] 해커스쿨 FTZ level 17 (0) | 2021.04.13 |
[FTZ] 해커스쿨 FTZ level 16 (0) | 2021.04.13 |
[FTZ] 해커스쿨 FTZ level 15 (0) | 2021.04.12 |
[FTZ] 해커스쿨 FTZ level 14 (0) | 2021.04.12 |