Yozzang의 해킹일기 💻
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문은 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다. 해당 취약점을..

article thumbnail
Lord of SQLInjection (28. frankenstein)
Wargame/Lord of SQLInjection 2022. 6. 23. 00:50

이번 포스트에서는 Lord of SQLInjection의 frankenstein문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), union을 필터링하고 있다는 것과 에러가 발생하면 탈출한다는 사실을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : error 출력 및 case문을 이용해서 공격을 시도해보겠다. 또한 ()괄호가 필터링 되어 있으므로 비밀번호의 길이를 구하지 않고 바로 비밀번호를 구하도록 하겠다. ### 사용할 공격문 : pw=1' or id='admin' and case when pw like ..

article thumbnail
Pwnable (3. bof)
Wargame/Pwnable 2022. 6. 22. 00:41

이번 포스트에서는 Pwnable의 bof 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } ## 문제 해석 : 문제 코드를 살펴 보니, 우리가 입력한 값이 overflowme 라는 변수에 저장되고 해당 변수의 크기가 32바이트인 것을 알 수 있다..

article thumbnail
Lord of SQLInjection (27. blue_dragon)
Wargame/Lord of SQLInjection 2022. 6. 21. 00:21

이번 포스트에서는 Lord of SQLInjection의 blue_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., ', \를 필터링하고 있다는 것을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : "\"와 "'"가 필터링 되었으므로 이번에는 Time based SQL Injection 기법을 통해 공격을 실행해보겠다. ### 사용할 공격문 : id=&pw=' or if(id='admin' and length(pw) > 5, sleep(2), 1)%23 ### 실행 결과 : 페이지가 2초 동안 로딩한 뒤에 ..

article thumbnail
Lord of SQLInjection (26. red_dragon)
Wargame/Lord of SQLInjection 2022. 6. 20. 00:16

이번 포스트에서는 Lord of SQLInjection의 red_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, .을 필터링하고 있다는 것을 알 수 있다. strlen() 함수를 통해 id값의 길이를 7자 이하로 제한하고 있다. no값이 숫자인 경우에 그대로 쓰이고 아닌 경우에는 1로 변경된다. 또한 no의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 문제는 글자 제한이 걸려있으므로 최대한 짧은 쿼리문을 사용하여 no의 값을 알아내야 한다. 또한 is_numeric() 함수는 공백 문자 등을 인식하지 못하는 점을 활용하여 공격해..

article thumbnail
Pwnable (2. collision)
Wargame/Pwnable 2022. 6. 19. 00:46

이번 포스트에서는 Pwnable의 collision 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i> hashcode = 0x21DD09EC >>> hex(hashcode/5) # 5로 나누었을 때의 값 '0x6c5cec8' >>> hex(hashcode%5) # 5로 나누었을 때의 나머지 '0x4' >>> hex(hashcode/5+hashcode%5) # 5로 나누어 떨어졌을 때의 마지막 값(나머지 포함) '0x6c5cecc' >>> he..

article thumbnail
Pwnable (1. fd)
Wargame/Pwnable 2022. 6. 18. 00:12

이번 포스트에서는 Pwnable의 fd 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc