목록INTERLUDE/System Hacking (40)
Information Security

https://dreamhack.io/wargame/challenges/33/ ssp_001 Description 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세 dreamhack.io 파일 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); a..

https://dreamhack.io/wargame/challenges/351/ Return Address Overwrite Description Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다. dreamhack.io 문제 파일 코드 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, a..

https://dreamhack.io/wargame/challenges/410/ shell_basic Description 입력한 셸코드를 실행하는 프로그램입니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 위치와 이름은 /home/ dreamhack.io objdump 를 이용한 shellcode 추출 마지막으로, 작성한 shellcode를 byte code(opcode)의 형태로 추출하는 방법을 알아보겠습니다. 아래 주어진 shellcode.asm 에 대해서 이를 바이트 코드로 바꾸는 과정입니다. step1-shellcode.o $ sudo apt-get install nasm $ nasm -f el..

git 설치 sudo apt install git-all pwngdb 설치 git clone http://github.com/pwndbg/pwndbg 디렉토리 이동 후 셋업파일 실행 cd pwndbg ./setup.sh 오류가 계속되어서 다른 툴을 사용하기로 하였다 sudo apt-get install gdb -y git clone https://github.com/longld/peda.git ~/peda sudo apt update sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential sudo python3 -m pip install --upgrade pip sudo python3 -m pip ..

basic_exploitation_000 | 워게임 | Dreamhack 106바이트는 아무 문자나 채우고 RET 전까지 바이트를 채움. buf의 주소값을 32비트 리틀엔디안 패킹 방식으로 넣어줌. interactive를 통해 쉘에 접속 -- 2022.10.04-- 접속 성공 참고 블로그 https://velog.io/@silvergun8291/Dreamhack-basicexploitation000 [Dreamhack] basic_exploitation_000 basic_exploitation_000소스코드를 출력해보면scanf("%141s", buf)에서 buf에는 141 Byte 크기의 문자열을 입력받지만, 입력값이 141 Byte를 넘으면 남는 값은 버퍼에 그대로 남게 됩니다.결론적으로 입력 크기에..

멀티 태스킹이 가능하기 때문에 메모리에는 여러 개의 프로세스가 저장되어 병렬적으로 작업 수행 가용한 메모리 영역에는 여러 개의 segment들 저장 가능 segment는 stack, code, data로 구성 code segment: 시스템이 알아들을 수 있는 명령어(instruction) data segment: 프로그램이 실행시에 사용되는 데이터 stack segment: 현재 수행되고 있는 handler, task, program이 저장하는 데이터 영역 레지스터(register): CPU 내부에 존재하는 메모리 범용 레지스터: 논리 연산, 수리 연산에 사용되는 피연산자, 주소를 계산하는데 사용되는 피연산자, 메모리 포인터가 저장되는 레지스터 세그먼트 레지스터: code segment, data se..

level 11처럼 attackme가 포함되어 있다 hint를 열어보니 코드가 적혀 있다 코드에 대해 분석해보자 #include #include #include int main( void ) { char str[256]; setreuid( 3093, 3093 ); printf( "문장을 입력하세요.\n" ); gets( str ); printf( "%s\n", str ); } gets를 통해 str을 받아 출력하는 코드라고 해석할 수 있다 gdb를 사용하여 attackme를 분석해보자 49번을 보면 ebp-264부터 입력을 받는 것을 알 수 있다 낮은 주소 str[256] dummy[8] SFP[4] RET[4] 높은 주소 level11가 같은 스택 구조임을 알 수 있다 환경변수를 사용해 문제를 풀어보자..

Level 11 지금까지의 문제와 다르게 attackme가 존재하는 걸 볼 수 있다 코드를 해석해보자 #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); } 배열 str가 존재하고 설정한 권한으로 권한을 바꿔주고 argv[1]을 str에 복사해준 다음 str을 출력해준다 문제점: str은 256의 크기인데 입력값의 크기를 지정해주고 있지 않다 => 버퍼오버플로우의 문제 attackme를 읽어보자 이상한 글자가 나온다... gdb를 이용해 attackme 프로그램을 디버깅해보자 => gdb [프로그램명] disas main..