본문 바로가기

시스템 해킹59

[Pwnable.kr] asm 이번 문제는 asm을 이용하여 익스플로잇을 해야 합니다. asm(Automic Storage Management)이란 오라클에서 만든 자동으로 스토리지를 관리하는 소프트웨어이다. 필자가 아직까지 느낀 asm의 장점은 속도가 빠르다는 것이다. 문제 서버에 접속하면 아래와 같이 4개의 파일이 존재한다. asm 파일을 실행하면 쉘코드를 입력하라고 한다. #include #include #include #include #include #include #include #include #define LENGTH 128 void sandbox(){ scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL); if (ctx == NULL) { printf("seccomp error\n").. 2021. 8. 1.
[Pwnable.kr] memcpy 문제에서 코드가 주어지고 코드의 맨 윗줄 주석에 // compiled with : gcc -o memcpy memcpy.c -m32 -lm 컴파일 명령어가 적혀있다. 코드를 복사하고 컴파일을 진행하면 memcpy 파일이 생긴다. 필자의 리눅스 환경은 64bit로 아래와 같이 잘 작동한다. 하지만 문제 서버에서 memcpy를 실행하면 아래와 같이 experiment 5의 fast_memcpy 함수에서 Segmentation fault가 일어나서 프로그램이 종료된다. char* fast_memcpy(char* dest, const char* src, size_t len) { size_t i; // 64-byte block fast copy if(len >= 64) { i = len / 64; len &= (.. 2021. 7. 31.
[Pwnable.kr] uaf #include #include #include #include #include using namespace std; class Human{ private: virtual void give_shell(){ system("/bin/sh"); } protected: int age; string name; public: virtual void introduce(){ cout 2021. 7. 30.
[Pwnable.kr] blukat #include #include #include #include char flag[100]; char password[100]; char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0b\x1b\x08\x45+"; void calc_flag(char* s){ int i; for(i=0; i 2021. 7. 29.
[Pwnable.kr] cmd2 #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "=")!=0; r += strstr(cmd, "PATH")!=0; r += strstr(cmd, "export")!=0; r += strstr(cmd, "/")!=0; r += strstr(cmd, "`")!=0; r += strstr(cmd, "flag")!=0; return r; } extern char** environ; void delete_env(){ char** p; for(p=environ; *p; p++) memset(*p, 0, strlen(*p)); } int main(int argc, char* argv[], char** envp){ delete_env(); put.. 2021. 7. 29.
[Pwnable.kr] lotto // calculate lotto score int match = 0, j = 0; for(i=0; i 2021. 7. 28.
[Pwnable.kr] blackjack 문제 코드는 아래 주소로 들어가면 열람할 수 있습니다. http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 코드의 취약점은 음수에 대한 필터링이 없다는 것입니다. 아래 코드를 보면 bet에 정수를 입력받는데 음수를 입력받는다면 음수는 항상 cash 보다 작을 수 밖에 없습니다. 따라서 음수를 입력하고 게임에서 진다면 음수만큼 돈을 잃게되는데 음수에 마이너스를 붙이면 양수가 되므로 백만달러를 쉽게 벌 수 있습니다. int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If pl.. 2021. 7. 28.
[Pwnable.kr] coin1 문제 규칙은 다음과 같습니다. N은 코인의 수를 의미하고 C는 남은 기회를 나타냅니다. C번의 기회안에서 N개의 코인중 몇번째 코인이 가짜 코인인지 맞춰야하는데 해당 루틴을 100번 돌려야합니다. 즉 60초 안에 수동으로는 불가능하므로 알고리즘을 작성해야합니다. 주어진 기회를 잘보면 log_2(N) 보다 크므로 이진검색을 통해 정답을 추출할 수 있습니다. 현재 pwnable.kr 서버 네트워크 속도가 느리기 때문에 이전 문제 shellshock ssh를 통해 서버에 접근하여 /tmp에 폴더를 만들어 해당 폴더에 파이썬 코드를 작성하여 로컬에서 실행해야 시간안에 모든 문제를 풀 수 있습니다. 익스플로잇 코드는 아래와 같습니다. from pwn import * r = remote("127.0.0.1", 90.. 2021. 7. 28.
[Pwnable.kr] shellshock int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } 이번 문제는 shellshock 취약점을 이용해야한다. shellshock 취약점은 ./bash를 실행할때 bash 환경변수를 초기화하는데 이때 변수 뒤에 문자열이 명령어로 인식되는 취약점이다. 환경변수를 예로 들자면 아래와 같이 export명령어를 이용해 lemon_soju라는 변수에 echo hello;라는 문자열을 넣어서 마치 함수처럼 사용할 수 있습니다. 문제점은 문자열 뒤에 추가로 명령어를 대입하면 이후 ... 2021. 7. 27.