목록2020/04 (35)
Self-Improvement
소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 Colored by Color Scripter cs 페이지에 접속하여 싱글쿼터를 주입해보면 DB Error 내용보다는 커스텀된 에러 메시지가 나오게 된다. 이것을 보고 유추할 수 있는 것은 Error SQLi는 되지 않으며 싱글쿼터 주입시 에러가 발생한 것을 보아 Blind SQLi가 가능 하다는 것을 알 수 있다. 참/거짓 명제를 만들어보며 응답을 확인해 본다. ' and '1'='..
ASCII() ASCII는 문자 하나를 받아 아스키 코드 번호로 리턴하는 함수이다. CHAR() CHAR는 숫자를 받아 아스키 코드에 맞게 문자를 리턴하는 함수이다.
소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 Colored by Color Scripter cs 페이지에 접속해본다. 싱글쿼터를 주입하여 에러가 발생하는지 확인하면 에러가 발생하지 않고 기존의 데이터들이 나타나지 않는다. 이는 Blind SQLi가 가능하다는 뜻이다. 싱글쿼터 처리를 유의하며 참/거짓 명제를 이용하여 응답을 다시한번 더 확인해 본다. ' or '1 - http://..
순차검색 기법 순차 탐색기법은 선형 검색으로 불리며 명칭에서도 알 수 있듯이 자료를 처음부터 순차적으로 검색하는 단순한 기법이다. 해당 기법에서는 SUBSTR(), SUBSTRING() 함수를 주로 사용한다. SUBSTR(), SUBSTRING() 함수에 From for을 사용할 수 도 있다. select substr('johyun',3) select substr('johyun' from 3) select substr('johyu' from 3 for 2) select substr('johyun' from -2 for 2) 예시로 데이터 값이 "johyun"으로 되어 있다고 보고 substr(), ascii() 함수를 이용하여 순차 탐색 기법을 이용해본다. select substr('johyun' fro..
블라인드 SQLi는 DB의 에러 메시지가 노출되지 않는 경우가 많기 때문에 취약점 탐지에 많은 주의가 필요하다. 이 부분에서는 UNION, Error 기법으로는 되지 않으며 공격난이도가 더 높다고도 할 수 있다. 블라인드 SQLi는 크게 부울(bolean)기반과 시간(Time)기반으로 구분된다. 조건부 응답 블라인드 방식으로 취약점 여부를 확인한느 방법은 참/거짓 명제를 주입해서 테스트하는 방법이 일반적이다. 참/거짓 명제에 대해서 알아보자면 "and 1=1" 또는 "and 1=2" "OR 1=1"와 같은 조건식 주입문이다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Colored b..
INSERT, UPDATE, DELETE 구문에서는 UNION SQLi 기법은 사용이 불가능하지만 Error SQLi는 가능하다. 하지만 위 3가지를 SQLi할때는 중요한 사항들이 존재한다. DELETE FROM () WHERE (); Delete 구문을 사용하는 페이지는 회원 탈퇴, 게시글 삭제 및 취소 등의 기능이 대표적이다. Delete 구문에서 가장 주의해야 할 사항으로 참인 명제 조건이 된다면 해당 테이블의 모든 데이터가 삭제된다는 것이다. Update 구문처럼 WHERE() 절의 조건문이 가장 주의해야한다. MySQL 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3..
INSERT, UPDATE, DELETE 구문에서는 UNION SQLi 기법은 사용이 불가능하지만 Error SQLi는 가능하다. 하지만 위 3가지를 SQLi할때는 중요한 사항들이 존재한다. UPDATE () SET () WHERE () UPDATE 구문을 사용하는 페이지는 회원정보 수정, 게시글 수정, 예약 정보 수정 등이 대표적이다. 가장 주의해야 할 사항으로는 전체가 참인 명제 조건이 된다면, 해당 테이블의 모든 데이터가 동일한 값으로 수정이 된다. UPDATE 구문에서 WHERE절에 참인 명제가 주입되면 모든 데이터가 동일한 정보로 업데이트 되는 것이다. MySQL 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ..
INSERT, UPDATE, DELETE 구문에서는 UNION SQLi 기법은 사용이 불가능하지만 Error SQLi는 가능하다. 하지만 위 3가지를 SQLi할때는 중요한 사항들이 존재한다. INSERT INTO table_name() VALUE () Insert 구문에서는 로깅 파라미터인 로그를 추가하는 부분에서 취약점이 많이 발생하지만 SQLi 공격 구문을 잘못 할 시 비정상적인 로그가 추가된다는 점과 게시글 글이 계속 등록된다는 문제점이 있다. MySQL 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 4..
Prepared Statement는 SQLi 공격이 불가한 방식이며 실제 안전하게 구현된 방식은 취약점이 발생하지 않는다. 하지만 잘못 구현된 Prepared Statement는 취약점이 발생할 수 있다. Prepared Statement + Statement의 혼합 형태의 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 opensecurelab Employee information : Employee ID FirstName JOB_ID HireDate Colored by Color Scripter cs ..
Oracle 데이터베이스는 where 절을 할 시에는 무조건 '='와 대응되는 무언가가 있어야한다. 소스코드 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 opensecurelab Employee ID FirstName JOB_ID HireDate Colored by Color Scripter cs dbms_xmlgen.getxml || 는 HTTP 인코딩 방식으로 %7c%7c로 변경해준다. [테이블 정보] (to_char(dbms_xmlgen.getxml('select "' || substr((sele..