전체 글 292

프로그래밍 보고서(정적 변수, 외부 변수, 레지스터 변수)

정적 변수(static variable) 정적 변수는 선언 시 형 앞에 static 이라는 키워드를 사용한다.ex) static int a = 10; 정적 변수의 초기화는 프로그램 컴파일 시에 단 한 번만 하게 된다.정적 변수는 함수 내, 외부 모두 선언 가능하다. 어떤 함수의 종료 후에도 그 값이 소멸되지 않고 보관되어, 다시 호출될 때 그 직전의 값을 참조할 수 있다. ex) #include main() { int i; for(i=0; i만약 지역 변수였다면 10을 다섯 번 출력했을 것이다. 하지만 정적 변수를 사용해서 초기화를 한 번만 시켜서 0 -> 10 -> 20 -> 30 -> 40 -> 50이 출력된다. 정적 변수를 만들려면 선언과 초기화를 동시에 해 주어야 한다(초기화 안 할 시 자동으로 ..

프로그래밍 보고서(전처리기, 헤더파일, 기계어, 어셈블리어, 고급 언어, 컴파일 단계)

전처리기 전처리기(preprocessor)란, 컴파일러가 소스 파일을 컴파일하기 전에 사용자가 지시한 작업을 먼저 처리하는 것이다.즉, 컴파일러보다 먼저 작업을 처리해준다. 그래서 중요한 작업은 전처리기가 하는 경우가 많다. 지금까지 #include를 많이 써왔는데 여기서 #은 전처리기가 작업하라고 표시하는 것이다.include는 전처리기의 명령어 중 하나인데 include 말고도 define, if ~ endif, else, elif, ifdef, ifndef, error 등 많은 전처리기 명령어가 있다. 매크로는 여러 명령어를 모아놓은 것이라고 보면 된다.매트로는 매크로 상수와 매크로 함수로 분류한다. 매크로 상수 #define은 매크로를 만드는 것이다.매크로 상수, 매크로 함수 둘 다 #define..

네트워크 기초 고1 2학기 중간고사 정리

정적 라우팅 프로토콜 라우터 운영자가 라우터의 경로를 직접 입력하여 라우팅 테이블을 구성하는 방법. 주로 스텁(stub) 라우팅에서 많이 사용하는 방법. 여기서 스텁이란 오직 하나의 경로만을 통해서 외부 망과 연결된 네트워크를 말함. 디폴트 경로 (특수한 유형의 정적 경로) 송신지에서 수신지를 알지 못하는 모든 패킷을 라우팅하는 경로. 가능한 모든 경로에 관한 정보를 저장하기에는 라우팅 테이블의 공간이 충분하지 않을 때 사용한다. RIP 단순하지만 오래 전부터 많이 사용, 라우터의 메모리를 적게 사용하는 장점. 최적의 경로를 찾는 방법이 단순히 홉 수만으로 결정한다는 단점. OSPF 컨버전스 타임이 짧음. (RIP -> 30초 OSPF -> 네트워크에 변화가 일어나면 바로 업뎃) VLSM 등 서브넷을 지..

[Conference] 2017 사이버 가디언즈 컨퍼런스 정리 및 후기

2017.11.04(토)오늘 사이버 가디언즈 컨퍼런스에 다녀오게 되었습니다.좋은 발표를 들을 수 있는 기회를 얻게 되어 기쁘고, 경품은 타지 못 했지만 빵빵한 경품들 준비해주셔서 감사의 말씀 드립니다.오늘 들으면서 더 열심히 해야겠다는 다짐을 다시하게 되었고, BOB에 대한 열정이 더욱 커졌던 것 같습니다. 아래는 컨퍼런스를 들으면서 정리한 내용입니다.혹시나 문제가 된다면 비공개로 즉시 전환하겠습니다. 댓글 달아주세요. 어서와 악성코드는 처음이지?-주은지악성코드 : 악의적 목적을 위해 작성된 실행 가능한 코드의 통칭 구체적인 목표 (산업기밀 유출, 사회 혼란, 시스템 파괴 등)금전적인 이득 (금융정보 탈취, 게임 계정 탈취, 랜섬웨어 등) Virus : 변형 복제 가능, 감염 대상 존재, 시스템 및 데이..

LOB darkknight -> bugbear Write up

