목록CTF (63)
안 쓰던 블로그
64bit의 인자 32bit 아키텍쳐에서는 함수 호출시 인자를 스택에 저장했다 64bit에서는 함수의 인자를 레지스터 6개와 스택에 저장한다 인자를 저장하는 순서는 다음과 같다 ---레지스터--- rdi: 첫 번째 rsi: 두 번째 rdx: 세 번째 rcx: 네 번째 r8: 다섯 번째 r9: 여섯 번째 ---스택--- r10(%rsp): 일곱 번째 r11, 0x8(%rsp): 여덟 번째 ... 예를 들어 만약에 이런 printf코드가 있을 때 printf("%d %d %d %d %d %d", 1,2,3,4,5,6); gdb로 디스어셈블한 결과는 아래처럼 된다 ... push 0x6 #7번 인자, 스택에 저장 mov r9d, 0x5 #6번 인자 mov r8d, 0x4 #5번 인자 mov ecx, 0x3 #..
gdb 켜서 전역변수 리스트 확인 /bin/sh 주소인 0x0000000000004038 확인 함수 정보 확인 main, nothing, vuln main확인 vuln 함수가 있다 vuln 함수 확인 read를 사용했다 nothing 확인 첫 번째 인자를 받는 레지스터인 rdi rdi를 push rdi를 pop후 return rdi에 원하는 값을 넣으면 return되면서 되겠다 pop rdi 가젯: pop rdi; ret 가젯을 이용하여 첫번째 인자를 받는 레지스터인 rdi에 전역변수 sh의 주소를 넣은 뒤 system 함수를 ret 하면 쉘이 실행 됩니다. 익스플로잇 코드 먼저 ida등에서 버퍼가 16이라는 사실을 알고 있다 16+8=24만큼 더미를 넣는다 하지만 64bit는 다르다... 64bit에서..
DLL 인젝션 DLL 인젝션이란 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 것이다 좀 더 자세하게 말하면 다른 프로세스에게 LoadLibrary() API를 스스로 호출하도록 명령하여 사용자가 원하는 DLL을 로딩하는 것이라고 할 수 있다 DLL 인젝션이 일반적인 DLL 로딩과 다른 점은, 로딩 대상이 되는 프로세스가 나 자신이냐 아니면 다른 프로세스냐 하는 점이다 예를 들어 공격자의 DLL 파일 hack.dll이 있다고 하면, notepad.exe 프로세스의 메모리 공간 어딘가로 강제 삽입을 하여 DLLMain()을 자동호출 시키는 식이다 (참고로 DLLMain()은 프로세스에 DLL이 로딩되면 자동으로 실행된다. 본래는 버그 수정, 기능 추가 등의 목적으로 사용된다. DLL에 대한..
Database = DB 여러 응용 시스템들이 공유할 수 있도록 통합, 저장된 운영 데이터의 집합 특징 1.실시간 접근: 사용자 질의에 대해 즉시 처리 응답 2.계속적인 변화: 삽입, 삭제, 갱신을 통해 정확한 최신 데이터 유지 3.동시 공유: 여러 사용자가 동시에 공유 4.내용에 의한 참조: 사용자가 요구하는 데이터 내용에 따라 참조 5.데이터 논리적 독립성: 데이터 논리 구조가 변경되더라도 응용프로그램은 변경되지 않음 구성 요소 DBMS 데이터 베이스 관리 시스템 응용 프로그램과 데이터의 중재자 모든 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리한다 MySQL -PHP 웹 프로그래밍에서 사용되는 DBMS -대용량 데이터 처리 가능 -오픈소스 GUI기반 툴이 따로 내장되지 않기 때문에 CUI를..
ROP란 ROP(Return Oriented Programming)란 공격자가 실행 공간 보호(NX-bit) 및 ASLR, ASCII Armor나 코드 서명(Code signing)과 같은 보안 방어가 있는 상태에서 코드를 실행할 수 있게 하는 기술이다. 취약한 프로그램 내부에 있는 기계어 코드들의 섹션(가젯: Gadget)을 이용하여 공격 시에 특정 명령을 실행시키는 식으로 수행한다. ROP는 RTL, RTL Chainging Calls, GOT overwrite의 3가지 기법으로 이루어져 있다. 보호기법 NX-bit(Not Excutable, DEP) 아까 ROP란 실행 공간 보호(NX-bit)같은 보안 방어가 있는 상태에서 코드를 실행하여 공격한다고 할 때 등장한 보호기법. NX-bit는 가상 메모..