본문 바로가기

포너블/lob

lob 2번

이번에 lob 2번 문제 풀이입니다.

저번 1번 문제를 풀때 bash2설정 때문에  쓸데없는 삽질을 했으므로 이번에는 bash2설정부터 해주었습니다.

ls 명령어를 확인해보니 색을 바뀐걸로 보아서 제대로 bash2가 적용 된 것을 알 수 있습니다.

그럼 이제 2번문제의 코드를 보겠습니다.

코드를 보니 1번문제와 큰 차이는 없습니다. 하지만 버퍼의 크기가 16으로 굉장히 작아졌습니다. 그렇기 때문에 이번에는 1번에서 사용했던 nop슬라이드 방식이 아니라 환경변수를 이용해 볼 것입니다. 환경변수는 미리 명령어로 nop+shell코드로 이루어진 페이로드를 등록해 놓은 후에 1번에서는 ret값을 바로 nop슬라이드 부분으로 설정해 주었다면 우리가 등록한 환경변수의 주소로 ret값으로 설정하여 미리 등록된 페이로드를 실행시켜 공격하는 방식입니다. 

그럼 먼저 환경 변수를  등록해보겠습니다.

위와 같이 환경변수를 등록하면 됩니다. export 함수와 우리가 1번에서 작성했던 페이로드를 shell이라는 이름으로 등록해 주는 것입니다. 그 다음 해야 할 것은 우리가 등록한 환경변수이 위치, 즉 주소를 알아야 합니다. 이때 우리가 간단한 코드를 작성해서 구해야 하는데 내장함수인 getenv함수를 사용할 것입니다. 그리고 보여줄 코드는 예를 들어 vi test.c와 같이 명령어를 치게  되면 test.c파일이 생성되며 줄만 보이는 화면이 뜰텐데 이때 i를 눌러주면 작성이 가능합니다. 작성이 끝났다면 esc버튼을 누르고 shift,+,;버튼을 동시에 눌러주면 어떤것을 작성하라고 커서가 넘어갑니다. 이때 wq를 눌러주고 엔터키를 누르면 저장후 종료됩니다.

다시 문제로 돌아와서 환경변수의 주소를 구하기 위한 코드를 다양하게 가져와서 써봤는데 아래의 코드가 가장 편하고 확실하게 나왔습니다.

하지만 저기서 getenv함수에 들어가 있는 문자열의 이름은 shell로 고정된 것이 아니라 자신이 등록한 환경변수의 이름이 들어가야합니다. 그 후 gcc를 이용하여 위 test.c 파일의 실행파일을 만들어 실행시키면 주소값을 얻고 페이로드는 버퍼+ebp부분은 아무 값으로 채우고 ret값만 환경변수의 주소로 반환시켜주면 관리자 권한을 얻을 수 있습니다. 1번도 이 방법으로 풀 수 있습니다.

환경변수를 이용하여 다음 문제의 비밀번호인 hacking exposed를 구했습니다. 

*참고로 gcc -o t test.c 명령어는 검색해보면 나오겠지만  gcc명령어 중 -o는 실행파일을 만들어 실행하겠다는 의미있고, 그 실행파일이 t이고, 컴파일하고자 하는 파일이 test.c입니다. 즉 test.c의 실행 결과 값이 t에 저장되는 것입니다. 그렇기 때문에 ./t 명령어로 주소값을 구한것입니다.

'포너블 > lob' 카테고리의 다른 글

lob 6번  (0) 2020.01.05
lob 5번  (0) 2020.01.05
lob 4번  (0) 2020.01.05
lob 3번  (0) 2020.01.04
lob 1번  (0) 2020.01.04