분류 전체보기

Web Hacking Advanced

[dreamhack] php-1

개념정리PHP Wrapper를 이용한 LFI 취약점을 실습하는 문제다. ○ LFILFI(Local File Inclusion) 취약점은 웹 애플리케이션에서 발생할 수 있으며, 공격자가 악의적인 목적으로 웹 서버의 파일 시스템에 접근하여 중요한 파일을 읽거나 실행할 수 있는 취약점이다. LFI는 주로 웹 애플리케이션에서 파일을 동적으로 로드할 때 발생한다. 이때, 애플리케이션은 파일 이름을 사용자 입력값으로 받아들이는데, 이 입력값에 대한 검증이 제대로 이루어지지 않으면 공격자가 파일 시스템의 다른 파일에 접근할 수 있다. 공격자는 LFI 취약점을 이용하여 애플리케이션의 설정 파일, 암호화된 비밀번호, 데이터베이스 정보 등 중요한 정보를 탈취할 수 있다. 또한 공격자는 원격 코드 실행(RCE) 공격을 수행..

System Hacking Advanced

[dreamhack] basic_exploitation_002

문제분석void get_shell() { system("/bin/sh");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0);}read(0, buf, 0x80)에서 길이에 대한 검증을 수행하고 있다. 따라서 일반적인 BOF는 발생하지 않는다. 그렇다면 어떤 취약점이 존재하는 것일까?printf(buf);위 코드에서 Format String Bug 취약점이 발생한다. printf 함수를 사용할 때, 포맷스트링을 지정하지 않고 buf를 1번째 인자로 사용하도록 코드를 작성한 상황이다. 이는 출력함수를 잘못된 방식으로 사용한 경우다. 포맷스..

System Hacking Advanced

[dreamhack] shell_basic

쉘코드를 작성하는 문제다. execve(), execveat()처럼 쉘을 실행하는 함수는 사용할 수 없다. 문제 의도는 다른 함수를 이용해서 flag를 읽을 수 있도록 쉘코드를 작성하는 것이 목표다. 설명에서 flag 파일 위치를 절대경로로 알려주고 있다. 일반적인 쉘코드는 execve("/bin/sh", ..., ...) 처럼 쉘을 실행하는 유형이 대부분이다. 그러나 execve()를 사용할 수 없는 상황이므로 일반적인 쉘코드를 사용해서 쉘을 획득하는 것은 불가능하다. 그렇다면, flag를 어떻게 획득할 수 있을까? 목표는 쉘을 실행하는 것이 아니라 flag를 획득하는 것이다. 그렇다면, execve()를 사용하지 않고 read(), write()로 flag를 읽는 방식으로 접근해볼 수 있다. read..

System Hacking Advanced

[dreamhack] basic_exploitation_001

basic_exploitation_001void read_flag() { system("cat /flag");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0;}입력 길이에 대한 검증이 없다. 따라서 BOF가 발생한다.read_flag() 함수는 flag를 읽는 코드이므로 RET을 read_flag() 주소로 덮으면 flag를 얻을 수 있다. read_flag() 주소를 구해보자.pwndbg> p read_flag$1 = {} 0x80485b9 gdb로 read_flag() 주소를 출력한 결과다.0x80485b9다. RET을 0x80485b9으로 덮으면 flag를 획득할 수 ..

System Hacking Advanced

[dreamhack] basic_exploitation_000

basic_exploitation_000Ubuntu 16.04Arch: i386-32-littleRELRO: No RELROStack: No canary foundNX: NX disabledPIE: No PIE (0x8048000)RWX: Has RWX segments보호기법이 적용되지 않은 문제다.int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0;}입력 길이를 141 바이트로 제한하고 있지만 buf 크기는 0x80(128) 바이트다. 따라서 BOF(Buffer ..

wargame.kr

[wargame.kr] dmbs335

보호되어 있는 글입니다.

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