best_collin의 등록된 링크

 best_collin로 등록된 네이버 블로그 포스트 수는 50건입니다.

[보호기법] SSP(카나리) [내부링크]

0x1. SSP(Stack Smashing Protector)SSP는 버퍼오버플로우 공격을 방어하기 위해 생긴 기법이다.버퍼와 ebp사이에 dummy값을 생성하여 이 값이 변조되면프로그램이 종료된다.이렇게 생성된 dummy값을 카나리라고 한다.카나리가 변조됐는지 유무는 함수의 에필로그와 프롤로그에서 진행된다.카나리가 만들어지는 과정과 카나리 검사루틴을 이해하면 카나리값을 변조시키지 않고익스플로잇을 전개할 수 있다.0x2. bypass카나리를 bypass하기 위해서는 여러가지 방법들이 있다.카나리의 값을 릭하거나 아니면 원본 카나리의 값을 바꾸는 것이다.1. 카나리의 값을 릭 --> read함수나 다른 함수의 취약점들을 이용한다.2. 원본 카나리값을.......

[보호기법] RELRO [내부링크]

0x1. RELRO(Relocationi Read-Only)GOT과 같은 다이나믹 섹션에 읽기 권한만 부여하는 것.got이 어디 영역에 있는지 궁금해서 좀 물어봤었다.아직 리버싱 공부가 부족했었지만 일단 데이터 섹션에는 존재하지 않고Relocation Info에 있을 것 같다.(개인적인 추측)0x2. bypassRELRO를 bypass하기 위해서 쓰기 권한이 있는 곳을 찾아야한다.쓰기 권한이 있는 곳은 스택에서 ret부분이다.결국 어떠한 방법을 통해서 libc주소를 릭해서 ret over write를 해야한다는 것이다.근데 ASLR이 걸려있는데 어떻게 ret의 위치를 특정할 수 있는지 궁금할 수 있다.library영역에는 environ ptr과 argv ptr의 위치가 남아있다.environ ptr과 argv ptr은.......

[보호기법] PIE [내부링크]

0x1. PIE(Position Independent Executable)PIE는 바이너리가 로딩될 때 ASLR처럼 랜덤한 주소에 매핑되는 보호기법이다.ASLR은 스택과 힙을 랜덤화함으로써 Return to shellcode를 막았지만PIE는 바이너리를 랜덤화하여서 ROP(Return Orientied Programming)을 어렵게 하였습니다.0x2. bypass PIEASLR에서는 스택영역이 랜덤화 되어 libc베이스 주소를 통해 익스플로잇했었습니다.PIE또한 코드의 베이스 주소를 통해서 익스플로잇을 진행하시면 됩니다.지금까지 이론적인 내용으로만 다뤘지만 조금 더 공부해서실습까지 해서 보여드리도록 하겠습니다.제가 참고해 공부한 영상링크입니다.https://www.youtube.com/watch?v=OAEX5SAv.......

[드림핵 문제풀이]oneshot [내부링크]

oneshot gadgetoneshot gadget이란 페이로드의 길이가 부족할 때 쓰는 가젯들로인자세팅을 별도로 해주지 않아도 된다는 장점이 있으나가끔 원샷가젯이 먹히지 않는다는 단점이 있다.이유는 /bin/sh를 인자로 전달해주지 못했기 때문이다.※문제 소스※※페이로드※1. 페이로드가 제한적이라서 ROP를 쓸 수 없다2. onegadget을 써야한다.3. check값을 0으로 보존한 상태로 ret overwrite만 해야한다.※힘들었던 점※1. 먼저 로컬에서 익스플로잇할 때 자꾸 libc를 문제에서 준 libc를 쓰지 않고 로컬 libc를 사용하여 익스가 되지 않았다.--> LD_PRELOAD옵션 주어서 해결!2. libc.symbols['stdout']이 먹히지 않아서 힘들었다.......

[JAVA] Java Compile [내부링크]

0x1. JDK와 JRDJRE= JVM + JAVA API 자바 실행을 위해 필요JDK=JRE + TOOLS 자바 개발을 위해 필요0x2. 자바 API 문서 읽는 법https://docs.oracle.com/javase/10/docs/api/사이트에서 자신이 원하는 함수 찾아보기0x3. JAVA 컴파일작성 방법1. 반드시 클래스와 동일한 이름으로 파일을 저장해야함.2. .java의 확장자를 써야함3. main함수는 public static void main(String[] args)이렇게 생겨야함.0x4. JAVA IDE javac.exe 자바 컴파일러 java.exe 자바런쳐 환경변수 : 위의 프로그램들의 위치를 특정하는 변수이다.위의 프로그램들은 jdk/bin 폴더에 있다.https://www.jetbrains.com/ko-kr/idea/IDE는 intellij를 쓸 예정이.......

[자료구조] 탐색 알고리즘과 재귀 [내부링크]

