전체 글 74

Return-to-DL(Dynamic Linker) Exploitation

Return to Dynamic Linker (RTDL)작성자: 진용휘날짜: 2014년 2월 14일 금요일 이 글은 다음 선행 지식을 필요로 한다: ELF에서의 plt, got. 그리고 ASLR(이건 딱히 필요는 없다).이 글에서는 로더의 소스가 아닌 내부에서 참조하는 정보의 흐름만 간략하게 다루기 때문에 아래의 두 글을 먼저 읽어보는것도 좋을거라고 생각한다.http://pwn3r.tistory.com/entry/Docs-Reusing-Dynamic-Linker-for-Exploitation - DYNAMIC 섹션 덮어쓰기 및 동적 링커 재사용으로 함수 주소 불러오기https://web.archive.org/web/20081215162517/http://x82.inetcop.org/h0me/papers/..

카테고리 없음 2014.02.14

보안을 시작하게 된 계기

블로그에 일기를 쓰는것도 좋을것 같아서 써본다. 나는 뭐든지 재밌으면 깊이 파는 초등학생이었다.피아노를 배워서 콩쿠르에서 입상도 해보고(선생님 덕이다) 단소도 배워보고 공부도 하고..(공부가 그럭저럭 재밌었던것 같다) 여러가지를 해본 것 같다. 이건 나한테 약간 행운이기도 했다.그러던 어느 날 초등학교 3학년 때, 사촌형이 와서 윈도를 설치해주고 있었다. 그 형이 윈도를 설치하는 것을 보고 나도 저렇게 해보고싶다 라는 생각이 들었고, 그때부터 컴퓨터에 관심을 갖기 시작했다. 부모님한테 컴퓨터학원을 가고싶다고 조른것도 이때부터같다.4학년 말, 피아노 학원을 끊고 컴퓨터 학원을 다니기 시작했다. (벌써 8년째다) 나는 컴퓨터 프로그래머가 되고싶다 라는 꿈을 갖고 학원에서 많은 것을 배웠다. 워드프로세서 2급..

카테고리 없음 2014.02.04

코드게이트 2014 해킹방어대회 일정

"코드게이트" 2014 해킹방어대회 및 컨퍼런스에 대한 일정 및 포스터가 발행되었는데요.코드게이트 해킹방어대회 신청은 http://ctf.codegate.org/ 에서 하실 수 있습니다.포스터: 팀전은 한 팀당 최대 4명으로 인원이 제한되며, 주니어 대회는 개인전입니다. 주니어 대회 예선은 2014.2.8일 10시~22시동안 진행하며(한국 시간 기준) 본선은 2014. 4. 3일 10:00 ~ 17:00 동안 진행하게 됩니다.일반부 대회 예선은 2014.2.22일 21:00 ~ 2014.2.24 03:00 까지 진행되며, 본선은 2014. 4. 1 21:00 ~ 2014.4.2 ~ 17:00 까지 진행됩니다. 본선은 주니어: 서울 삼성동 COEX 그랜드볼륨 1층, 일반부: 서울 삼성동 COEX 그랜드볼륨..

카테고리 없음 2014.01.29

PHDays Qual - stand back, we have PHDays!

개인적으로 재미진 문제였고 이 문제덕분에 조금 감이 돌아온 것 같다. 이 문제는 index.php~라는 백업 파일을 갖고 있다. 솔직히 이 부분은 대회에서 가장 마음이 안 드는 부분이다.누가 소스코드 백업을 저렇게 해놨을거라고 상상했겠나! 이 문제 설명은 없고, secure:LthGfhjkm 로 접속이 가능하다.주어진 아이디와 비밀번호로 http://195.133.87.167/ 에 접속해본다. 소스를 보면 Home 링크 외에 아무 것도 제대로 링크되지 않았다.#로 다 링크되어있고 자바스크립트도 원본과 대조해봤는데 똑같다. 근데 쿠키에 uid라는 쿠키가 있었다.url-encode가 된 base64문자열이 있는데, 풀어보면 32글자의 이상한 암호화된 글자들이다. 대준이가 index.php~ 라는 소스 코드가..

카테고리 없음 2014.01.28

스택에 ASLR이 걸려있고 NX가 없을 때 argv로 nopsled가 가능할까요

