![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMWxb%2FbtrEtawX3Tq%2FHkQkd21rJn0IyLHDvWXKm1%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 frankenstein문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), union을 필터링하고 있다는 것과 에러가 발생하면 탈출한다는 사실을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : error 출력 및 case문을 이용해서 공격을 시도해보겠다. 또한 ()괄호가 필터링 되어 있으므로 비밀번호의 길이를 구하지 않고 바로 비밀번호를 구하도록 하겠다. ### 사용할 공격문 : pw=1' or id='admin' and case when pw like ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOUtw5%2FbtrEtHAtJQX%2F3ZFurEkNIAaBp3V47s8rKk%2Fimg.png)
이번 포스트에서는 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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHzU5d%2FbtrEnLKOKOb%2FzQ3HCT8Nl1dxOVkmsPfNk0%2Fimg.png)
이번 포스트에서는 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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0N5H%2FbtrEeKsqBgr%2FWPqKLcJkl4MsMOTdncw3Q0%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 red_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, .을 필터링하고 있다는 것을 알 수 있다. strlen() 함수를 통해 id값의 길이를 7자 이하로 제한하고 있다. no값이 숫자인 경우에 그대로 쓰이고 아닌 경우에는 1로 변경된다. 또한 no의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 문제는 글자 제한이 걸려있으므로 최대한 짧은 쿼리문을 사용하여 no의 값을 알아내야 한다. 또한 is_numeric() 함수는 공백 문자 등을 인식하지 못하는 점을 활용하여 공격해..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCx5sM%2FbtrEhZCH8J7%2FcGfGoQjuj2xb7gRZMItOAK%2Fimg.png)
이번 포스트에서는 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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkDgmE%2FbtrEhp2MsZY%2FkmrrX30JcU4lw0q7lrQt40%2Fimg.png)
이번 포스트에서는 Pwnable의 fd 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR67R2%2FbtrEh8LS2tY%2FEAvIDkYgXwBkpyEke3YUX0%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 green_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., ', "를 필터링하고 있다는 것을 알 수 있다. 또한 id의 값이 admin일때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 "\"문자가 필터링 처리되지 않았으므로 "\"를 활용하여 공격을 시도해보겠다. ### 사용할 공격문 : id=\&pw= union select 0x61646d696e %23 ### 실행 결과 : "\"문자를 통해 id 파라미터의 값을 '\' and pw='로 만든 다음에 union문을 활용하여 s..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGPZD%2FbtrD5S5hbz9%2FdehWeCexuSdrLeKjiu6xb1%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 evil_wizard문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., proc, union, sleep, benchmark를 필터링하고 있다는 것을 알 수 있다. 또한 email의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 아무런 값을 넣어서 공격을 실행해보겠다. ### 사용할 공격문 : order=1 ### 실행 결과 : id값 admin의 email값이 *****로 출력된 것을 확인할 수 있다. email의 값을 알아내야 하기 때문에 Blind SQL Injection ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtRkhu%2FbtrD1gqSB2o%2FW6PxJVXtMvIrWF9yHEmnX1%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 hell_fire문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., proc, union을 필터링하고 있다는 것을 알 수 있다. 또한 email의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 아무런 값을 넣어서 공격을 실행해보겠다. ### 사용할 공격문 : order=1 ### 실행 결과 : id값 admin의 email값이 *****로 출력된 것을 확인할 수 있다. email의 값을 알아내야 하기 때문에 Blind SQL Injection 기법을 활용해보겠다. 먼저 email..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7EFxY%2FbtrDWKk0Lno%2FXeXSEK7X4IjwEONlVnKYp0%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 dark_eyes문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), col, if, cast, when, sleep, benchmark를 필터링하고 있다는 것과 "Hello {id}"와 같이 쿼리의 참과 거짓을 알려주는 문구를 출력해주지 않다는 것을 알 수 있다. 또한 pw의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 참과 거짓을 구분해주는 문구가 사라졌지만 mysqli_error() 함수를 통해 우리가 입력한 쿼리가 참을 반환했는지, 거짓을 반환했는지를 알 수 있다. ..