0x.Wargame/lord of BufferOverflow
-
-
0x19.lob Xavius0x.Wargame/lord of BufferOverflow 2017. 10. 4. 21:55
0x19.lob Davis 소켓으로 범벅이 되어 있는 코드이다. 중요한 부분만을 보자면 buf의 크기가 40이라는 것과, 6666번 포트가 listen한다는 것, 256바이트 만큼을 받는다는 것이다. 사용가능한 방법 :- 1. 바인드쉘 : 공격당하는 서버의 다른 포트를 열어서 쉘을 실행시키는 방법2. 리버스 쉘 : 공격자의 열려있는 포트로 서버가 접속하게 하는 방법 http://satanel001.tistory.com/110 위 블로그의 라이트업을 참고하여 풀었다. 이 문제에 대해서는 다시 푼 뒤에 재 포스팅을 할 예정이다.
-
0x18.lob Nightmare0x.Wargame/lord of BufferOverflow 2017. 10. 3. 19:08
0x18.lob Nightmare 점점 더 어려워진다기에는 너무 막바지의 문제인가??어쨌든 너무 어렵다.. 라이트업을 보기 시작했다는 뜻이다. ㅋㅋ 왠만한 주소값들은 다 막아놨다. 악랄함의 극치를 달리는 중이다. 이전과 크게 다른 특이점은 gets를 사용하여 표준 입력의 형식으로 인자값을 받는다는 것이다. 공격대상 파일을 백그라운드에서 실행시키면 사용자로부터 입력을 받는 상태가 되는데, 프로세스의 메모리 구조를 살펴봤더니 4014000-4016000과 4019000-4010d000의 주소값 범위를 제외하고는 원천적으로 사용하지 못하도록 예외처리가 되어있거나, 라이브러리 영역이라 활용하지 못하는 문제가 있다. bp를 걸건데 21번째 라인에서 fgets를 받고, 277번 라인에서 leave가 되니까 2지점을..
-
0x17.lob Succubus0x.Wargame/lord of BufferOverflow 2017. 10. 2. 21:29
0x17.lob Succubus strcpy의 함수를 가지고 공격을 하는 버퍼 오버플로우 문제이다. 코드를 보면 RET 주소값이 strcpy의 주소값이 아닐경우 예외가 발생하고, 48바이트부터 4바이트만큼이 A로 초기화된다. 먼저 strcpy함수의 프로토타입부터 알아야하는데 이는 다음과 같다. char *strcpy(char *destination, const char *source) RTL 기법을 사용하여 풀면 되는데, 공격 페이로드는 다음과 같다. BUFFER[40] SPF[4] RET(&strcpy)[4] DUMMY(strcpy RET)[4] strcpy_dest strcpy_src 어떤 방식을 사용할 것인가 하면, strcpy_src의 인자에 shellcode를 가리키는 주소값을 넣은 다음, 그 ..
-
0x16.lob Zombie_Assassin0x.Wargame/lord of BufferOverflow 2017. 10. 1. 18:12
0x16.lob Zombie_Assassin 추석 연휴에 지방에 내려와서 하나 풀어보았다. check가 주어지는데 세부 함수가 한개씩 실행되면서 그 값이 바뀌는데 그 시작이 DO이다. 그리고 MO에서 system함수가 실행이 된다. 여기서 생각할 것은 함수들이 순차적으로 실행이 되면 check의 값이 증가하고 결과적으로는 MO에 있는 SYSTEM을 실행시킬 수 있을 것이라는 것이다. 가장 먼저 main에서 bp를 걸고 주소값을 확인하였고, 그 주소값을 토대로 이와 같은 페이로드를 구성하였다. bufer[40] + SPF DO( ) GYE( ) GUL( ) YUT( ) MO( ) MO RET[4] /bin/sh 주소 /bin/sh 아래와 같은 방식으로 공격을 할 건데, 라이브러리를 사용하지 못하기 때문에 ..
-
0x15.lob Assassin0x.Wargame/lord of BufferOverflow 2017. 9. 29. 15:14
0x15.lob Assassin 이번에도 10시간 이상 삽질을 하고 푼 문제이다. 기법을 이해하는데 시간을 쓴 것에 비해 주소값 삽질에 더 많은 시간을 쓴 것같다. 내가 사용한 방법은 FEBP이다. 힌트에 FEBP라고 주어져있고, 아래를 봐도 환경변수부분들을 스택가드로 처리한 것을 알 수 있다. 스택의 크기를 확인한 뒤에, 내가 입력한 값들이 어디 주소값에 들어가는지를 파악하였다. FEBP의 개념을 잠깐 설명하기 위해서는 leave와 ret에 대해서 알아야 한다. leave ret mov esp, ebp pop eip pop ebbjump eip FAKE ebp는 리턴주소만을 조작할 수 있을 경우에 사용하는데, ebp의 위치값을 조정하여 원하는 위치를 가리키게 하는 방법이다. 위와 같이 leave가 실행..
-
0x14.lob Giant0x.Wargame/lord of BufferOverflow 2017. 9. 27. 16:03
0x14.lob Giant 이번 문제에서는 ret sled를 사용하였다. 역시나 그 전에 사용했던 방법들은 모조리 철벽을 당했다. 건드릴 수 있는 유일한 값은 ret값 뿐이었다.인터넷에 검색을 해보니 ret 주소를 통해서 공격을 하는 방법인 ret sled가 있었다. 습관처럼 버퍼의 크기를 확인해주고, 사용할 수 있는 ret 주소 값이 존재하는지를 먼저 확인했더니 위와 같이 여러 주소가 있었다. 내가 풀이에 사용할 주소는 8048548이다. system함수를 활용할 거라서 시스템 함수의 주소값을 알아냈고, /bin/sh의 주소값도 아래와 같이 알아내었다. 0x400fbff9가 /bin/sh의 주소값이다. 공격 페이로드는 다음과 같다. buffer[40] SPF ret SPF of ret /bin/sh의 ..
-
0x13.lob Bugbear0x.Wargame/lord of BufferOverflow 2017. 9. 27. 14:28
0x13.lob Bugbear 이번에도 전 문제와 비슷한 RTL 문제인데, execve를 사용하는게 핵심으로 보인다.솔직히 소스코드 부분에 대해서는 정확하게 이해를 하지 못해서 풀이만 간단하게 적어두기로 하였다. 일단 공유 라이브러리를 써야 하는건 동일하므로 아래와 같이 system, execute, exit 함수의 주소값을 찾아내었다. 저번 문제와 마찬가지로 system 함수안에 포함되어 있는 /bin/sh의 주소값 또한 파밍을 한다. 저번 문제에서 푼 방식은 사실상 함수안에 포함되어 있는 /bin/sh를 실행하는 것으로 루트권한을 유지할 수는 없다.execve를 사용하게 되면 root권한을 유지한채로 system함수를 실행시켜서 shell을 사용할 수 있다고 한다. 버퍼에 다음의 순서대로 넣을 것이다..