목록분류 전체보기 (285)
tmxklab
1. 문제 nc ctf.j0n9hyun.xyz 3019 1) mitigation 2) 문제 확인 제한된 길이의 값만큼 출력 가능 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(stdout, 0, 2, 0); return vuln(); } 3-2) vuln() int vuln() { char nptr; // [esp+1Ch] [ebp-2Ch] int v2; // [esp+3Ch] [ebp-Ch] printf("How many bytes do you want me to read? "); get_n(&nptr, 4); v2 = atoi(&nptr); if ( v2 > 32 ) ret..
1. 문제 nc svc.pwnable.xyz 30044 1) mitigation 확인 2) 문제 확인 default program을 실행 시킬 것인지 물어봄 'y'를 입력한 경우 : 이름을 입력하고 프로그램 종료 'n'를 입력한 경우 : program을 보내기 위해 입력을 받을 수 있음 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { size_t program_size; // [rsp+28h] [rbp-1018h] char program[4096]; // [rsp+30h] [rbp-1010h] unsigned __int64 v6; // [rsp+1038h] [rbp-8h] v6 = __read..
1. 문제 nc ctf.j0n9hyun.xyz 3038 1) mitigation 2) 문제 확인 [pzshell.c] #include #include #include #include #include #include #include #include void sandbox(void) { scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL) { write(1, "seccomp error\n", 15); exit(-1); } seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(fork), 0); seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(vfork), 0); seccomp_..
저번에 쉘 코드 작성 실습을 진행했으므로 이번에는 쉘 코드 관련 문제를 풀어보기로 하였다. 1. 문제 nc ctf.j0n9hyun.xyz 3036 1) mitigation 2) 문제 확인 [ezshell.c] #include #include #include #include void Init(void) { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); } int main(void) { Init(); char result[100] = "\x0F\x05\x48\x31\xED\x48\x31\xE4\x48\x31\xC0\x48\x31\xDB\x48\x31\xC9\x48\x31\xD2\x48\x31\xF6\x48\x31\xF..
1. 문제 nc ctf.j0n9hyun.xyz 3018 1) 문제 확인 - 어떠한 주소 값이 2개 출력되고 입력을 2번 받고 종료 2) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+0h] [ebp-84h] alarm(0x3Cu); setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); setvbuf(stderr, 0, 2, 0); printf("Hey guyssssssssss here you are: %p %p\n", &binsh, &system); fgets(&s, 128, stdin); printf(&s); gets(&s); return 0; } - ..
이번에는 저번에 배웠던 x86환경에서 Universal Shellcode를 작성하는 원리와 실습에서 응용하여 x64환경에서 Universal Shellcode를 작성하여 실행하는데 목표를 두었다. 참고로 저번에는 WinExec함수를 통해 cmd창을 오픈하는 Universal Shellcode를 작성하였지만 응용하여 MessageBoxA함수를 통해 메시지박스를 오픈하도록 작성할 것이다. 0. 목표 x64환경에서 MessageBoxA함수를 통해 메시지 박스를 오픈하는 Universal Shellcode작성 및 실행 1. 실습 환경 OS : Windows 10(x64) Debugging Tool : WinDbg Preview IDE : Visual Studio 2017 PE파일 분석 툴 : CFF Explor..
[윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇 - 김현민]책을 읽고 실습하면서 몰랐던 내용들이나 실습한 내용들을 나름 정리해보았다. 0. 문제점 쉘 코드에 포함되는 API함수를 사용하기 위해 주소 값을 알아야 하는데 Windows 7이상의 OS부터 부팅할 때마다 kernel32.dll의 상위 2bytes 주소 값이 매번 바뀐다. Example) Python 코드를 이용하여 WinExec함수의 주소 값 확인(환경 : Windows7) [ 재부팅 전] [ 재부팅 후 ] 상위 2bytes의 주소 값이 바뀌는 것을 확인할 수 있다. API란? API(Application Programming Interface)란 OS가 애플리케이션을 위해 제공하는 함수의 집합으로 애플리케이션과 디바이스를 연결해주는 역할을 ..
1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반으로 만들어졌다. windows 환경에 따라 다르게 부르는데 32bit환경에서는 PE32, 64bit환경에서는 PE+또는 PE32+라고 불린다. Linux나 Unix와 같은 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다. PE파일을 통해서 프로그램이 사용하는 API 또는 DLL 등 다양한 정보와 어느 메모리 주소에 로딩되는지 확인할 수 있다. 1.2 PE파일 종류 1) 실행 계..
1. 문제 nc svc.pwnable.xyz 30014 1) 문제 확인 2) 함수 확인 2-1) main함수 int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax char s; // [rsp+10h] [rbp-400h] setup(argc, argv, envp); memset(&s, 0, 1024uLL); while ( 1 ) { while ( 1 ) { print_menu(); v3 = read_int32(); if ( v3 != 1 ) break; printf("data: "); fgets(&s, 128, stdin); } if ( v3 = 14 while True: p.sendafter("> ", "2") ..
1. 문제 nc svc.pwnable.xyz 30013 1) 문제 확인 2) 함수 확인 2-1) main함수 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax int v4; // ebx unsigned int v5; // ebx size_t v6; // rax setup(argc, argv, envp); puts("My strcat"); maxlen = 128; printf("Name: "); maxlen -= readline(name, 128LL); desc = (char *)malloc(0x20uLL); printf("Desc: "); readline(desc, 32LL); while ..