0x1. 선택 정렬(Selection Sort)배열의 모든 인덱스들을 앞에서부터 최솟값을 차례로 배치하는 작업.0x2. 이진 탐색(Binary Search)1. 무조건 배열이 정렬되어 있어야 한다.2. 검색 범위를 절반씩 줄여나가는 기법3. 재귀함수로 구현 가능 - 재귀함수는 반드시 종료조건이 있어야함. - 재귀함수가 목적을 달성할 수 있는지 확인해봐야함. - 유한한 횟수를 수행하는지 확인해봐야함.0x3. 순열 - 모든 경우의 수를 찾는 것 - 이것 또한 재귀함수를 이용해서 구현 가능하다. 소스코드를 봐도 어질어질 하네요ㅠㅠ이것은 직접 펜으로 써보면서 따라가는걸 추천합니다.

[드림핵 문제풀이]iofile_vtable [내부링크]

iofile_vtable overwriteio_file_plus구조체에서 vtable이 가르키는 값을 덮어버리는 것것것※문제 소스※※페이로드※1. 4번 메뉴를 이용해보면 stderr+1은 vtable의 주소라는 것을 알 수 있다.2. 즉, vtable을 이용해 fprintf의 주소를 get_shell로 overwriting하면 되는것이다.※힘들었던 점※1. 0x38구하는 것이 가장 어려웠던 것 같다.--> 여러가지 비슷한 문제들을 보면서 감을 잡은 것 같다.https://lactea.kr/entry/pwnable-IOFILE-structure-and-vtable-overwrite이 블로그를 보면서 느낌이 많이 왔다. 결국엔 vtable에 AAAAAAAA를 채워줘야 오프셋을 볼 수 있는 instruction들이 나온다.지금까지 나는 get_shell-219를 해주었.......

[C++] C++구조체와 클래스 [내부링크]

0x1. 구조체데이터와 관련된 변수들을 그룹화 시켜놓은 것.c언어에서는 구조체 변수를 생성하기 위해서 struct CAR test; 이렇게 썼어야 됐다.하지만 C++에서는 CAR test; 이렇게만 해줘도 구조체를 할당할 수 있다.(typedef 필요 없음)함수는 데이터에 종속적이다.즉, 데이터가 없으면 함수의 기능을 구현하지 못 한다는 것이다.데이터를 그룹화해놓은 것이 구조체였다. 그럼 함수는 어차피 데이터에 종속이므로 함수도 구조체에 넣으면 훨씬 알아보기 쉬울 것이다.그래서 나온 것이 Class이다.0x2. 구조체 안의 함수C++에서는 구조체 안에 함수를 넣을 수 있게 만들었다.다음편에서 Class에 대해서 배울텐데 이것과 유사하게 쓰인다.이렇.......

[JAVA] Java 자료형 [내부링크]

0x1. 변수변수의 선언은 변수의 이름, 용도를 결정해주어야 한다.ex) int num1;0x2. 자료형자바의 자료형은 C언어와 비슷한 것을 볼 수 있다.실수표현을 이용하면 오차가 존재할 수 있다. 왜냐하면 컴퓨터는 2진수로 이루어져서 10진수로 이루어진 정확한 실수표현이 불가능하기 때문이다.boolean b=1 (x)boolean b=true (o)0x3. 변수 선언 규칙 1. 대소문자를 구별함. 2. 변수의 이름은 숫자로 시작 불가능 3. '_'와 '$'이외의 특수문자를 변수에 사용 불가능 4. 명령어로 쓰이는 키워드를 변수이름으로 사용이 불가능하다.0x4. 정수형의 표현https://issac-rok.tistory.com/m/4위의 블로그를 보면 컴퓨터.......

[JAVA] 상수와 형변환 [내부링크]

0x1. 상수(Literal) - 자바에서 상수는 두 가지를 의미한다. 1. 변수에 값을 딱 한 번만 저장할 수 있으면 상수라고 한다.(final 키워드 사용) 2. int num=14; 이렇게 썼을 때 숫자 14가 num에 할당되기 위해서는 숫자14 또한 메모리 공간에 할당되게 된다. 이렇게 할당된 메모리 공간을 리터럴이라고 한다. final 키워드를 사용해서 상수를 정의할 때 국롤이 몇 개 있다. 1. 상수 이름은 전부 대문자를 이용한다.(final int MAX=1;) 2. 상수 이름이 두 단어 이상일 떄는 언더바를 이용한다.(final int MAX_SIZE=1;) 3. 선언과 동시에 초기화가 이루어지지 않았을 때는 한 번의 기회를 준다.0x2. 리터럴의 연산 1. 정수 + 정.......

[분석] GNU fclose()함수 내부 분서 [내부링크]

0x1. fclose()함수 내부 소스코드 구하기내가 원하는 것은 glibc 2.1버전의 fclose() 소스코드가 필요했다.이후 포스팅 진행할 예정..

[JAVA] Java 연산자들 [내부링크]

0x1. 이항 연산자피연산자가 두 개인 연산자 ex) int k= A+B;아래 그림에서 연산자의 우선순위란여러 연산자들이 한 문장 안에서 존재할 때 먼저 계산해야할 순서이다.결합 방향이란 한 문장 안에서 우선순위가 동일한 연산이 있을 경우어떤 순서로 계산을 해야하는지 명시한 것이다.위의 그림을 외우고 있을 필요는 없다.그냥 필요할 경우 참고를 해서 쓰면 될 것이다.하지만 좋은 코드를 작성하기 위해서는 괄호를 이용해서 읽기 좋은 코드를 작성해야 할 것이다.논리 연산자를 사용할 떄 한 가지 메모할 둘 점: SCE(Short - Circuit Evalutation)위의 두 문장을 컴파일 할 때 SCE라고 연산의 효율을 높이기 위해서 불필요한 동작을.......

