이번 포스트에서는 Lord of SQLInjection의 green_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., ', "를 필터링하고 있다는 것을 알 수 있다. 또한 id의 값이 admin일때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 "\"문자가 필터링 처리되지 않았으므로 "\"를 활용하여 공격을 시도해보겠다. ### 사용할 공격문 : id=\&pw= union select 0x61646d696e %23 ### 실행 결과 : "\"문자를 통해 id 파라미터의 값을 '\' and pw='로 만든 다음에 union문을 활용하여 s..
이번 포스트에서는 Lord of SQLInjection의 evil_wizard문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., proc, union, sleep, benchmark를 필터링하고 있다는 것을 알 수 있다. 또한 email의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 아무런 값을 넣어서 공격을 실행해보겠다. ### 사용할 공격문 : order=1 ### 실행 결과 : id값 admin의 email값이 *****로 출력된 것을 확인할 수 있다. email의 값을 알아내야 하기 때문에 Blind SQL Injection ..
이번 포스트에서는 Lord of SQLInjection의 hell_fire문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., proc, union을 필터링하고 있다는 것을 알 수 있다. 또한 email의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 우선 아무런 값을 넣어서 공격을 실행해보겠다. ### 사용할 공격문 : order=1 ### 실행 결과 : id값 admin의 email값이 *****로 출력된 것을 확인할 수 있다. email의 값을 알아내야 하기 때문에 Blind SQL Injection 기법을 활용해보겠다. 먼저 email..
이번 포스트에서는 Lord of SQLInjection의 dark_eyes문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), col, if, cast, when, sleep, benchmark를 필터링하고 있다는 것과 "Hello {id}"와 같이 쿼리의 참과 거짓을 알려주는 문구를 출력해주지 않다는 것을 알 수 있다. 또한 pw의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 참과 거짓을 구분해주는 문구가 사라졌지만 mysqli_error() 함수를 통해 우리가 입력한 쿼리가 참을 반환했는지, 거짓을 반환했는지를 알 수 있다. ..
이번 포스트에서는 Lord of SQLInjection의 iron_golem문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), sleep, benchmark를 필터링하고 있다는 것과 "Hello {id}"와 같이 쿼리의 참과 거짓을 알려주는 문구를 출력해주지 않다는 것을 알 수 있다. 또한 pw의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 참과 거짓을 구분해주는 문구가 사라졌지만 mysqli_error() 함수를 통해 우리가 입력한 쿼리가 참을 반환했는지, 거짓을 반환했는지를 알 수 있다. ### 사용할 공격문 : pw=' o..
이번 포스트에서는 Lord of SQLInjection의 dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, )를 필터링하고 있다는 것과 guest뒤에 #(주석문자)이 붙어 있다는 것을 알 수 있다. 또한 id의 값이 "admin"일때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 문자는 #(주석)을 통해 뒤에 오는 값을 무효화처리 하고 있다. ### 사용할 공격문 : pw=' or id='admin ### 실행 결과 : 출력된 값이 변경되지 않는 것을 확인할 수 있다. 그러나 "#"문자는 "1 Line", 즉 한줄 주석 처리이기 때..
이번 포스트에서는 Lord of SQLInjection의 xavis문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), regex, like를 필터링하고 있다는 것을 알 수 있다. 또한 pw의 값을 알아내야만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 이번 문제에서는 SQL의 @local_variable를 활용해서 풀어보겠다. @local_variable은 SQL문에서 값을 할당하기 위해 선언하는 지역 변수이다. 예시) select @local_variable = '1234'; 위의 예시문의 뜻은 local_variable라는 변수에 '1234..
이번 포스트에서는 Lord of SQLInjection의 nightmare문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), #, -를 필터링하고 있으며, pw의 길이가 6보다 크면 안된다는 것도 알 수 있다. 또한 id값이 존재할 때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 쿼리를 항상 True를 반환할 수 있게끔 하면 되는데, 총 입력 가능 글자수가 6글자인 것을 고려해야한다. 먼저 해당 쿼리를 항상 True로 반환하는 공격문을 시도해보겠다. ### 사용할 공격문 : pw=')||1;%00 ### 실행 결과 : ";%00"은 주석..
이번 포스트에서는 Lord of SQLInjection의 zombie_assassin문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, )를 필터링하고 있으며, addslashes() 함수를 통해 특수문자에 역슬래시(\)를 붙여주는 것과 strrev() 함수를 통해 우리가 입력한 값을 거꾸로 출력하게 만든 것을 알 수 있다. 또한 id값이 존재할 때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 먼저 해당 문제가 어떻게 동작하는지를 눈으로 확인하기 위해 아무 값을 넣어서 공격해보겠다. ### 사용할 공격문 : id='&pw=hello ### 실행 결..
이번 포스트에서는 Lord of SQLInjection의 succubus문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), '를 필터링한 것을 알 수 있다. 또한 id값이 존재할 때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 문제는 역슬래시(\)를 활용하여 id의 두번째 '(싱글쿼터)를 문자로 만들어서 풀 수 있다. ### 사용할 공격문 : id=\&pw= or 1 %23 ### 실행 결과 : ## 추가 해석 : 쿼리문 : id='\' and pw=' or 1 #' 해당 쿼리문을 역슬래시(\)를 이용하여 뒤에 오는 '(싱글 쿼터)를 문..