반응형

Security&Hacking/시스템 해킹 35

프로토스타

프로토스타 프로토스타는 시스템 해킹에 대해 단계별로 문제를 만들어 놓은 것으로 단계적으로 공부하기에 좋다. 이번에는 스택 오버플로우에 관한 문제들을 풀어보도록 한다. stack0 stack0의 코드이다. #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); } } 코드 내용을 보면 입력을 받을 때 64개를 넘어 modified가 int값이므로..

리눅스 GDB

리눅스 GDB 리눅스 운영체제 환경에서의 시스템 해킹을 실습하도록 한다. 운영체제는 칼리리눅스를 사용했다. 32비트 환경 실행 라이브러리를 설치해준다. sudo apt-get install lib32z1 다음은 칼리 리눅스의 ASLR을 해제해준다. echo 0 | sudo tee /proc/sys/kernel/randomize_va_space 이번 실습은 liveoverflow의 파일을 이용하여 진행한다. wget https://github.com/LiveOverflow/liveoverflow_youtube/raw/master/0x05_simple_crackme_intro_assembler/license_1 chmod 755 ./license_1 리눅스 GDB를 설치해준다. sudo apt install..

스택 오버플로우

스택 오버플로우 이번 글은 스택 오버플로우에 대한 설명은 아니고 간단한 스택 오버플로우 실습을 해보려고 한다. 이 실습을 위해 windows xp를 vmware에 설치하였다. 먼저 간단한 프로그램을 실습하도록 한다. Basic_BoF.exe 프로그램을 만들었다. 일반적으로 프로그램에서 사용되는 변수공간 아래 EBP 공간 4바이트 ret 4바이트가 존재한다. 이 프로그램은 사용자의 입력을 받는데 buffer의 크기가 char[100]이다. 100바이트를 입력받고 8개의 입력값이 더 들어오면 ebp에 4개 ret 값이 마지막 4개로 덮어쓰여지게 된다. A 100개와 B 4개 C 4개를 입력한 결과이다. 오류창의 Offset을 보면 리턴 값으로 43434343 즉, CCCC가 입력된 것을 알 수있다. 다음엔 ..

취약점 점검 도구 Nessus

취약점 점검 도구 Nessus Nessus를 활용하여 취약점을 점검하고 대응 방안도 찾아보도록 한다. 실습 진행은 Nessus를 사용하고 metasploitable v2의 취약점을 점검하도록 한다. 가장 먼저 칼리 리눅스와 metasploitable v2를 vmware에 설치해준다. 설치 과정은 생략한다. metasploitable의 id pw는 msfadmin/ msfadmin이다. 칼리리눅스가 32비트인지 64비트인지를 확인해준다. uname -r 다음 명령어를 사용하면 확인할 수 있다. https://www.tenable.com/products/nessus 다운로드를 위해 register를 하고 인증코드를 이메일로 받은 후 다운로드를 진행한다. 이전에 확인한 칼리 리눅스의 비트수에 맞추어 다운로드를..

웹 애플리케이션 취약점 CVE-2017-5638

웹 애플리케이션 취약점 CVE-2017-5638 CVE-2017-5638 은 jakarta Multipart parser를 기반으로 한 파일 업로드를 할 때 HTTP Request 헤더의 Content-Type을 변조하여 원격 코드 실행이 가능한 취약점이다. 해당 취약점은 Apache Struts 2.3.5~2.3.31, 2.5~ 2.5.10 버전에서 일어난다. 실습을 진행하기 위해 환경을 구성하도록 한다. 칼리리눅스를 vmware에 설치해주고 실행해준다. 이전 칼리 리눅스는 root, toor로 로그인을 했지만 2020년부터의 칼리리눅스는 ID: kali PW: kali 를 이용해 로그인한다. 다음은 도커를 설치해준다. apt update를 먼저 해준다. sudo apt update 다음은 도커를 설치..

해커스쿨 ftz level20 (macOS)