[C++] 정보은닉과 캡슐화 [내부링크]

0x1. 정보은닉정보은닉이란 한 클래스의 있는 변수를 다른 클래스에서 접근이 불가능하게 만드는것--> 멤버변수를 private설정 주면 됨사각형을 구성하기 위해서는 좌 상단의 점과 우하단의 점 두개가 필요하다.여기서 중요한 점은 좌 상단의 점이 우 하단의 좌표보다 더 왼쪽에 있어야한다.그러나 main함수를 보면 이 조건이 어긋났다.이렇게 정보은닉에 실패 했을 때 코드의 오류가 발생할 확률이 높아진다.그래서 정보은닉을 하기 위해서는 함수를 통해서 내부 변수를 접근할 수 있도록 해야한다.위의 소스코드는 정보은닉이 된 소스코드이다.멤버변수를 private로 설정해주고 public으로 설정된 멤버함수를 통해서멤버 변수의 값을 바.......

[보호기법] Nx bit(DEP) [내부링크]

0x1. Nx bit (DEP)Nx bit(None eXecute Bit)는 스택과 힙 영역에 쉘 프로그램을 실행시키기 위한 명령어 실행을 막기 위해 등장한 보호기법이다.즉, 스택영역과 힙 영역에 쉘 코드를 올려놓고 실행하는 것을 막는 것이다.쉘코드가 실행되는 것을 막는 방법은 단순하다.바로 해당 메모리의 실행권한을 없애거나 쓰기 권한을 없애는 것이다.둘 중 하나만 없애도 공격자는 쉘코드를 올려도 실행을 하지 못하거나 쉘 코드를 올리지 못 할 것이다.다만 이것이 Linux 운영체제에서는 Nx bit라고 불리는 것이고Microsoft의 윈도우 운영체제에서는 DEP라고 불린다.DEP는 소프트웨어적으로 Nx bit가 적용되는 것 뿐만 아니라 하드웨어 부분에서도Nx bi.......

[보호기법] ASLR [내부링크]

0x1. ASLR(Address Space Layout Randomization)ASLR은 그림과 같이 스택, 힙, 공유라이브러리 영역의 주소를 매 실행 시 마다 랜덤하게 매핑해주는 기법이다.랜덤하게 바꿔주게 된다면 메모리에 특정 주소를 써놓고 PC(EIP)를 바꾸는 기법이 어려워질 것이다.ASLR은 /proc/sys/kernel/randomize_va_space파일의 값을 바꿔줌으로써 쉽게 설정할 수 있다.위 파일에 0을 쓸 경우 ASLR을 적용하지 않음.0 : ASLR적용 X1 : 스택과 힙에만 랜덤화2 : 스택과 힙, 라이브러리 영역 랜덤화0x2By pass ASLRASLR를 by pass하여 익스플로잇을 전개하기 위해서는 바이너리 영역에 있는 코드를 위주로 익스플로잇 해야합니다.

[오늘의 CTF]Darkkon CTF [내부링크]

※문제 소스※위의 소스코드는 아이다로 헥스레이한 결과입니다.gets함수의 취약점으로 인해서 Overflow가 나겠습니다.※분석※페이로드 작성하기 전에 ELF파일에 대한 분석은 필수적입니다.중요한 정보는 x64환경에 ld.so가 링크해주는 것이 아닌 static으로 정적링크가 되어있습니다.--> 정적 링크 시에 라이브러리 주소를 릭 할 수 없고 폰툴의 got과 plt기능을 쓰지 못 하겠습니다.즉, static liked라는 것은 ROP로 Return to libc로 system함수를 호출할 수 없다는 말입니다.왜냐하면 실행파일에 애초에 system함수가 적재되지 않았으니까요.이 파일에 걸린 보호기법들입니다.Partial Relro가 붙어있으면 got을 쓸 수 없어 got.......

행렬과 행렬의 사칙연산 [내부링크]

※행렬※행렬이란 문자 또는 숫자를 배열의 형태로 나타내는 것이다.가로줄--> 행(M)세로줄-->렬(N)보통 M x N 행렬이라 함은 가로로는 N개가 있고 세로로는 M개가 있다는 것이다.이렇게 쓰면 세로로 2번째 줄에 첫번째에 있는 숫자를 가르킨다.예시행렬의 (2,1)성분은 3이라는 것이다.※특수행렬※지금까지 행렬을 어떻게 읽고 해석하는지를 배웠다면 이제 읽은 행렬의 특징을 알아보도록 하겠다.1. 영행렬행렬의 모든 수가 0으로 채워진 행렬이다.2. n차 정사각행렬N차 정사각형렬이란 N*N행렬을 말한다.여기서 나오는 용어가 주대각성분 , 대각성분이다.행렬에서 행과 열이 같은 성분들을 말한다 EX) (1,1),(2,2),(3,3).......

[드림핵 문제풀이] string [내부링크]

