분류 전체보기(333)
-
스캔 프로그래밍 / 계층별 헤더 프로그래밍
UDP , TCP 소켓을 만들어 보았고 , 이번에는 raw 소켓입니다로우소켓은 특정한 타입이 없는 소켓으로써 UDP나 TCP 등, 타입을 가리지 않고 모든 정보를 읽어들이는 장점을 가집니다이번에는 특정 장치에 대해서 스니퍼 프로그래밍을 실시하고 해당 장치에 들어오고 나가는 모든 패킷들을 검사하겠습니다 [1] 로우 소켓을 생성한다로우 소켓은 장치명을 대상으로 프로그래밍 합니다.현재 제가 사용하는 NIC카드는 " eth0 " 입니다 [ 그림1 ] 장치명은 확인되었고 아래는 로우소켓생성 코드입니다#vi sniffer.py import socket raw = socket.socket( socket.PF_PACKET , socket.SOCK_RAW ) raw.bind( ( 'eth0' , socket.SOCK_R..
2017.06.14 -
Protostar Heap3 [ Double Free Bug ]
참고한 사이트 : https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/ Protostar 3번 문제입니다. 더블프리버그(DFB)에 관한 문제입니다[ 그림1 ]해당 프로세스는 변수 a,b,c 가 32byte만큼 메모리가 동적할당 된 후 인자들을 입력받은 다음 반환되는 흐름입니다우선 힙 구조를 살펴 보면 다음과 같습니다 [ 높은 주소 ] Stack 빈 공간 c ( 32byte ) b ( 32byte ) a ( 32byte ) [ 낮은 주소 ] 낮은주소에서 높은주소의 방향으로 해당 그림과 같이 a,b,c가 위치하고 있습니다free(c), free(b), free(a) 과정의 아래의 그림들을 살펴보면서 설명하겠습니다 $gdb file heap3(gdb) breab *a..
2017.06.14 -
Protostar Heap2 [ Heap Overflow ]
Protostar Heap2번 문제입니다[ 그림1 ] Heap에서는 Stack과는 반대로 낮은주소에서 높은주소로 데이터가 쌓입니다해당 문제에서는 service변수에서 데이터를 입력받을 때 오버플로우 시켜서 auth chunk를 건들일 수 있는지를 물어보고 있습니다따라서 우리는 service변수를 낮은 주소에 위치시킨 그 이후 주소에 auth chunk를 위치시킵니다 [ 그림2 ] 위 그림을 보시면 service : 0x0804c008 , auth : 0x0804c018 가 출력되는 것이 확인됩니다service와 auch청크와의 거리는 16byte만큼차이가 나서 "A"*16 을 오버플로우시키면 auth값을 변질시킬 수 있습니다
2017.06.14 -
Protostar Heap0 [구조체활용]
Protostar Heap0번 문제입니다 [ 그림1 ] 힙에서의 메모리 구조는 스택의 구조와는 반대로 생각하시면 됩니다( First-in-Frist-out )임의로 인자를 주어 파일을 실행시켜보면 포인터 d와 f의 주소가 나와있습니다이를 이용해 메모리 구조를 그려보자면 다음과 같습니다[ 높은 주소 ][ Stack ][ f ][ dummy (6byte) ][ d ][ 낮은 주소 ] [ 그림2 ] 포인터 d가 가리키고 있는 구조체 data의 name변수를 버퍼 오버 플로우 시키고 나머지 dummy값도 버퍼오버플로우시킵니다그리고 objdump명령어를 사용하여 알아낸 winner()함수의 주소를 포인터f의 값으로 덮어 씌우면 공격성공입니다
2017.06.14 -
[7] PLT / GOT / objdump활용법
[1] PLT ( Procedure Linkage Table )PLT는 일종의 실제 호출 코드를 담고있는 테이블로써 _dl_resolve함수를 통해서 실제 시스템 라이브러리 호출이 이루어진다 [2] GOT ( Global Offset Table )GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있다PLT가 외부 프로시져를 호출할 때 GOT를 참조해서 해당 주소로 점프한다 ex) 어떤 프로그램에서 printf()함수를 호출한 상황[1] printf()함수를 처음 호출 했을 때 과정1> printf()함수 호출2> PLT로 이동3> dl_resolve()함수 실행4> GOT에 printf()함수의 주소를 저장5> printf()함수의 실제 주소로 점프한다 [2] 다시한번 printf()함수를..
2017.06.14 -
Protostar Format4 [ FSB / PLT / GOT ]
Protostar Format4번 문제입니다 [ 그림1 ] vuln()함수에서 exit(1)함수가 실행되어 종료됩니다exit(1)함수가 실행되는 주소값을 변질시켜서 hello()함수가 실행되게 해보도록 하겠습니다objdump명령어를 사용하여서 필요한 함수들의 주소를 찾아내겠습니다 [ 그림2 ] $objdump -TR ./format4 | grep exitexit(1)함수가 실행(호출)되는 주소 : 0x08049724 [ 그림3 ] $objdump -d ./format4 | grep hello -F10 hello()함수의 시작주소 : \x080484b4 exit(1)함수가 호출되는 주소에 hello()함수의 시작주소를 덮어씌우는 공격코드를 작성하면 끝입니다 [ 그림4 ] [1] 먼저 우리가 입력한 데이터가..
2017.06.13