본문 바로가기

wargame/LOB

[LOB]03 cobolt cobolt 다음 문제를 풀어보자. 디렉터리를 살펴보자. tmp 디렉터리를 만들고 goblin.c를 복사해서 내가 디버깅할 수 있는 goblin을 만들었다. (여기서 실수를 했음) goblin.c를 살펴보자. strcpy가 gets로 변환한 걸 제외하면 동일하다. gets는 strcpy와 달리 잘 모르니까 gets가 메모리에 어떻게 적용되는지 살펴보자. A로 buffer의 16바이트를 채우려고 했다.(실제로는 환경변수를 채웠기 때문에 착각임) 어셈블리 코드를 보면 *main+18 현재, sfp - (현재 ebp 위치) - buf(16바이트) - (현재 esp 위치)임을 예상할 수 있다. $esp에서 매우 떨어진 위치에 A가 들어간 걸 보면 알 수 있듯이 "A" 16개는 main함수의 범위 위, 환경변수 ..
[LOB]02 COBOLT cobolt +) sfp, ebp 개념 혼동하여 작성함. 나중에 수정할 수도 있고 이전 문제에서 얻은 비밀번호로 다음 문제를 풀어보자. 디렉터리를 확인해보자. cobolt.c는 gremlin.c와 거의 동일하지만 buffer의 크기가 다르다. 이전과는 달리 풀어야 할 것 같다. 이전과 같이 쉘에 바로 코드를 삽입하면 쉘코드가 버퍼를 오버하여 저장하는데 그럼 strcpy 함수가 끝난 후 ret을 통해 main함수로 돌아가는 데 쉘코드가 삽입되기 때문이다. ret에는 쉘코드가 아니라 쉘코드가 시작하기 전의 위치의 주소가 들어가야 한다. 가장 먼저 생각 난 방법은 환경변수에 쉘코드를 넣은다음 ret에 환경변수의 주소를 넣는 방법이다. 1. 환경변수에 쉘코드를 넣는다 2. ret에게 환경변수의 주소를 넣으면 쉘..
[LOB]01 GREMLIN gremlin +) sfp, ebp 개념 혼동하여 작성함. 나중에 수정할 수도 있고 기본적인 설정을 마치고 문제를 풀어보기로 했다. login : gate / password : gate로 접속할 수 있다. 접속하면 gremlin.c와 그 실행파일이 있다. gremlin.c의 내용을 확인할 수 있다. 이제 한 번 문제를 해결해보자. gremlin을 실행시키면 권한이 허용되지 않았다는 말과 함께 실행되지 않는다. root 권한으로 실행하면 문제가 없다고 한다(출처) 권한을 다시 설정할 필요가 있다. tmp 디렉터리를 만들어 gremlin을 새로 생성했다. 이제 파일은 내 소유이므로 실행가능하다. 여기는 c 코드가 있어 확인할 필요는 없는데 어셈블리어에 익숙해질 겸 한 번 해보았다. 어셈블리 코드 push ..