FSB (Format String Bug)포맷스트링은 printf류의 함수를 잘못 썼을 때 발생하는 버그로 사용자의 특정한 입력으로 인해 메모리 값이 변조될 수도 있는 해킹 기법이다.※문제소스※※문제풀이※※힘들었던 점※1. read함수로 오버플로우가 안 나는데 자꾸 생각이 ROP쪽으로 흘러감--->이유를 생각해본 결과 지금까지 소스코드에 system함수가 없을 경우 ROP말고는 다른 방법을 고민해본적이 없던것 같다.2. 포맷스트링이 조금 약한 편이라서 드림핵에서 다시 공부하고 오느라 오래 걸린 것 같다.3. 이전의 포맷스트링 문제들은 한 메모리 주소(something's got or return addr)만 바꾸면 됐는데 이 문제는 libc주소 leak-->offset.......

읽어볼 것들 [내부링크]

gdb 설명http://korea.gnu.org/manual/release/gdb/gdb.html#SEC1.init_array .fini_array설명https://wogh8732.tistory.com/228_start_start 설명https://teamcrak.tistory.com/tag/_start 심볼 없을때 디버깅https://blog.ch4n3.kr/291심볼과 컴파일 설명https://simsimjae.tistory.com/m/235심볼 테이블 생김새??https://ko.m.wikipedia.org/wiki/%EC%8B%AC%EB%B3%BC_%ED%85%8C%EC%9D%B4%EB%B8%94core파일로 디버깅법https://jh911.tistory.com/entry/linuxCore%ED%8C%8C%EC%9D%BC-gdb-bthttps://incredible-larva.tistory.com/entry/core-dump-%EB%B6%84%EC%84%9D%EC%9D%84-%EC%9C%84%ED%95%9C-gdb-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6.......

[드림핵 문제풀이]hook [내부링크]

hook후킹이랑 함수가 호출되는 중간에 정보를 가로채거나 변조시켜서 공격자가 원하는대로 데이타를 조작하거나변조, 유출하는 행위이다.※문제 소스※※페이로드※1. libc주소 릭 --> __free_hook의 주소를 구하기 위함2. __free_hook의 주소에 one shot 가젯을 올려둔다.3. free함수를 호출하면 __free_hook이 호출되고 one shot가젯이 실행된다.※힘들었던 점※1. libc.symbols['stdout']이렇게만 써서 손으로 구해야했음2. 원샷 가젯들이 많은데 그 중에 대부분이 터져서 일일이 해봐야 했음.3. 로컬에서는 안되고 리모트에서는 되는 일이 종종 발생했다.--> LD_PRELOAD옵션 주면 해결된다.

[드림핵 문제풀이]environ ptr [내부링크]

Environmental ptrEnviron변수==환경변수는 main함수가 시작하기 전에 스택에 세팅되기 때문에 환경변수가 세팅되는 주소를 안다면스택의 주소를 아는 것과 다름이 없다.왜냐하면 environ변수와 main함수에서 쓰이는 변수의 offset만 구하면 결국 스택의 주소를 알 수 있기 때문이다.ASLR이 적용되어도 결국 무용지물이라는 이야기이다.※문제 소스※※페이로드※1. libc주소 릭 -->environ변수의 주소를 알아냄2. environ변수와 buf의 오프셋을 알아낸다.3. environ에 쉘 코드를 올리고 jump로 함수호출※힘들었던 점※1. buf의 크기가 작아 원샷가젯을 많이 시도-->but 원샷가젯들은 두번째 세번째 인자를 세팅하지 않아서.......

[드림핵 문제풀이]rtld [내부링크]

rtld overwritingmain 함수가 종료되고 _dl_fini함수가 실행되는데 이 함수는 또 다른 _rtld_lock_lock_recursive라는함수를 호출한다.이 _rtld_lock_lock_recursive함수는 쓰기 권한이 있어서 Overwriting을 할 수 있다면 함수의 흐름을 제어할 수 있다.※문제 소스※※페이로드※1. Libc주소 릭2. _rtld_lock_lock_recursive주소 구하기3. _rtld_lock_lock_recursive를 원샷가젯으로 덮어버림※힘들었던 점※1. rtld라는 구조체가 너무 길어 겁먹고 풀지 못 했다.2. 주석을 보면 PIE보호 기법을 생각하지 못하고 삽질을 해댄것을 볼 수 있다. --> PIE가 적용되면 코드로 점프하지 못한다.3. vmmap ld를 사용하지 못 했다.4. vmmap할.......

[드림핵 문제풀이]master_canary [내부링크]

master canary 메인쓰레드에서 서브 스레드를 생성할 때 서브 스레드의 카나리는 메인 쓰레드의 카나리값과 동일하다.또한 서브 스레드의 스택이 새로 생성된다.TLS(Tread Local Storage)는 서브 스레드용 전역 변수라고 할 수 있다.새로 생긴 서브 스레드의 스택과 이 TLS영역은 거리가 가깝다.근데 이 TLS영역에는 master canary라고 하는 카나리의 원본 값?이라고 할 수 있는 값이 들어있다.※문제 소스※※페이로드※※힘들었던 점※1. 마스터 카나리와 buffer의 오프셋 구하는 것이 조금 힘들었었다.--> https://jiravvit.tistory.com/entry/Master-canary-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%B9%B4%EB%82%98%EB%A6%AC이 블로그 참고.......

행렬 연산(덧셈법칙, 곱셈법칙...) [내부링크]

※연산 덧셈법칙※1. A+B = B+A2. (A+B)+C=A+(B+C)3. A+ O = O + A = A ( O는 덧셈에 대한 항등원이다, 영행렬)4. k(lA) = (kl)A5. (K+L)A=KA+LA행렬의 덧셈 연산법칙은 상수의 덧셈법칙과 똑같은 것을 볼 수 있습니다.※행렬의 곱셈법칙※행렬의 곱셈법칙은 조금 복잡하다.먼저 (3*2)행렬 A(2*3)행렬 B가 있다.이 두 행렬의 공통점이 보이는가(3*2) * (2*3)가운데 두 숫자가 같아야 한다.왜냐? 그래야 곱하는 매커니즘에 오류가 없기 때문이다.이제 어떻게 곱셈을 하는지 매커니즘을 설명하겠다.이 두 행렬을 곱한다면 이렇게 곱한것이(1,1)성분이 되는 것이다.공식으로 보면 이렇다.공.......

[JAVA] JVM과 JAVA API &&JDK [내부링크]

0x1. JAVAJava는 c언어와 다르게 객체지향프로그래밍이라고 한다.(C언어는 절차 지향 프로그래밍)0x2. 프로그래밍 언어1. 기계어 - 0과 1로 이루어진 이진수 언어 - 컴퓨터의 CPU는 기계어만 처리할 수 있고 이해할 수 있다. 결국 모든 고급언어들의 종착지는 기계어이다.2. 어셈블리어 - CPU가 이해할 수 있는 명령어이다.(Instruction Set) - 어셈블리어도 다양한 종류가 있지만 대표적으로 AT&T와 Intel문법의 어셈어를 많이 쓴다. - 어셈블리어를 이용해 코딩하면 파일의 크기를 어마무시하게 줄일 수 있지만 생산성이 떨어진다.3. 고급언어 - 가장 생산성이 높은 언어이다. - 사람이 제일 이해하고 활용해 프로그래밍에 적합한 언.......

[드림핵 문제풀이]basic_exploitation_002 [내부링크]

자 이번은 포멧스트링 버그 문제입니다print(buf)저 코드로 스택 메모리의 값들을 릭 할 수 있겠죵?그러면 %n포멧스트링으로 원하는 주소에 값을 변경할 수도 있답니다.저는 어렵게 한 바이트 한 바이트씩 한땀한땀 풀이하기는 어렵기 때문에 pwntools의 좋은 기능을 써볼게용한땀한땀 작성하게 된다면 컴퓨터의 보수 표현법에 대해서 잘 아시는 것이 중요합니다.먼저 buf까지의 오프셋을 알기 위해서 스택을 긁어보았습니다offset이 있는 이유는 dummy가 있을 수 있고 다른 변수가 존재한다면 print함수 인자와 buf사이에 공간이 있을 수 있습니다.오프셋이 1이네용포멧스트링을 이용해 exit함수의 got overwrite을 해주었습니다. 물론 덮어쓴.......

GTK를 활용한 리눅스 UI프로그래밍 [내부링크]

이제 막 C언어를 배우고 맨날 콘솔에만 실행결과를 보던 루틴이 질렸다.그래서 리눅스에서는 UI구성을 어떻게 프로그래밍 해야될 것인지 궁금했다.윈도우에서는 윈도우즈 시스템 프로그래밍을 통해서 MFC,QT등 여러가지 UI를 쉽게 만들 수 있게 지원을 하지만리눅스에서는 그런 기능들을 찾아보기가 어려운 것 같다.몇가지 찾아보다가 ncurses와 GTK를 찾아보았는데 ncurses는 조금 구려보여서ㅎㅎGTK API들을 쓰기로 했다. (물론 Project을 위해서 찾아본 것도 있다)GTK는 현재 1부터 3버전까지 나오고 C,C++,PYTHON 등 여러가지 언어를 지원하는 것 같았다.필자는 학교 프로젝트에서 C언어를 쓰는 이유로 C언어로 GTK API들을 사용했다........

[드림핵 문제풀이]off_by_one_000 [내부링크]

자 문제 소스부터 보도록 하겠습니다1. read함수로 cp_name에 256byte만큼 입력받습니다.2. cpy함수에서는 strcpy()함수를 통해서 real_name에 cp_name을 복사합니다.오잉 어떻게 이걸 익스플로잇 하라는거지..?이런 반응이 나올 수 있습니다. 제가 이제 설명드리도록 하겠습니다.여기서 strcpy함수의 취약점이 발생하는데용strcpy는 strcpy(destination,source)이렇게 쓰죵strcpy()함수는 첫번째 인자에 두번째 인자를 복사하고 맨 마지막에 NULL값을 쓰는 순서입니다.자 이것으로 SFP를 한 바이트 바꿀 수 있는데용(Canary가 없는 조건에서)-->Canary가 없는 조건은 문제에도 나와있고 Checksec으로 확인하실 수 있습니다.문제 설.......

[드림핵 문제풀이]off_by_one_001 [내부링크]

자 문제 소스부터 보시겠습니다.age의 값이 0으로 바뀌면 shell이 따지는 구조입니다.그럼 스택을 gdb로도 분석해봐야겠죵?name다음에 age가 있네용read_str함수에서 배열[20]에 NULL을 넣어주니age의 값이 0으로 변조될 수 있겠네용익스 성공..

[드림핵 문제풀이]out_of_bound [내부링크]

문제 소스코드를 보시죠system함수는 system(const char *str)이렇게 이루어져 있습니다.system함수 인자에 "/bin/sh"를 줄 수 있으면 best겠군용자 그럼 name배열에 /bin/sh를 넣어놓고 이걸 system함수의 인자로 줄 수 있다면??-->exploit어떻게 주냐? scanf함수로 idx로 인덱스의 위치를 받고 있기 때문에 충분히 /bin/sh를 인자로 줄 수 있다.자 그럼 name배열이 command배열과 어떤 메모리 위치 관계를 갖는지 gdb로 분석해봅시다.name 0x804a0accommand 0x804a060이렇게 정리할 수 있겠군요0x804a0ac-0x805a060==76입니다그럼 command[76]==name일까용??NOPE NOPE왜냐하면 name과 command의 자료형.......

[드림핵 문제풀이]sint [내부링크]

문제 소스코드를 보시죠나중에 실제 CTF를 나가시게 된다면 이 소스파일도 주지 않으니 gdb또한 익숙해지시는 것이 좋습니다.scanf함수로 buf에 입력받을 사이즈를 입력 받는군요.자 먼저 제목이 sint인 이유는??시스템해킹 강좌에서 보신 Integer Isue를 이용해 푸는 문제입니다.먼저 read()함수의 인자형들을 알려드리도록 하겠습니다.ssize_t read(int fd, void *buf, size_t nbytes);여기서 size_t는 32비트 컴퓨터에서 unsigned int형이고 64bit에서는 unsigned long long이다이 문제의 아키텍쳐는 32bit환경이므로 unsigned int형이 되겠다unsigned int형은 음수가 존재하지 않는다.즉 0에서 -1을 해준다면 underflow되어서2^32 -1.......

[드림핵 문제풀이]basic_rop_x86 [내부링크]

ROP(Return Orientation Programming)ROP는 여러가젯들을 입력값으로 주어서 여러번의 return을 실행해서 해커가 원하는 명령어를 실행하게끔 하는 기법입니다.※문제 소스※※ROP※ROP는 보통 페이로드가 길기 때문에단계별로 나누어서 문제를 풀게 됩니다.Stage 1 -library주소 릭Stage 2 -got overwriting -overwrite한 함수 실행payload 설명1. write함수로 library주소 leak2. read함수로 /bin/sh read_got+6위치에 입력3. read함수로 read_got을 오버라이팅4. over writing된 함수 실행어려움을 느낀 부분1.ret다음에 가젯들을 삽입해주는 것을 해주지 않아 처음에 삽질을 많이 했다.2. 32비트 문제를 많이 풀다보니 4바.......

[드림핵 문제풀이]basic_rop_x64 [내부링크]

ROP in x64bit저번 포스팅에서 32bit환경에서 ROP기법을 사용하였지만 이번에는 64bit환경에서 ROP를 진행하도록하겠습니다.32bit환경과 64bit환경은 함수호출규약이 달라서 ROP기법도 약간 달라지게 됩니다.차이점을 짧게 간추리자면 32bit환경에서는 스택에 올려두기만 해도 함수호출 시 인자로 가져가게 됩니다.반면에 64bit환경에서는 레지스터변수에 함수의 인자를 저장해두기 때문에 스택에 원하는 값을 올려두고이를 레지스터로 옮기는 과정이 필요합니다.※문제 소스※※페이로드※1. 가젯들을 찾아보기2. puts함수로 library주소 릭3. leak한 주소에서 system함수의 위치를 알아내서 실행※힘들었던 점※1. 먼저 가젯들이 몇개 없.......

[드림핵 문제풀이]ssp_000 [내부링크]

카나리 (Canary)버퍼 오버플로우가 발생되는 것을 감지하는 보호 기법buf와 sfp사이에 임의의 값을 넣고 이것이 변조되는 것을 감지한다.※문제소스※※페이로드※1. 버퍼오버플로우 발생시킴2. 카나리 변조시 실행되는 함수의 got overwriting이렇게 버퍼 오버플로우 이후에 got overwriting을 해줘도 되는 이유는 canary 변조 유무는 함수 실행이 모두 끝나고 검사하기 때문입니다.※힘들었던 점※1. 드림핵 예제에는 카나리를 릭해서 하는 문제였기 때문에 생각이 그쪽으로 흘러감2. canary check함수에 got overwrite하는 발생이 생소3. code 영역의 ret을 변조시킬 수 없다 -->쓰기권한이 없기 때문

[드림핵 문제풀이]ssp_001 [내부링크]

※문제소스※※페이로드※1. P로 카나리 값 한 바이트 씩 leak하기2. E로 leak한 카나리 값을 보존하여 return을 over write한다※힘들었던 점※1. ebp이외에도 edi가 스택에 더 들어가서 "B"*8을 해주는 것을 찾는것이 어려웠던 것 같다.2. str형 카나리 값을 hex값으로 변환하는 함수를 찾는 것이 조금 힘들었다.

3월달 계획 [내부링크]

지금까지 요약2020년 12월 -학교 기말고사 -네트워크 공부2021년 1월 -소켓프로그래밍 공부 -리눅스 공부 -운영체제 공부 -시스템 해킹 공부 시작(20일쯤부터 시작)2021년 2월 -FTZ풀이 -LOB풀이 -드림핵 시작 -드림핵 힙 전까지 완료3월달의 계획1.드림핵 시스템해킹 힙까지 다 끝내기2.라젠카 정독 및 실습3.학교 프로젝트 끝내기4.학교 강의, 과제 씹어먹을정도로 하기5.산학연 프로젝트 스크립트 작성2021년도 목표-포너블 힙 익스플로잇 공부-포너블 워게임 사이트 최대한 많이 풀어보기-워게임 사이트 write up 블로그에 포스팅-해킹팀 들어가는 것-BOB들어갈 실력만큼 공부

(해커스쿨 LOB) Level4 풀이 goblin [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름=================1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제**문제 분석**1) 환경 변수를 초기화 시킴2) argv 인자 2개 이상 전달3) ret의 첫번째 값이 \xbf로 시작->스택주소출제자 의도 추.......

