시스템 해킹/LOB 9

[LOB] cobolt → goblin

cobolt / hacking exposed로 접속 goblin.c 파일을 보면 저번과 비슷한 문제지만 이번에는 gets함수로 문자열을 받아온다. 버퍼의 크기가 16바이트이기 때문에 이번에도 환경변수를 이용해 문제를 풀어볼 것이다. export로 환경변수를 설정하고 export shellcode=`python -c 'print"\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'` getenv함수로 쉘 코드의 주소를 구한다. 쉘코드 주소 : bfffff09 gets함수로 문자열을 받아온다는 걸 간과하고 저번처럼 입력했다가 실행이 안되는 것을 알았다. 이번에..

[LOB] gremlin → cobolt

gremlin / hello bof world로 로그인 $bash2 cobolt.c 파일을 확인했다. buffer를 16 할당받고 인자를 버퍼에 복사해 출력해주는 코드인 것 같다. gremlin 문제와 마찬가지로 strcpy함수때문에 bof 취약점이 발생할 수 있다. 일단 버퍼의 크기가 16바이트이므로 버퍼에 쉘코드는 넣을 수 없다. 환경변수를 이용해 문제를 풀어보자. 환경변수 등록 / 해제 방법 export 환경변수이름 unset 환경변수이름 환경변수 참고 shellcode 환경변수 설정 getenv 함수로 쉘 코드의 주소를 구할 것이다. bfffff07 NOP 16byte + SFP 4byte + RET 4byte 16바이트와 SFP를 NOP로 덮고 RET을 환경변수 주소로 채워줄 것이다. ./cob..

[LOB] gate → gremlin

id/pw : gate/gate로 접속 gremlin.c 파일을 열어보았다. strcpy 함수는 복사하는 문자열의 길이를 검증하지 않아 취약점이 발생한다. 먼저 \xff를 \x00으로 인식하는 오류를 피하기 위해 bash2를 사용했다. 권한 문제로 gremlin을 복사한 gremlin2를 gdb로 확인해보자. *main+62에서 buffer가 ebp-256에 있는 것을 알 수 있다. 버퍼의 크기가 256이기 때문에 dummy값은 없는 것 같다. buffer(256) - sfp(4) - ret(4) buffer의 주소를 알기 위해 *main+59에 breakpoint를 설정할 것이다. 그리고 A를 256개 입력해준다. b*main+59 r `python -c 'print "A"*256'` x/100x $e..