System/LOB2019. 4. 26. 19:09

 

▲ LOB 13번 문제. darkknight -> bugbear 문제이다. bugbear.c 와 bugbear 파일이 존재한다.

 

▲ RET를 덮었을 때 0xBF으로 시작하면 안된다고 한다. 즉, stack을 이용할 수 없다. 그럼 어떻게 해야할까?

▲ 힌트에도 나와 있었듯이 RTL (Return To Libc) 공격기법을 이용하면 된다.

RTL 공격 기법이란 모든 프로그램이 불러오는 공용 라이브러리에 있는 함수를 이용해 공격하는 것이다.

이중에서 우리는 system()함수를 이용하여 /bin/sh를 실행시킬것이다.

▲ gdb 에서 print system으로 system함수의 주소를 알아내고, 간단한 c코드로 /bin/sh의 문자열 주소를 알아낸다.

 system함수는 인자값이 두개인데 그 중 뒤의 인자값에 넣어주면 된다.

▲ 따라서 우리는 RET에 system함수 주소 + NOP[4] + /bin/sh 문자열 주소를 입력해 주면 된다.

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

[LOB] 15. giant -> assassin  (0) 2019.04.26
[LOB] 14. bugbear -> giant  (0) 2019.04.26
[LOB] 12. golem -> darkknight  (0) 2019.04.26
[LOB] 11. skeleton -> golem  (0) 2019.04.26
[LOB] 10. vampire -> skeleton  (0) 2019.04.26
Posted by BadSchool
System/LOB2019. 4. 26. 19:03

 

▲ LOB 12번 문제. golem -> darkknight 문제이다. darkknight.c과 darkknight 파일이 존재한다.

▲ 소스코드가 많이 간결해 졌다. argv[1]을 problem_child 인자값으로 넘겨 준다.

그런데 이번엔 strcpy가 아닌 strncpy로 BOF를 방지한다. 이럴 땐 어떻게 해야 할까?

▲ 바로 FPO(Frame Point Overwrite) 공격 기법을 사용하면 된다.

▲ 모든 함수들은 함수 프롤로그와 함수 에필로그로 구성되어 있어 스택 프레임을 유지하는데 사용한다. 우리는 이 특성을 이용해 SFP를 변조해준다.

▲ 원래의 SFP값은 0xbfffa94. 우리는 이를 이 뒤인 0xbfffa90을 이용한다. 이렇게 진행을 하게 되면 함수 에필로그 과정에서 다시 우리 쉘코드의 시작 주소로 이동하게 된다.

 

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

[LOB] 14. bugbear -> giant  (0) 2019.04.26
[LOB] 13. darkknight -> bugbear  (0) 2019.04.26
[LOB] 11. skeleton -> golem  (0) 2019.04.26
[LOB] 10. vampire -> skeleton  (0) 2019.04.26
[LOB] 9. troll -> vampire  (0) 2019.04.26
Posted by BadSchool
System/LOB2019. 4. 26. 18:58

 

▲ LOB 11번 문제. skeleton -> golem 문제이다. golem.c와 golem 파일이 존재한다.

▲ 스택을 buffer+48에서 0xBFFFFFFF 까지 전부 날려버린다.

▲ buffer 안에도, buffer 밖에도, 이름에도 전부 공격 불가능이다.

그럼 도대체 어떻게 풀란 말인가??

▲ 구글님은 말해주었다. 공유 라이브러리와 LD_PREDLOAD를 사용하라고..

▲ 프로그램은 원래 libc.so.6을 불러오게 되는데, 이것을 내가 임의로 만든 파일로 바꿔치기 해 주면 된다.

▲ 따라서 아무 내용 없는 파일을 만든 뒤 공유 라이브러리에 올려둔다. 그리고 LD_PRELOAD에 export하고 스택을 확인해 보면 우리가 만든 쉘 코드가 존재한다.

▲ 공격은 아무 것도 없이 RET[4]에 shellcode 입력 주소만 입력해 주면 된다.

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

[LOB] 13. darkknight -> bugbear  (0) 2019.04.26
[LOB] 12. golem -> darkknight  (0) 2019.04.26
[LOB] 10. vampire -> skeleton  (0) 2019.04.26
[LOB] 9. troll -> vampire  (0) 2019.04.26
[LOB] 8. orge -> troll  (0) 2019.04.26
Posted by BadSchool