2019. 3. 28. 20:59ㆍSystem Hacking/[LOB] Hacker School
안녕하세요!
오늘은 LOB 10번 문제
Vampire 문제풀이를 해보도록 하겠습니다!
문제의 소스코드는 아래와 같이 나와있습니다!
직전 문제와 바뀐 게 몇 개 있네요!
그치만 순서대로 주어진 조건을 살펴볼게요!
1) argument 개수는 2개보다 작으면 안된다!
2) egghunter라는 놈으로 환경변수를 못 쓰게 막는다
3) 입력값의 48번째 값이 \xbf이여야 한다(=스택으로 return 하세요)
4) argument[1]의 길이가 48보다 길면 안돼요!
5) 버퍼는 당연히 초기화 할꺼구요(=못써요 )
6) 이번에는 argv들도 모두 초기화 할꺼에요! (= argv[0] argv[1] argv[2] ... 모든 걸..)
솔직히 조건들을 봤을 땐 좀 절망적이였습니다
아니 argv[ ]들까지 초기화 시키면...
뭐 어디다가 쉘코드 넣으라고....
근데 일단은 메모리 초기화 했다고 해도
실제로 한번 메모리를 끝까지
까서 봐야겠죠?
무슨 건덕지라도 있을지...
스택상황을 봐야하는데
<main+368>에 breakpoint를 걸고!
(breakpoint를 main 중간에 걸어두고 스택을 확인했던 적이 있었는데,
leave 하기 직전이랑 스택상황이 다른 적이 있었어서
항상 leave직전의 스택을 확인합니다!! )
argument에는 그냥 아무값이나 주고 run 했습니다
어차피 argv[1]이나 buffer 다 초기화 되니까요...
어 근데 ebp 밑에 뭔가 좀 있네요..
이 친구들은 뭐지?
이중에 뭐 건질만한 거 없나?
이왕 이렇게 된거
스택 끝까지 확인해보죠!
그렇게 일일이
x/100s (메모리 주소 값)
노가다를 하다가
결국 맨 밑에서 월척을 했네요!
바로 이렇게 파일이름이 아래에 저장되어 있었습니다!
argv[ ]들은 모두 초기화 했는데,
기본적으로 파일이름까지는 건들지 않나 봅니다!
자 그러면 힌트는 뭐다?
뭐는 끝까지 안 바뀐다?
파일이름!!!
파일이름을 바꾸면 되겠죠?
저희가 앞선 문제들에서도 했듯이,
파일이름을 \x90과 쉘코드의 조합으로 넣고!
저희가 넣은 코드가 어디있는지
그 위치를 찾아서 ret 값에 넣으면 끝나겠네요!
payload
(파일이름에 \x90 * 50+25byte 쉘코드) + 더미 44개 + 파일이름 위치를 ret addr에 입력
그래서 아래와 같이 gdb에서
파일 위치를 찾아봤더니!
0xbfffff99에 있네요!
안 보이실까봐
맨 마지막 부분만 이렇게 가져왔습니다!
그럼 뭐 끝났죠!
파일이름이 0xbfffff99에 저장되어있으니!
ret address에 0xbfffff99를 주면 아래와 같이 payload가 완성됩니다!
그래서 아래와 같이
1) 파일이름을 0x90*50 + 25byte shellcode로 symbolic link를 만듭니다
2) argv[1]에는 더미 44개와 ret address 0xbfffff99!
그러면 아래와 같이 쉘이 따지고!
비밀번호도 얻을 수 있습니다!
고생하셨습니다!
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 13번 darkknight 문제풀이 (0) | 2019.04.02 |
---|---|
[어설픈] LOB 12번 golem 문제풀이 (0) | 2019.03.30 |
[어설픈] LOB 9번 troll 문제풀이 (0) | 2019.03.26 |
[어설픈] LOB 8번 orge 문제풀이 (0) | 2019.03.24 |
[어설픈] LOB 7번 darkelf 문제풀이 (0) | 2019.03.21 |