Yozzang의 해킹일기 💻
article thumbnail
Pwnable (11. coin1)
Wargame/Pwnable 2022. 7. 9. 00:44

이번 포스트에서는 Pwnable의 coin1 문제에 대해 다루겠다. 문제는 다음과 같다. ## 문제 해석 : 가짜 코인을 찾는 문제이다. N는 동전의 갯수이며 C는 시도 가능 횟수이다. 총 100개의 가짜 코인을 찾으면 flag를 획득할 수 있는 것으로 보인다. 해당 문제는 이진탐색 알고리즘을 통해 쉽게 해결할 수 있다. ## 문제 풀이 : 우선 임의의 정수를 넣어서 시도해보겠다. 임의의 정수 "50"을 넣었을 때 "50"의 무게값이 출력된 것을 확인할 수 있다. 이어서 "1", "2", "3", "4"를 넣었을 때 네 가지 수의 무게값의 합이 출력된 것을 확인할 수 있다. 이어서 이진탐색을 활용하여 공격코드를 작성해보겠다. ## 최종 결과 : ### 공격 코드 : from pwn import * POR..

article thumbnail
Pwnable (10. shellshock)
Wargame/Pwnable 2022. 7. 8. 00:12

이번 포스트에서는 Pwnable의 shellshock 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } ## 문제 해석 : setresuid()와 setresgid()를 통해 user, group ID를 설정하고 bash를 실행하여 "shock_me"가 출력된 것을 알 수 있다. 여기서 해당 문제 이름을 보면 shellshock라고 되어있는데 이는 곧 CVE-2014-6271(Bash Shellsho..

article thumbnail
Pwnable (9. mistake)
Wargame/Pwnable 2022. 7. 7. 00:16

이번 포스트에서는 Pwnable의 mistake 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #define PW_LEN 10 #define XORKEY 1 void xor(char* s, int len){ int i; for(i=0; i 0)){ printf("read error\n"); close(fd); return 0; } char pw_buf2[PW_LEN+1]; printf("input password : "); scanf("%10s", pw_buf2); // xor your input xor(pw_buf2, 10); if(!strncmp(pw_buf, pw_buf2, PW_LEN)){ printf("Password OK\n"); system("/bin/ca..

article thumbnail
Pwnable (8. leg)
Wargame/Pwnable 2022. 7. 6. 00:19

이번 포스트에서는 Pwnable의 leg 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push {r6}\n" "add r6, pc, $1\n" "bx r6\n" ".code 16\n" "mov r3, pc\n" "add r3, $0x4\n" "push {r3}\n" "pop {pc}\n" ".code 32\n" "pop {r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+k..

article thumbnail
Pwnable (7. input)
Wargame/Pwnable 2022. 7. 5. 00:22

이번 포스트에서는 Pwnable의 input문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(..

article thumbnail
Pwnable (6. random)
Wargame/Pwnable 2022. 7. 4. 00:27

이번 포스트에서는 Pwnable의 random 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; } ## 문제 해석 : 해당 문제의 코드를 살펴보니 key값과 random값의 XOR 연산 값이 0xdeadbeef가 되어야 해결할 ..

article thumbnail
Pwnable (5. passcode)
Wargame/Pwnable 2022. 7. 3. 00:37

이번 포스트에서는 Pwnable의 passcode 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1==338150 && passcode2==13371337){ printf("Login OK!\n")..

article thumbnail
Pwnable (4. flag)
Wargame/Pwnable 2022. 7. 2. 00:31

이번 포스트에서는 Pwnable의 flag 문제에 대해 다루겠다. 문제 파일을 실행하면 다음과 같다. ## 문제 해석 : IDA를 활용하여 문제를 분석해보면 다음과 같이 UPX로 패킹되어 있다는 사실을 알 수 있다. ## 문제 풀이 : upx -d 를 통해 해당 파일을 언패킹한 다음에 분석해보아야 한다. 언패킹한 파일을 다시 IDA를 통해 실행해보면 다음과 같이 flag값이 나오는 것을 확인할 수 있다. ## 최종 결과 : Flag = UPX...? sounds like a delivery service :)

article thumbnail
Lord of SQLInjection (30. ouroboros)
Wargame/Lord of SQLInjection 2022. 6. 29. 00:50

이번 포스트에서는 Lord of SQLInjection의 ouroboros문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., rollup, join, @를 필터링하고 있다는 것을 알 수 있다. 또한 pw값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 간단하게 pw=' or '1를 통해 공격을 시도해보겠다. ### 사용할 공격문 : pw=' or '1 ### 실행 결과 : 아무런 값이 출력되지 않다는 사실을 알 수 있다. 즉, 테이블 안에 아무 값이 존재하지 않다는 것이다. 그럼 이어서 union select 문을 활용하여 공격을 시도해보겠다. ..

article thumbnail
Lord of SQLInjection (29. phantom)
Wargame/Lord of SQLInjection 2022. 6. 28. 00:20

이번 포스트에서는 Lord of SQLInjection의 phantom문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 duplicate를 필터링하고 있다는 것을 알 수 있다. 또한 no=1의 email값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 일단 joinmail 파라미터에 아무 값을 넣어서 결과를 확인해보겠다. ### 사용할 공격문 : joinmail=haha ### 실행 결과 : 테이블에 no=0, ip, 'haha'가 새로 삽입된 것을 확인할 수 있다. insert문은 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다. 해당 취약점을..