Security/WebHacking
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'..
인증(Authentication)과 인가(Authorization)
인증(Authentication)과 인가(Authorization)
2017.06.28인증 / 인가 인증 / 인가 정보 유지는 세션과 SID를 기반으로 한다. 인증 ( Authentication ) 사용자의 신원을 증명하는 것. e.g., 로그인한 사용자는 인증된 사용자. 인가 ( Authorization ) 특정 리소스에 접근할 수 있는 권한을 부여하는 것. 접근 제어(access control)라고도 볼 수 있다. Identification / Verification / Authentication / Certification https://www.jumio.com/identification-authentication-verification-compared/ certification은 자격(자격증)을 증명한다는 의미임. 신원 증명의 뜻은 아니다. authentication은 인증. 너가..
Brute Force / Replay Attack
Brute Force / Replay Attack
2017.06.28Brute Force최대 로그인 실패 횟수를 기록해 계정을 임시로 정지시키는 방법이 유용하다.로그인에 실패한 사용자가 몇 초 이내에 다시 로그인을 시도하면 무조건 실패로 처리하거나, 성공이든 실패든 몇 초 이후에 다시 시도하라는 메세지를 주는 방법(throttling)도 고려해볼 수 있으나 요즘 잘 쓰이지는 않는 것 같다.보통 패스워드가 틀렸을 때 바로 재입력하기 때문에 시간 제한이 있다면 불편할 듯. Replay Attack정상적인 사용자가 액세스 권한이나 특별한 권한을 얻기 위해 전송한 데이터를 공격자가 캡쳐해두었다가 재전송하는 공격이다. 최선의 방법은 캡쳐를 당하지 않는 것이지만, 그게 항상 가능하지는 않다.이를 막기 위해서는 다음과 같은 경우를 피해야 한다.접근이 제한된 리소스에 대한 엑세스를 유..
Session & HTTP Session hijacking
Session & HTTP Session hijacking
2017.06.27Session세션 데이터는 세션 데이터 저장소에 보관된다.SID라는 고유 식별자로 세션 데이터 저장소에서 특정 레코드를 식별한다.세션 저장소 경로는 php.ini의 ``session.save_path``에 지정되며 ``php session_save_path()``로 얻거나 설정할 수 있다.이를 이용해 세션 저장소에 직접 접근해서 다른 세션 데이터를 얻어올 수 있다.```php$path = ini_get('session.save_path');$handle = dir($path); while ($filename = $handle->read()) { if (substr($filename, 0, 5) == 'sess_') { $data = file_get_contents("$path/$filename"); if..
Filtering / Escape
Filtering / Escape
2017.06.27입력 필터링입력 필터링 작업은 세 단계로 구분하는 것이 좋다.입력을 구분하는 단계입력을 필터링하는 단계필터링된 데이터와 오염된 데이터를 구별하는 단계 입력을 구분하는 단계세션 데이터 저장소는 서버에 저장되기는 하지만 이를 입력으로 간주하는 것이 안전하며 DB의 데이터도 마찬가지다.일반적으로 사용하는 외부 입력 출처를 정리하면 이 정도가 된다.`` $_GET```` $_POST```` $_REQUEST```` $_COOKIE```` $argv```` php://stdin```` php://input``file IOremote DBremote API 입력을 필터링하는 단계유효하지 않은 데이터는 그냥 버린다.규칙에 맞추기 위해 유효하지 않은 데이터를 수정해서 그대로 사용하면 안된다. 예를 들면 `` ../....