분류 전체보기

System Hacking Advanced

[dreamhack] __environ

개념정리프로세스는 환경 변수 정보를 저장하고, 필요할 때마다 불러와서 사용한다. 환경 변수 (Environment Variable)는 매번 변할 수 있는 동적인 값들의 모임으로, 시스템의 정보를 갖고 있는 변수다. 사용자가 직접 추가 및 수정하거나 삭제할 수 있는 값으로 리눅스에서 제공하는 명령어들은 “/bin”, “/usr/bin” 등의 디렉터리에 위치한다. 명령어를 입력하면 환경 변수에 명시된 디렉터리에서 명령어를 탐색하고, 실행하기 때문에 명령어의 경로를 입력하지 않아도 된다. 환경 변수는 터미널 뿐만 아니라 프로그램에서도 참조한다. 프로그램에서도 명령어를 실행해야 하는 경우가 종종 있으며, 절대 경로를 입력하지 않아도 명령어를 실행할 수 있다. 이 또한 프로세스를 로드하면서 환경 변수를 초기화하기..

System Hacking Advanced

[dreamhack] Overwrite _rtld_global

개념정리프로그램이 실행되고 프로세스로 등록될 때, 프로그램에 명시된 코드 뿐만이 아니라 프로그램에서 쓰이는 변수를 관리하기 위한 영역을 할당하는 코드가 로더에 의해 실행된다. 프로세스를 종료하는 과정에서 실행되는 라이브러리 함수가 존재하는데, 그 중에서 _rtld_global 구조체와 관련된 라이브러리 함수를 알아보고 어떻게 취약점이 발생하는지 알아보자. return 명령으로 프로그램이 종료된다면 __run_exit_handlers()에 있는 _dl_fini()가 호출된다. ○ _dl_fini()#define __rtld_lock_lock_recursive(NAME) \ GL(dl_rtld_lock_recursive) (&(NAME).mutex)void_dl_fini (void){#ifdef SHARE..

System Hacking Advanced

[dreamhack] SECCOMP 개념

○ Sandbox샌드박스 (Sandbox)는 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법이다. 샌드박스는 Allow List와 Deny List 두 가지를 선택해 적용할 수 있으며, 애플리케이션의 기능을 수행하는데에 있어서 꼭 필요한 시스템 콜 실행, 파일의 접근만을 허용한다. sandbox는 웹 브라우저, 가상머신, OS (android, linux) 등의 환경에서 외부의 공격을 최소화하기위한 보안 기능이다. sandbox 매커니즘은 Seccomp, AppArmor, SELinux, Firejail 등 운영체제 또는 기능에 따라 여러가지가 존재한다. 이 중에서 리눅스 커널에서 제공하는 seccomp에 대해 알아보자. ○ seccompseccomp은 리눅스 커널에서 제공하는 샌드박스 매커니즘 ..

wargame.kr

[wargame.kr] DLL with nodepad

문제분석 & 풀이DLL 파일을 분석해보자. ○ start()int __cdecl start(LPVOID lpParameter){ wchar_t *v1; // eax WCHAR Filename[256]; // [esp+4h] [ebp-204h] BYREF if ( GetModuleFileNameW(0, Filename, 0x200u) ) { v1 = wcsrchr(Filename, 0x5Cu); if ( v1 ) { if ( !wcsicmp(v1 + 1, L"notepad.exe") ) { dword_70A833A8 = (int)CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartAddress, lpParameter, ..

Web Hacking Advanced

[dreamhack] DOM XSS

문제풀이@app.after_requestdef add_header(response): global nonce response.headers['Content-Security-Policy'] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}' 'strict-dynamic'" nonce = os.urandom(16).hex() return responsecsp를 보면 script-src에서 strict-dynamic이 존재한다. strict-dynamic는 동적으로 스크립트를 로드하는 것을 허용한다는 의미다. 사실 이 문제는..

Web Hacking Advanced

[dreamhack] Relative Path Overwrite

개념정리○ Relative Path Overwrite(RPO)서버와 클라이언트가 경로를 해석하는 차이를 이용한 취약점이다. 다음 예제를 보자. 1. 절대 경로2. 상대경로2가지 태그의 차이점은 경로 생성방식이다. 만약, rpo.php라는 페이지가 있다고 가정하자. filter.js를 상대경로로 지정했다. 따라서 RPO 취약점이 발생 가능한 상황이다. 다음과 같이 경로를 요청하면/index.php/ src가 로드되는 과정에서 /index.php/filter.js 와 같이 잘못된 경로로 filter.js를 요청하게된다. 따라서 오류가 발생하고 filter.js가 로드되지않는다.→ 즉, XSS 가능 위와 같이 쿠키를 탈취하는 payload를 작성했다. /index.php/?page=vuln&param=payl..

keyme
'분류 전체보기' 카테고리의 글 목록 (7 Page)