Write-Up/LOB 5

LOB: orc->wolfman

1. wolfman.c 분석 - argv[1][47] == "\xbf" 을 지키도록 페이로드 작성해야 함 - memset(buffer, 0, 40) -> 버퍼에다 오버플로 불가, argv[2]에 쉘코드 삽입 예정 먼저 write-up을 올린 troll과 비슷하게 페이로드를 작성할 수 있다. 2. 디버깅 strcpy 직후 bp 건 후, argv[2]의 위치 확인 "\xbf"*48을 통해 if 구문 우회 후 A가 저장된 공간을 확인할 수 있다. 대충 0xbffffad4를 argv[2]의 주소로 사용할 예정. 3. 페이로드 작성 ./wolfman $(python -c 'print "\x90"*44+"\xd4\xfa\xff\xbf"+"\x90"*200+ "\x31\xc0\x50\x68\x2f\x2f\x73\x6..

Write-Up/LOB 2019.12.04

LOB: succubus -> nightmare

1. nightmare.c 분석 - addr : strcpy()의 주소 - argv[1] : 사용자가 입력한 인자, 버퍼에 복사됨 - RET : buffer+44 => RTL 기법 이용, RET에 strcpy 주소를 넣어야 함 흐름을 살펴보면 마지막 memset() 함수를 이용하여 ret+4의 주소부터 4바이트를 A로 채운다. 이때 strcpy() 함수를 삽입시키면 버퍼의 문자열 전부를 RET+4부터 복사할 수 있다. => 버퍼에 RTL 기법을 이용하여 system() 함수로 쉘을 얻을 수 있다. 2. 디버깅 라이브러리에 저장된 system() 주소를 얻어온다. 어셈블에 있는 strcpy() 주소도 얻을 수 있다. 3. 페이로드 작성 페이로드는 다음과 같이 이뤄진다 system() + dummy + "/..

Write-Up/LOB 2019.11.28

LOB: troll->vampire

1. vampire.c 확인 두번의 if 구절을 피해야함. a. argv[1][47] == "\xbf" b. argv[1][46] != "\xff" 이에 맞게끔 주소를 할당해야 함. 다만 스택의 윗부분은 커널이 존재하므로 argv[2]를 이용하여 "0xbfff" 영역에서 벗어날 수 있도록 페이로드를 구상할 것. 2. 디버깅 - 어셈블러 분석 a. 함수의 프롤로그부분에 bp를 설정하고 ebp의 위치를 찾아 스택이 어디로 할당되었는지 확인한다. 확인해보면 스택이 0xbffe7478에 할당되어 있다. 더 아래쪽의 메모리를 확인해보면 인자값이 다음과 같이 들어간 것을 확인할 수 있다. 대략 0xbffe75f8을 argv[2]의 위치로 고른다. 4. 페이로드 ./vampire $(python -c 'print "..

Write-Up/LOB 2019.11.28

LOB: gremlin->cobolt

gremlin의 홈 디렉토리에 있는 colbolt.c를 확인해보면 첫번째 인자값을 버퍼에다 복사하여 버퍼를 출력하는 코드이다. 두가지 방법을 이용하여 문제를 풀어보도록 하자. 1. 환경변수를 이용한 쉘코드 익스플로잇 항상 하던 대로 다음과 같이 SHELLCODE라는, 쉘코드를 담은 환경변수를 저장합니다. 환경변수의 주소를 출력하는 코드를 간단하게 짜고 실행하여 SHELLCODE 환경변수의 주소를 알아낸다. cobolt 프로그램의 스택을 보면 str에 할당된 16바이트 뒤에 바로 함수 에필로그가 들어가므로 다음과 같이 쉘코드를 짤 수 있다. 2. RTL을 이용한 exploit RTL : Return-to-libc. 메모리에 적재된 공유 라이브러리를 이용해 원하는 함수를 끌어다 쓰는 공격 기법이다. 일반적으..

Write-Up/LOB 2019.11.27

LOB: gate - 수정중

FTZ를 거의 끝내가서 LOB를 시작했다. 아직 조금 남았지만 LOB를 병행하며 하기로 했다. 밀린 FTZ는 미래의 내가 하겠지... FTZ와 달리, LOB는 로그인을 연결 후 진행한다. 가장 첫번째 계정은 ID : gate / PW : gate로 로그인할 수 있다. 시작하면 다음과 같이 두 파일이 존재한다. (gremlin만 grep으로 뽑은 이유는 풀면서 만든 파일이 존재하기 때문) 실행 파일인 gremlin부터 살펴보면, gremlin으로 set-uid가 설정되어 있다는 것을 알 수 있다. LOB의 특징은 다음 레벨의 ID를 실행 파일의 이름으로 정해놓는다는 것이다. 즉, 우리가 이번 gremlin 파일을 BOF 하여 얻은 password는 gremlin에 로그인하여 사용해야 하는 것. 버퍼 위치가..

Write-Up/LOB 2019.11.22