전체 글 (53) 썸네일형 리스트형 안티 익스플로잇 기술 공부를 하다가 어느 블로그에 들어가게 되었는데 흥미로운 내용이 있어서 적어둔다. ( 나중에 천천히 한번 읽어봐야겠다. ) *) AAAS (ASCII Armored Address Space) AAAS는 굉장히 흥미로운 아이디어다. 아이디어는 라이브러리들을 (일반적으로는 어떤 ET_DYN 오브젝트) 최초 16 MB 주소 공간에 로드하는 것이다. 결과적으로 이 모든 공유라이브러리의 코드와 데이터는 주소의 시작이 NULL로 시작되는 위치에 존재하게 된다. 이것은 자연스럽게 strcpy와 같이 NULL 문자열을 받지 못하는 함수들에 의한 오버플로우 버그들에 대항하게 된다. 이런 방어들은 본질적으로 NULL 바이트 이슈가 없는 (예를들어 Linux/*BSD x86 시스템의 PLT와 같은) 것에 대해서는 효과가 없다.. 카나리 ( canary ) 생성방식 일반적으로 네트워크 데몬들은 clone 또는 fork를 통해 새로운 접속에 대해 스레드를 생성 fork의 경우 child process가 execve를 호출 하느냐 안하느냐 2가지 경우로 구분 Using fork : fork 시스템 호출은 프로세스를 복제 = 카나리가 함수 단위로 생성되는 것이 아니라 프로세스 단위로 생성되기 때문에 부모와 자식이 동일한 카나리를 공유 몇번의 시도로 카나리를 추측할 수 있다는 의미 ( 요청할 때마다 동일한 카나리를 가지기 때문 ) 카나리는 총 4바이트이고 terminator 카나리라면 하위 바이트는 0x00으로 고정, 나머지 3바이트를 추측하는 것이기 때문에 최대 255 * 3의 시도로 카나리를 찾을 수 있다( by Ben Hawkes ). Using execve : ex.. 교육내용_2 난수와 의사난수 비밀키 암호와 블록암호 응용방식 공개키 암호 암호 공격 난수, 의사난수 길이가 긴, 길이를 예측할 수 없고, 통계적 특성을 가지지 않는비밀키로 적합한 '난수' 난수 ( random number ) 무작위로 나열된 수의 집합, 난수를 만들기는 매우 어렵고, 수학적으로 명확하게 정의하는 것 또한 어렵다. 의사난수 알고리즘으로 생성된 난수 매번 난수 테스트들을 통과하는 방법으로 난수를 생성하기는 어렵기 때문에 효율적인 난수 발생기가 필요하다. 의사난수는 난수가 아니다, 예측이 쉽지 않은 의사난수는 암호에서 비밀키로 사용이 가능하다. 공개키 암호 비밀키 암호 암호화하기 위해 사용한 키를 비밀로 가지고 있고, 키를 가지고 있는 사람들은 암호화 한 데이터를 복호화 할 수 있는 암호화 방식 키가 공개.. 암호학_교육내용 크립텍트, 에너그램 암호화, 평문, 암호문, 복호화 암호화 Encryption f(plain) = encrypted 복호화 Decryption f(-1)(encrypted) = plain -1 = 역함수 암호문들의 집합 복호화 @ A # = > B $ C 암호화 A @ B = > # C $ ====암호함수의 중요한 점==== 암호화는 쉬운데 복호화가 어려운 것, 암호함수의 역함수를 쉽게 찾을 수 있으면 안된다 일방향 함수 고전암호 ======전치암호====== 전치암호는 평문의 문자 순서를 재배치하여 암호화하는 것이다 ======치환암호====== 아래는 각각의 암호학에 맞게 코딩한 python 코드이다. 스키테일 ( scytale ) 스키테일 암호는 APPLE이라는 문자열이 있을 때 key값을 n으로 .. ROPasaurusrex 문제 풀이 ROPasaurusrex문제는 이름에서 보이듯 ROP취약점을 이용해 권한( 쉘 )을 따와야 하는 문제이다.ROP는 NXbit나 ASRL보호 기법을 우회하는 공격이다. ROP를 하려면 우선 세가지의 기법을 알아두는 것이 좋다. 이에 대해서는 어떤 블로그에 자세히 설명되어있어 이 블로그를 참고했다. RTLRTL_chainingGOT_overwrite 이 세가지 기법을 공부하면 ROP를 하기 수월해 질 것이다.우리가 ropasaurusrex를 ROP하기 위해서는 exploit을 하기 위한 재료들이 필요하다. 그러기 위해서는 어떤 재료가 필요한지 알 필요가 있다. 제일 먼저 checksec명령어를 통해서 ROPasaurusrex의 보호 기법들을 확인해 보자, 그리고 file이라는 명령을 통해서 바이너리를 살펴보.. gdb 내에서의 명령어 메모 set disassembly-flavor intel 어셈블리 형식을 intel 형식으로 설정 disas [함수명] 함수명을 디스어셈블코드로 출력 ex) disas main b *[브레이크 지점] 브레이크 지점에서 프로그램이 멈추도록 설정 r ( run ) 프로그램 실행 k ( kill ) 프로그램 종료 x 명령어 메모리를 조사 +옵션 o : 8진법으로 보여줌 x : 16진법으로 보여줌 u : 10진법으로 보여줌 t : 2진법으로 보여줌 b : 1 byte 단위로 보여줌(byte) h : 2 byte 단위로 보여줌(half word) w: 4 byte 단위로 보여줌(word) g : 8 byte 단위로 보여줌(giant) i : 역어셈블된 명령어의 명령 메모리를 볼수 있음 c : ASCII 표의 바이트를 .. objdump 명령어 메모 objdump 명령어 + 옵션 바이너리 덤프 작업, 파일 디스어셈블 작업이 가능하다. 1. 바이너리 덤프 작업 objdump -s 1_1 내가 원하는 섹션만 출력 objdump -j [섹션명] 2. 지정 가능한 오브젝트 파일 형식을 보는 명령어 objdump -i 3. 섹션헤더만 쫙 출력 objdump -h 4. 순수하게 바이너리만 출력 objdump -b 5. 파일 디스어셈블 objdump -d ( 보통 .text섹션 같은 부분만 디스어셈블 모든 섹션을 디스 어셈블하고 싶으면 -D 대문자로 입력 ) 5_1. 파일 디스어셈블 특정 섹션만 디스어셈블 objdump -d -j [섹션명] [ pwnable.kr ] input 문제풀이 이번 문제는 이름이 input이다보니 입력에 대한 문제일 것 같다. 이번에도 역시 ssh로 서버에 연결해야 한다. ssh input2@pwnable.kr -p2222 (pw:guest) 이전 1 2 3 4 5 6 7 다음