SQL Injection
SQL injection Mitigation : preparedStatement
SQL injection Mitigation : preparedStatement
2017.11.30SQL 구문을 미리 preparedStatement로 확정시켜 놓고 거기에 파라미터만 대입하는 형식으로 사용하면 SQL 구조가 외부 입력값에 의해서 변경되는 것을 방지할 수 있다. SQL문 실행 순서는 다음과 같다. ``` SQL 구문 분석 -> 컴파일 -> 쿼리 실행 ``` preparedStatement 사용하지 않는 동적 쿼리 구조 : id로 어떤 값이 넘어오느냐에 따라 쿼리 구조가 변경될 수 있다. ```java String sql = "select * from tbl where id=" + id; statement(sql) // 구문 분석 & 컴파일 // 쿼리 실행 ``` preparedStatement 사용하는 동적 쿼리 구조 : id에 어떤 값이 오든 쿼리 구조는 이미 확정된 상태. ```j..
[PHP] SQL Escape & Bypass
[PHP] SQL Escape & Bypass
2017.10.23SQL Escape methodmysqli::real_escape_string이스케이프 문자 목록```php' " \ \x00(NUL) \x1a(EOF) \n \r``` 아래는 모두 동일한 함수.```phpstring mysqli::escape_string ( string $escapestr ) // aliasstring mysqli::real_escape_string ( string $escapestr )string mysqli_real_escape_string ( mysqli $link , string $escapestr )``` addslashes이스케이프 문자 목록```php' " \ \x00(NUL)```DB에서 지원해주는 함수가 정 없다면 addslashes() 를 사용한다. magic_quo..
Error-based SQL injection
Error-based SQL injection
2017.09.23이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
SQL Filtering Substitution Pattern
SQL Filtering Substitution Pattern
2017.09.19이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
SQLMap
SQLMap
2017.09.05이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Blind SQL Injection
Blind SQL Injection
2017.08.08Boolean-based Blind SQL Injection쿼리 실행 결과의 ``sql True / False`` 여부에 따라 response가 다르다면, Boolean-based Blind를 사용할 수 있다.꼭 로그인에 성공해야 ``sql True``인 것은 아니다. query의 실행 결과가 참인 상태에서 로그인에 실패한 것과 query 실행 결과가 거짓인 상태에서 로그인에 실패한 것 둘을 구분할 수 있다면 사용할 수 있다. 중요한 것은 query의 실행 결과를 구분할 수 있느냐다. 다음 내장 함수를 사용한다.```sqlSUBSTR(str,pos,len) / ASCII(str) mysql> select ascii(substr(pw, 1, 1)) from sqlinj_test where id='umbum..
Basic SQL injection
Basic SQL injection
2017.08.08Note마지막에 짝이 안맞는 `` '``가 있으면 query가 실행되지 않는다. 1. 짝을 맞춰주거나 2. 주석처리 해주거나 3. escape 해주어야 한다.``sql SELECT``가 아니라 ``sql INSERT, UPDATE, DELETE`` 등이어도 injection 가능하다. 단, ``sql UPDATE`` 내부에 sub query로 ``sql SELECT``를 사용할 때 ``sql UPDATE`` 대상 database와 ``sql SELECT``대상 database가 같다면 아무것도 조회되지 않는다. && ||``sql AND / OR``는 공백 넣어주어야 하고, ``sql && / ||``는 공백 없어도 된다. 공백이 없어도 `` '``로 감싸면 문자열로 인식하기 때문에 ``sql ''or'..