LOB darkknight -> bugbear ID : darkknightPasswd : new attacker 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. RTL을 이용합니다. RTL은 Return To Library로 ret 명령을 만나서 돌아갈 때 code 영역으로 돌아가는 것을 원래 stack 영역으로 변조 했었는데, Library로 돌아가는 기법입니다. system()함수는 내부적으로 어떤 명령을 실행시키기 위해 /bin/sh을 실행시키고 이를 통해원하는 명령을 실행시키는 것에 착안하여 system()함수 코드 내부 어딘가에 /bin/sh 문자열이 존재할 것임을 추측할 수 있습니다. 그래서 system 함수의 주소를 찾고, system 함수 내부에 있는 /b..

System&Write up/LOB 2017.10.26

LOB golem -> darkknight Write up

LOB golem -> darkknight ID : golemPasswd : cup of coffee 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 코드를 열어봅니다. FPO를 이용하라고 합니다. FPO는 sfp를 조작하는 기법입니다.FPO는 Frame Pointer Overflow이고 sfp를 조작해서 원하는 곳으로 Return 시킬 수 있게합니다. 저기 보시면 main에서 argv[1] 인자를 problem_child 함수에 넘겨주어 buffer에 복사하는데, 41byte 만큼 할 수 있습니다. sfp의 맨 뒤의 1byte를 조작할 수 있겠네요! 여기서 잘 생각해보면,sfp를 변조해 놓고 problem_child에서 leave를 하면 esp는 현재 ebp를 가르키고, ebp에는 변조된 e..

System&Write up/LOB 2017.10.26

LOB skeleton -> golem Write up

LOB skeleton -> golem ID : skeletonPasswd : shellcoder 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. main 함수의 Return Address 부분을 제외한 buffer 상위 주소의 모든 부분을 초기화 하는 모습입니다.buffer, argv, 환경 변수 모두 사용이 불가합니다. 그렇다면 어떻게 해야할까요? 리눅스에서는 효율적인 라이브러리 함수 사용을 위해서 메모리에 실행한 프로그램만 올리는 것이 아니라 라이브러리도 같이 메모리에 올리게 됩니다. 그래서 printf, strcpy, memset 등의 함수들을 우리가 사용할 수 있게 됩니다. 사용자가 정의한 함수들을 메모리에 올려서 라이브러리 함수처럼 사용할 수 있게 해주는 것이..

System&Write up/LOB 2017.10.12

LOB vampire -> skeleton Write up

LOB vampire -> skeleton ID : vampirePasswd : music world 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. Return Address를 스택으로 변조해야 합니다.환경 변수 사용 못 하고, 버퍼를 초기화 합니다. argc 또한 저장해 놓은 후 다시 돌려놓아서 모든 argv를 초기화 합니다. 정보를 찾기 위해 원본 tmp 디렉터리를 만들고 복사합니다. gdb로 열어서 x/10s $esp 로 찾아봤습니다. 0xbffffc32가 argv[0]입니다. 0xbfffffe1에도 argv[0]과 같은 값이 들어있습니다.orge -> troll 에서는 argv[0]를 초기화 하지 않고 남겨둬서 argv[0]을 이용했지만, 이번에는 모든 argv..

System&Write up/LOB 2017.10.11

LOB troll -> vampire Write up

LOB troll -> vampire ID : trollPasswd : aspirin 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. egghunter가 없으니 공격은 환경 변수로 하면 될 것 같습니다.하지만 환경 변수는 스택의 위쪽에 위치하기 때문에 ‘\xbf'는 가능하지만 ‘\xff’를 우회하는 부분을 조금 생각해봐야 할 것 같습니다. | main() | argc | argv | etc, env | 0xbfffffff 저 안에 있는 애들의 크기를 늘려주면 주소가 낮아지지 않을까요? 환경 변수로 공격하자는 목적이니| main() | argc | argv | etc, env | 0xbfffffff환경 변수에 많은 NOP을 박아준다면 저런 메모리 구조를 가질 것이고, ‘\..

System&Write up/LOB 2017.10.10

LOB orge -> troll Write up

LOB orge -> troll ID : orgePasswd : timewalker 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. darkelf에서 추가됐던 argv[0] 길이 체크가 사라지고, argc가 2개 (파일명 + 인자), argv[1]을 초기화하네요. 그럼 argv[0]에 셸코드를 집어 넣어야 할 것 같습니다.셸코드를 파일명으로 가지는 파일을 만듭니다. 그런데 잘 되지 않는다.이유는 셸코드에 ‘\x2f’ 문자가 ‘/’로 인식돼 이상한 경로로 나뉘게 됩니다. 그래서 ‘\x2f’가 없는 셸코드를 써야합니다. "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\x..

System&Write up/LOB 2017.10.09
반응형