해커스쿨 ftz Level20 MacOS에서 푸는 해커스쿨 ftz 해커스쿨 ftz level20 단계이다. 드디어 마지막이다. 먼저 ftz서버를 실행한다. 서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다. Mac의 터미널을 열어 서버에 접속합니다. 명령어는 ssh -c aes128-cbc level20@서버ip 라고 입력합니다. Id: level20, pw: we are just regular guys 로 로그인하고 파일을 확인하였다. hint를 확인하니 이번에는 배열의 크기보다 작은 크기의 값을 입력받는다. 이번에는 printf에 bleh라는 배열을 그대로 넣어 출력하기 때문에 이를 이용해야겠다. 프로그램을 실행하여 아무값이나 넣어보았다. 일반 문자는 그대로 출력하는 반면 서식문자는 메..

해커스쿨 ftz level19 (macOS)

해커스쿨 ftz Level19 MacOS에서 푸는 해커스쿨 ftz 해커스쿨 ftz level19 단계이다. 먼저 ftz서버를 실행한다. 서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다. Mac의 터미널을 열어 서버에 접속합니다. 명령어는 ssh -c aes128-cbc level19@서버ip 라고 입력합니다. Id: level19, pw: swimming in pink 로 로그인을 하고 파일을 확인하였다. hint를 확인하였는데 비교적 짧은 코드가 나왔다. setreuid함수가 없어서 이를 포함한 쉘코드를 환경변수를 사용하여 풀어야겠다. Gdb를 실행하였다. Main함수의 구조를 살펴보니 44바이트를 채우고 shell 코드의 주소를 넣으면 될 것 같다. tmp로 이동하여 환경변수에 등록하..

해커스쿨 ftz level18 (macOS)

해커스쿨 ftz Level18 MacOS에서 푸는 해커스쿨 ftz 해커스쿨 ftz level18 단계이다. 먼저 ftz서버를 실행한다. 서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다. Mac의 터미널을 열어 서버에 접속합니다. 명령어는 ssh -c aes128-cbc level18@서버ip 라고 입력합니다. Id: level18, pw: why did you do it 으로 로그인하여 파일을 확인하였다. hint를 확인하니 이전보다 긴 코드가 출력되었다. 쉘이 실행되기 위해서는 shellout함수가 실행되어야하고 그러기 위해서는 check값이 0xdeadbeef가 되어야 한다. gdb를 실행하였다. Main함수를 보니 코드처럼 내용이 많았다. check의 값보다 높은 주소에 string..

해커스쿨 ftz level17 (macOS)

해커스쿨 ftz Level17 MacOS에서 푸는 해커스쿨 ftz 해커스쿨 ftz level17 단계이다. 먼저 ftz서버를 실행한다. 서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다. Mac의 터미널을 열어 서버에 접속합니다. 명령어는 ssh -c aes128-cbc level17@서버ip 라고 입력합니다. Id: level17, pw: king poetic 로 로그인을 하고 파일을 확인하였다. hint를 확인하니 이전단계의 코드에서 shell함수가 사라졌다. 쉘코드를 환경변수를 이용하여 사용해야겠다. gdb를 사용하였다. Main함수를 보니 15바이트의 nop코드 후 shell코드를 넣으면 될 것 같다. $export EGG=`python -c 'print"\x90"*15+"\x31\..

해커스쿨 ftz level16 (macOS)

해커스쿨 ftz Level16 MacOS에서 푸는 해커스쿨 ftz 해커스쿨 ftz level16 단계이다. 먼저 ftz서버를 실행한다. 서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다. Mac의 터미널을 열어 서버에 접속합니다. 명령어는 ssh -c aes128-cbc level16@서버ip 라고 입력합니다. Id: level16, pw: about to cause mass 로 로그인하여 파일을 확인하였다. hint를 확인하니 shell함수와 printit함수, main함수가 보인다. Main함수는 printit 함수의 주소를 호출하는데 이를 shell함수의 주소로 바꾸어주면 될 것 같다. gdb를 통해 main함수를 확인했다. 20바이트의 buf와 20바이트의 dummy를 아무값으로 채..

반응형