(해커스쿨 LOB) Level5 풀이 orc [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름=================1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제 **문제분석**1)환경변수 초기화2)argv인자 2개 이상 전달3)스택주소 사용4)버퍼 초기화출제자 의도 추측->bof사용 환경변수, 버.......

(해커스쿨 LOB) Level6 풀이 wolfman [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.=====포너블의 전체적인 흐름======1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제 **문제 분석**1)2개이상 argv인자 전달2)egghunter로 환경변수 공격 X3)buffer에서 ret값까지만 변조가능 //check the argument 4)버퍼공간 사용불가 //buffer5)스택 메모리를 사용해야함 //stack is still your friend출제자 의도 추측->ret까지만 덮을.......

(해커스쿨 LOB) Level7 풀이 darkelf [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름=================1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제**문제 분석**1)환경변수 공격 X2)argv 인자 2개이상 전달3)argv[0]의 길이가 77이어야함 4)스택 메모리 활용5)ret이후 값 변조 불.......

###앞으로의 드림핵 공부 계획### [내부링크]

2020년도에 대학교 1학년과정이 끝나고 본격적으로 보안 공부를 시작했다. 물론 왜 이렇게 늦은 나이에 공부를 시작했느냐는 질문을 받을 수 있다.옛날부터 하고 싶었던 것들이었지만 학교공부를 하느라 대학교 때 해보자는 생각을 가지고 미루고 있었다.초등학생 때 C언어 공부를 잠깐 시작했었는데 조금 공부하다가 포기했었다.그 당시에 인내심이 부족했었던 것도 있었고 그 때 기본적인수학 베이스와 글을 읽고 해석하는 능력이 부족했었던 것 같다.오히려 중학교, 고등학교에서 기본적으로 배우고 학습하는 것들을 배운 다음 컴퓨터 공부를 제대로 시작해서한편으로는 다행인것 같다. 왜냐하면 공부를 하면서 수많은 문서를 보고 다른 사.......

