'orc'에 해당되는 글 2건

  1. 2019.04.26 [LOB] 5. orc -> wolfman
  2. 2019.04.26 [LOB] 4. goblin -> orc
System/LOB2019. 4. 26. 18:26

 

▲ lob 5번 문제. orc -> wolfman으로 넘어가는 문제이다. wolfman.c와 wolfman 파일이 존재한다.

힌트로는 egg hunter & buffer hunter가 있다. 더 자세히 알아보자

▲ 기존에 4번에 존재했던 egghunter 이외에 buffer hunter가 추가되었다. memset으로 buffer에서 40만큼을 0으로 만들어 준다. 

▲ 따라서 우리는 환경변수, buffer안에 shellcode 넣기가 불가능 하다. 해당 문제는 이전과 똑같이 진행해 주면 된다.

▲ 이전 문제와 같은 방법

'System > LOB' 카테고리의 다른 글

[LOB] 7. darkelf -> orge  (0) 2019.04.26
6. wolfman -> darkelf  (0) 2019.04.26
[LOB] 4. goblin -> orc  (0) 2019.04.26
[LOB] 3. cobolt -> goblin  (0) 2019.04.26
[LOB] 2. gremlin -> cobolt  (0) 2019.04.26
Posted by BadSchool
System/LOB2019. 4. 26. 18:21

 

▲ 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
Posted by BadSchool