스택에 ASLR이 걸려있고 NX가 없을 때 argv로 nopsled가 가능할까요?네! 가능해요. 일반적으로 한 argv 값 안에 엄청 긴 문자열이 들어가게 되면 argument list too long 이라는 게 뜨게 되지만, 여러개로 나눈다면 달라져요.물론 argc를 체크한다면 그러면 안되겠죠.. 아래는 간단한 프로그램의 결과에요. 프로그램 내용은.. #include int main(int argc, char **argv) { char **framep; asm("movl %%ebp, %0" : "=r" (framep)); char** framepp; framepp = framep; printf("argc: %p\n", &argc); printf("argv: %p\n", &argv); printf("ar..

카테고리 없음 2014.01.18

취약점 공격 연습용, '허점이 많은 프로그램' 0.1

아래 프로그램은 허점이 많지만, uaf/fsb/bof 를 공부하시는 분들에게 도움이 될까 해서 올렸어요.기능은..malloc -> 숫자를 입력하면 그만큼 힙에 메모리를 할당한다.free -> 주소를 10진수 또는 16진수(앞에 0x 붙여야함) 의 숫자로 입력하면 그 주소를 free 함수로 메모리 할당 해제시켜준다.exit -> return해준다.fsb -> 입력한 문자의 형식 문자대로 printf해주고 한 줄을 띄워준다.컴파일 옵션은 -fno-stack-protection 이면 될것 같아요.실행할 때는 환경변수MALLOC_CHECK_를 0으로 설정하고 실행하시면 좋아요. :) 해킹 재밌게 하세요. #include #include #include int main() { char buf[256]; int v..

카테고리 없음 2014.01.17

파이썬 랜덤 어택

파이썬의 랜덤 함수 중 random.Random().getrandbits 를 쓸 때는 주의해야 될거에요.일단 '32의 배수' 단위로 쓰지 마세요.그리고 31, 30 등 32보다 약간 작은 숫자도 쓰지 마세요. 파이썬의 랜덤 함수 구조는 이래요.메르센 트위스트 라고도 하는데, 그 구조를 이용해요. 624번 어떤 랜덤 테이블을 쓰는데, 이를 state라고 불러요.http://svn.python.org/view/python/trunk/Modules/_randommodule.c?view=markup소스를 참고하면 알 수 있어요. getrandbits 함수는 genrand_int32 라는 함수로 32비트 단위로 숫자를 불러와요.만약 getrandbits(32)를 쓴다면.. :( 그 수가 그대로 나오네요! genr..

카테고리 없음 2014.01.13

gdb 팁

개인적으로 쓰곤 하는 gdb 팁들입니다. 브릭포인트 설정b 함수이렇게도 가능하고b *함수+주소이런 식으로 함수의 상대 주소로도 가능해요.b *주소이렇게도 가능해요.물론b *(연산)이렇게 연산에 주소+주소 이렇게도 가능하죠. 브릭포인트 해제d 브릭포인트번호dd 만 입력할 경우 모든 브릭포인트를 지울 지 확인하는 창이 나와요.y 누르면 다 삭제될 거에요. 함수 정의define 함수이름-> 하면 명령어들을 치고 엔터를 치라고 나온다. 끝은 end 라고 치면 끝난다.set $edx=$arg0end 이러면함수이름 1하면 $edx가 1이 된다. 조건 반대로 하기(32비트, 64비트)그냥 쉬워요. 만약 ZF 를 바꾸고 싶다면set $eflags=$eflags ^ 64를 하면 되거든요.위의 표대로 하면 될 거에요.zf..

카테고리 없음 2014.01.13

ROP 가젯 - 약간 착각할 만 한것

일단 ROP 가젯을 찾으려면 '정적인 공간'을 쓰는, '실행이 되는 영역'의, '필요한 명령어 바이트'를 찾아야됩니다. ROP가젯을 찾다보면, 그냥 ida에서 무턱대고 찾는다던지, objdump 해서 찾는다던지 할때 안보이는 가젯이 있을 경우가 있죠. 예를 들어 pop eax는 1바이트입니다. 그리고 어셈블러로 컴파일하면, 0: 58 pop eax 0: cd 58 int 0x58 오, 좋군요. 이게 뭐죠? int 0x58 아닌가요? cd 58이죠? 바이트가? int 0x58을 실행할 수도 있지만.. 저기서 1바이트를 더해서 실행할 수도 있죠. 대체로 pop ~ pop ~ ret 명령어의 경우에는 3바이트를 차지하던데요. 0: 5d pop ebp 1: 5a pop edx 2: c3 ret 0: b8 5d ..

카테고리 없음 2013.08.15