드림핵 시스템 해킹 1강 [내부링크]

드림핵 1강에서는 시스템 해킹을 하기 전 해킹의 큰 틀을 잡아주었다.해킹의 개념, 역사 , 공격법, 방어법을 간략하게 말해준 것 같다.###명심해야할 것 모든 해킹은 입력벡터(ATTack vector, ATTACK surface)에서 시작함###소개된 공격법을 간략하게 정리해보겠다.시스템 해킹 기법은 크게 메모리 커럽션과 논리적 오류로 나뉜다.메모리 커럽션 1. BOF(buffer overflow)-할당된 버퍼 사이즈보다 더 많은 버퍼를 입력받을 때 발생-ex) buff[3]; read(0, buf,100)2. OUT of Boundary-배열의 인덱스에 음수를 넣거나 배열의 사이즈보다 큰 값을 입력해주면 발생-ex)char test,char buf[3]; printf("%c",buf[-1]);3. OF BY ONE-배.......

드림핵 시스템 해킹 2강 [내부링크]

드림핵 2강과 3강에서는 시스템해킹 공격법에 대해서 소개한다.2강에서는 BOF, Out of boundary, Off by one기법에 대해서 소개한다.1. Buffer OverFlow (BOF)-스택 버퍼 오버플로우, 힙 버퍼 오버 플로우가 있다.메모리는 선형적으로 할당되기 때문에 A에 값을 입력받을 때 A의 사이즈2보다 더 큰 수의 사이즈를 입력받으면B에 저장되어 있는 값이 변경될 수 있다.방지하는 방법 : 길이제한 없는 API들을 길이제한을 걸어둔다. 버퍼의 크기보다 더 큰 입력을 받지 않는다.우리가 편하게 쓰는 scanf함수 하나를 썼다가 우리의 정보가 다 털린다고 생각하니 점점 무서워 졌습니다ㅠㅠ2. Out Of Boundary-할당받은 버퍼길의 범위를 벗.......

