이번 포스트에서는 Lord of SQLInjection의 darkelf문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, .,(, ), or, and를 필터링한 것을 알 수 있다. 또한 id값이 admin일때만 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 먼저, 원래의 쿼리문을 무효화 시키고 id값이 admin이 되도록 만들어본다. ### 사용할 공격문 : pw=' or id='admin ### 실행 결과 : 예상했던 대로 "OR"이 필터링된 것을 확인할 수 있다. 그럼 문자로 된 OR말고 OR연산자의 기호를 통해 공격문을 작성해보겠다. 참고로 OR연산자의 기..
이번 포스트에서는 Lord of SQLInjection의 wolfman문제에 대해 다루도록 하겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, )와 스페이스바를 필터링 한 것을 알 수 있다. 또한 id값이 admin이 되어야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 먼저 쿼리문을 참으로 만들어보겠다. ### 사용할 공격문 : pw='or'1 ### 실행 결과 "Hello guest"가 출력된 것을 확인할 수 있다. 이어서 해당 쿼리문을 거짓으로 만든 다음에 id값이 admin이 되도록 만들어보겠다. ### 사용할 공격문 : pw='or id='admin ###..
이번 포스트에서는 Lord of SQLInjection의 goblin문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match를 통해 prob, _, ., (, ), ', ", ` 를 필터링 한 것을 알 수 있다. 즉 우리는 따움표 등을 사용할 수 없다는 뜻이다. 또한 해당 문제의 풀이 조건은 id값이 admin이 되어야 한다는 건데, 쿼리문을 살펴보면 다음과 같다. select id from prob_goblin where id = 'guest' and no = {$_GET[no]} 즉, 우리가 입력할 수 있는 란이 no인 것을 알 수 있다. ## 문제 풀이 : 먼저 no에 1을 넣어본 결과는 다음과 같다. #..
이번 포스트에서는 Lord of SQLInjection의 cobolt 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 이전 문제인 gremlin과 비슷하니 다른 부분만 짚어서 보겠다. 여기서 우리가 주목해야 할 부분이 if($result['id'] == 'admin')이다 위 코드를 통해 우리는 admin이라는 ID로 로그인해야 문제를 풀 수 있는 것을 알 수 있다. ## 문제 풀이 : ID란에 admin을 추가한다. SQL 쿼리문이 참이 될 수 있도록 해준다. ### 사용할 공격문 : id='admin'or'1&pw= ### 실행 결과 : ## 추가 해석 : 쿼리문 : select id from prob_cobolt w..
이번 포스트에서는 Lord of SQLInjection의 gremlin 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 여기서 우리가 주목해야할 줄은 preg_match('/prob|_|\.|\(\)/i', $_GET[id])이다. preg_match('/prob|_|\.|\(\)/i', $_GET[id]) : preg_match는 php의 필터링 함수이다. 형식은 다음과 같다. ### preg_match('/필터링할 문자/', '입력할 문자') 해당 문제에서는 prob, _, ., (, )를 필터링 한 것을 알 수 있다. 뒤에 붙어 있는 i는 대소문자 구별하지 않겠다는 뜻이다. 즉, 해당 문제는 prob과 _를 필터링함으로써 특정 ..
이번 포스트에서는 SQL Injection에 대한 포괄적인 소개를 다루도록 하겠습니다. SQL Injection SQL Injection의 정의 : SQL Injection은 우리나라 말로 SQL 주입이라 할 수 있습니다. 즉 임의의 SQL 쿼리문을 주입하는 공격 기법이라 할 수 있습니다. 좀 더 자세하게 설명하자면 SQL 인젝션은 웹 사이트의 보안상 허점을 이용해 특정 SQL 쿼리문을 전송하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위입니다. SQL Injection의 발생 원인 : SQL Injection은 주로 사용자가 입력한 데이터가 제대로 필터링, 이스케이핑하지 못했을 경우에 발생합니다. 즉, 클라이언트 측의 데이터를 신뢰해서 그대로 SQL문에 사용했기 때문입니다. SQL Inject..