slide-image

LOB

[the Lord Of Buffer overflow]

#18 : succubus->nightmare

 

이제 얼마 안 남은 거 같은데

 

일단 temp 폴더를 혹시나 해서 만들었고, mightmare으로 카피해줬다.

코드의 내용은 이렇다.

일단 코드 분석부터 해보면, 인자 하나 이상이 들어가야 하고, addr의 값이 strcpy의 plt여야 한다.( (char *)&strcpy )

또한, 44번째부터 &addr와 같아야 하므로, main의 RET 부분이 strcpy의 plt여야 한다.

그리고 main의 RET 부분이 끝난 후의 4바이트니까, strcpy의 RET 부분의 주소는 AAAA로 바뀌게 된다.

 

 

main의 RET부분을 strcpy로 고정해야 하므로, strcpy를 이용해서 strcpy의 RET 부분의 주소를 쉘코드의 주소로 바꿀 수 있다. 쉘코드의 주소를 넣기 위해서는 RTL을 이용해도 되고, 환경변수를 이용해도 된다.

...더보기

strcpy는 (*char Des, *char const Source)이므로, 첫 번째 인자가 buffer[48]이고, 두 번째 인자가 쉘코드의 시작 주소이다. 두 번째 인자에 쉘코드의 시작 주소를 넣는 것이 아니라, 쉘코드의 시작 주소를 다른 곳에 놓고, 그 주소를 두 번째 인자 자리에 넣어야 한다.

즉, 첫 번째 인자를 buffer[48]인 strcpy의 RET(AAAA로 바뀌는 부분의 주소)이고, 그 다음 주소인 buffer[52]가 strcpy의 첫 번째 인자이므로 여기에 buffer[48] 써야 한다.

그리고 buffer[56]부분이 두 번째 인자가 들어가는 부분이고, 쉘코드의 주소를 뒤에 넣는다면, buffer[60]에 쉘코드의 시작주소가 들어가며, buffer[56]에 buffer[60]의 주소가 들어가야 한다.

 

 

일단 환경변수로 쉘코드를 등록하고,

 

일단 strcpy의 plt 주소는 0x08048410이고, 이를 buffer[44]에 넣고 나머지를 알파벳으로 채워보았다.

 

코어 덤프를 떠봤다.

 

코어 덤프에서 환경변수가 들어있는 곳을 찾았다. 쉘코드의 시작 주소는 0xbffff3ef로 대충 잡았다.

 

41, 42, 43, 44가 각각 A, B, C, D의 아스키 코드 이므로, 내가 넣어준 AAAA부분은 0xbffff9b0이었다.

(사실 이거 때문에 많이 헷갈렸다. 왜 앞에 내가 넣어주지 않은 다른 값이 있는지 모르겠는데, 아마 strcpy 함수 호출 후라 다른 값이 들어있는 것 같다.)

 

그러면 RET 부분은 0xbffff9b0이고, 인자1(0xbffff9b4)부분에 이 값을 써야한다.

또한 인자2가 0xbffff9b8이며, 뒤에 쉘코드의 주소를 써줄 거니까 쉘코드의 주소가 적힌 주소는 0xbffff9bc이다. 이 값을 인자 2에 써야한다. 

 

때문에 페이로드는 A 44개, strcpy plt의 주소, A4개(strcpy의 RET), 이 RET의 주소, 쉘코드의 주소가 적힐 주소, 쉘코드의 주소 이렇게 된다.

mightmare로 되길래 심볼릭링크걸어서 해줬다.

 

 

...더보기

이번에는 RTL로 풀어봤다.

tightmare로 이름을 바꿨고,

 

gdb로 system함수의 주소를 알아냈다.  

 

sh.c를 sh로 컴파일했는데, 

sh.c의 내용은 뭐 뻔하다.. system함수 주소를 기반으로 /bin/sh 주소를 찾는 코드이다.

/bin/sh의 주소는 0x400fbff9가 나왔다. 

 

앞의 버퍼에 RTL 페이로드를 만들고, 그 주소(버퍼 시작주소)를 인자 2에 넣으려고 했다. 일단 모르니까 SSSS

 

코어 덤프 떴더니 버퍼 시작주소가 0xbffff980이었다. 

 

SSSS대신에 넣었더니 성공. 심볼릭 링크 해줬다.

 

'Wargame > LOB(Redhat)' 카테고리의 다른 글

[LOB] xavius->death_knight  (0) 2019.07.08
[LOB] nightmare->xavius  (0) 2019.07.05
[LOB] zombie_assassin->succubus  (0) 2019.07.01
[LOB] assassin->zombie_assassin  (0) 2019.04.01
[LOB] gaint->assassin  (0) 2019.03.31