드림핵 시스템 해킹 3강 [내부링크]

시스템해킹 공격법에 대해 2강에 이어서 소개하기 때문에 공격법 번호도 4번부터 시작하겠다.4. 포멧 스트링 버그-printf 함수에 %d %x %s와 같은 포멧 스트링을 주었을 때 발생할 수 있는 버그 뒤에 인자가 없을 때 발생한다.방지방법 : 포멧 스트링 버그에 취약한 함수를 사용하지 않는것과 인자를 제대로 주기5. Double Free && Use After Free-Double Free는 한번 해제한 메모리를 한 번 더 해제해주는 것-Use After Free 는 해제된 메모리를 더 사용하는 것이다.방지 방법 : 포인터 변수 사용후에는 꼭 NULL값 주기 번외편1.초기화되지 않은 메모리2. Integer Issues

드림핵 시스템 해킹 5강 [내부링크]

앞에 2,3강에서는 메모리 커럽션을 다루었다면 5강에서는 논리적 오류를 이용한 시스템 해킹을 소개하고 있습니다.5강에서 소개하는 기법은 Command Injection, Race Condition, Path Traversal, Environment Attack이 있습니다.로지컬 버그는 프로그램이 종료되지 않고 부정확하게 동작합니다. 로지컬 버그는 수많은 테스트 케이스들중 하나가 걸리는 것으로 실제 복잡한 프로그래밍을 해보신다면 버그가 이러한 부분에서 발생하게 됩니다.여러분들이 익숙한 게임에서 버그가 발생한다면 이러한 종류일 가능성이 높습니다.1. Command Injection' -Meta문자를 이용해 셸 커맨드를 추가적으로 수행하는 것을 말한다.2. Race Condition-.......

