▲ LOB 4번 문제. goblin -> orc 문제이다. orc.c와 orc 파일이 존재하는데, 힌트에 EGG hunter라고 쓰여있다.
더 자세히 알아보자.
▲ orc.c 코드이다. buffer를 40만큼 할당해 주었으나, egghunter부분에서 environ즉 환경변수 부분을 memset으로 모두 지워준다. 따라서 환경변수에 무슨 값을 넣던 모두 사라지게 된다.
그리고 아래 if문에서는 첫번째 인자값의 48번째가 0xbf인지 아닌지 체크한다.
따라서 현재까지 조건은 '환경변수'를 이용한 공격이 사용 불가하며, 입력한 인자값 중 48번째 값이 '0xbf'이어야 한다.
▲ buf[44]안에 쉘 코드를 넣어야 하니 조금 좁은 감이 있다. 따라서 우리는 buffer안에 shellcode를 넣는 것이 아닌
buffer 밖에 shellcode를 넣어 공격을 실행한다.
▲ 메모리를 계산해 보자. buf가 40만큼의 칸을 가지며 sfp가 4만큼의 칸을 가지므로 ret까지의 거리는 44가 된다.
따라서 nop*44 + shellcode address + shellcode를 입력해 주면 된다.
▲ 근데 공격해보니 segmentation fault (core dumped)가 뜬다. gdb로 볼 때랑 메모리 주소가 바뀌어서 그렇다.
gdb -q -c core 명령어로 core dumped를 확인하여 메모리 주소를 다시 찾아 준다.
▲ 다시 알아낸 주소로 공격하면 공격 성공.
'System > LOB' 카테고리의 다른 글
6. wolfman -> darkelf (0) | 2019.04.26 |
---|---|
[LOB] 5. orc -> wolfman (0) | 2019.04.26 |
[LOB] 3. cobolt -> goblin (0) | 2019.04.26 |
[LOB] 2. gremlin -> cobolt (0) | 2019.04.26 |
[LOB] 1. Gate -> gremlin (0) | 2019.04.26 |