ID : wolfman
Passwd : love eyuna
- darkelf.c 내용을 확인
버퍼의 크기는 40이고, 코드의 내용은 위와 같다
- main 함수 디버깅
스택의 크기는 44 (buffer(40)+i(4))이므로 dummy값은 존재하지 않는다
sfp에서 40만큼 떨어진 거리에 buffer가 존재한다
- argv[1]의 길이가 48까지만 허용되므로 buffer(40) + sfp(4) + ret(4) =48만큼만 들어갈 수 있다
그러므로 쉘코드는 argv[1]에 들어가면 안된다
-> argv[1] 대신 argv[2]에 쉘코드를 넣고 argv[2]의 주소를 ret에 넣는 방법 사용
- argv[2]의 주소를 알아내기 위해 strcpy 다음 코드에 break point를 걸고 디버깅 창에서 다음과 같은 payload를 실행
48번째 문자가 "\xbf"여야하므로 일단 argv[1]에는 "\xbf"로 채워준다
- argv[2]의 주소를 알아내기 위해 esp를 본다
esp 주소값을 140 정도 뽑으면 위와 같이 41("A")가 나온다
이 중 한 주소를 ret에 넣으면 된다. (선택값 -> 0xbffffc24)
- payload 작성
- 결과
uid가 상승하고 비밀번호 확인 가능!
'Write Up > LOB' 카테고리의 다른 글
LOB #5 orc (0) | 2019.11.11 |
---|---|
LOB #4 goblin - argv[2] + NOP Sled이용 (0) | 2019.11.11 |
LOB #4 goblin - NOP Sled 이용 (0) | 2019.11.11 |
LOB #3 cobolt (0) | 2019.10.10 |
LOB #2 gremlin (0) | 2019.10.10 |