[드림핵 문제풀이]basic_exploitation_000 [내부링크]

드림핵 시스템 해킹 파트 단계별 문제풀이 1단계 write-up을 시작해보겠습니다!!!먼저 파일을 다운받으시면 코드를 볼 수 있습니다.buff에 오버플로우가 나는데 checksec으로 확인해보신다면 아무런 보호 기법이 걸려있지 않습니다.자 그럼 오버플로우 나는 scanf함수로 buffer에 쉘코드를 입력해놓고 ret을 buf의 주소로 변조해주면 되겠죵??^^지금까지는 아주 쉽습니다.여기서 제가 시행착오를 많이 겪었었는데 제가 어려움이 있었던 것은 세가지가 있었습니다.1. Shellcode와 Nop Sled의 위치를 바꾸기만 해줘도 Shell이 안 따임-->쉘+Nop Sled+"AAAA"+"buf addr" (0) Nop Sled+쉘+"AAAA"+"buf a.......

[드림핵 문제풀이]basic_exploitation_001 [내부링크]

전의 문제와 다르게 buf주소가 릭 되지 않았고 메모리의 아무런 정보도 뽑아낼 수 없네용전의 문제는 scanf함수의 잘못된 사용으로 인해서 버퍼 오버플로우가 났었는데이번에는 gets함수의 취약점 때문에 오버플루오가 나겠죵chechsec으로 확인 결과 NX bit가 걸려있었고 ASLR도 또한 생각해주어야 겠죵 -->왜냐하면 ASLR은 현재 거의 대부분의 리눅스 운영체제에 많이 적용되어 있는 기술이니까요ㅎㅎ1. NX bit -->전의 문제처럼 스택에 쉘코드 삽입 후 실행 불가2. ASLR -->basic_exploitation_000이 버퍼의 메모리 주소가 실행마다 바뀐 이유가 ASLR로 스택,힙 영역의 주소가 무작위로 바뀌기 때문!즉, 이 두가지 보호 기법을 우.......

(해커스쿨 LOB) Level1 풀이 [내부링크]

먼저 해커스쿨 LOB 로컬 환경에서 구축한 뒤 로그인 해주세요저는 vmware로 로컬 환경 구축한 뒤 Xshell6로 접속했습니다.저도 공부해킹 공부를 시작하는 단계인만큼 쉽게 설명해드리도록 하겠습니다.먼저 포너블은 root권한을 따오는 것입니다. root권한(관리자 권한) -->시스템 해킹포너블을 하기 위해 먼저 공부하면 좋은 지식 ex)OS, C, 어셈블리어 이정도만 알아도 LOB수준의 문제는 충분하다고 생각합니다.LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름======&#.......

(해커스쿨 LOB) Level2 풀이 [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름=================1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제 **분석 결과**1) argv인자 2개 이상 전달2) 1번문제와 비슷함출제자 의도 추측->buffer overflow 기본개념 strcpy함수 취약.......

(해커스쿨 LOB) Level3 풀이 cobolt [내부링크]

접속LOB을 시작하기 전에 hacker school F.T.Z 공부하는것을 권장드립니다.==============포너블의 전체적인 흐름=================1. 제시된 프로그램의 논리적인 오류나 취약점을 탐색2. 노트에 자신만의 시나리오 구상해보기 tip) 그림 그리기 추천3. 시나리오에 필요한 사전 지식 습득4. 시나리오를 바탕으로 코드작성 및 어택문제 **분석 결과**1) gets함수 취약점 발견2) 1,2번 문제와 비슷한 버퍼오버플로우 이용 가능성출제자 의도 파악->buffer over.......