목록취약점 진단 (10)
DoR@Hee의 끄적끄적
사용 환경 : - 서버: 윈도우7 - 환경: xampp v3.2.3 - DB: 10.1.38-MariaDB Load_file 은 서버에 있는 파일을 읽을 수 있는 함수이며 함수 사용 시 파일의 전체경로를 지정해주어야 한다. 만약, 파일이 존재하지 않거나 읽혀지지 않는다면 NULL 를 반환한다. ex)Load_file('파일경로') LOAD_FILE 을 이용 C:\xampp\mysql\bin\my.ini 파일이 있는지 확인 파일을 확인 할 수 있다. LOAD_FILE 을 이용 C:\xampp\mysql\bin\my.inia 파일이 있는지 확인 파일이 없으므로 null 값이 나타는걸 확인 Load_FILE 을 이용한 SQL Injection LOAD_FILE을 이용한 SQL INJECTION을 확인하기 위해..
1. or and 구문을 필터링 하고 있을 경우 - url 인코딩 문자인 %로 우회 - and >> %26%26, && - or >> %7C%7C, || 2. 단순 문자열 필터링인 경우 - preg_match - php 필터링 함수인 preg_match를 사용할 때 char, hex값을 이용한다 - 단 preg_match 정규식을 표현 하고 있을 때 i를 안썻다면 대소문자 구분을 안하기 때문에 "AdMin" 이런식으로 사 용이 가능하다 - char(97,100,109,105,110) - char(0x61646D696E) 2. 단순 문자열 필터링인 경우 - ereg, eregi - 대소문자 구분을 안하기 때문에 대소문자를 이용해 우회 ex) aDmin 3. = 우회 - like >> 1 like 1 - i..
sql injection공격을 진행할 때 단순 문자열을 필터링 하고 있는 경우 문자열을 결합할 경우가 생기는데 방식은 아래와 같다. 1. Mysql - mysql 에서는 문자열을 결합할 때 공백을 이용한다 만약 "admin"이라는 문자열을 필터링하고 있을 경우 ex) 'ad' 'min' 2. Oracle - Oracle 에서는 || 을 이용하며, 만약 "admin"라는 문자열을 필터링하고 있을 경우 ex) 'ad' || 'min' 3. Mssql - Mssql 에서는 + 을 이용하며, 만약 "admin"라는 문자열을 필터링하고 있을 경우 ex) 'ad' || 'min'
SQL Injection 이란? 4년에 한 번 가장 위험한 웹 애플리케이션 보안 위험 10가지를 알려주는 owasp10에 주기적으로 1등을 하고 있는 Web Hacking 기법으로써 Database에 쿼리문(질의문)을 넣는 과정에서 데이터를 임의적으로 조작 원하는 SQL 구문을 실행하는 기법이다. SQL Injection 에 기본원리는 WEB과 DB서버 간에 사용되는 쿼리를 우회 원하는 쿼리로 조작을 해 참으로 만들어 원하는 데이터를 추출할 수 있다. 간단한 예제로 확인해 보면 테이블을 간단히 [그림1]와 같이 정의한다 일반적으로 로그인 인증을 할 때 쿼리문을 and 연산으로 사용해서 한다 결과값은 당연히 거짓 당연히 아무런 결과값도 안나온다. 하지만 [그림4]와 같이 쿼리 구문을 우회했을 때 일반적으로..
1-1 information_schema란? mysql은 데이터의 집합이다 데이터가 많아질 경우 데이터를 목록화 시킬 필요가 있는대 이러한 요구에 맞춰 생겨난 게 바로 메타데이터 메타데이터는 데이터베이스와 같이 많은 데이터를 다뤄야 하는 경우 효율적인 정보처리를 위해 만든 것, 쉽게 말하자면 정보에 대한 정보 mysql은 메타데이터들을 종류별로 묶어 테이블을 만들고 테이블을 모아 디비를 만들었는대이러한 디비가 information_schema 이다. 이 DB는 읽기전용이라서 데이터베이스의 테이블과 같은 데이터로 동적으로 생성되므로사용자가 직접 수정, 관여를 할 수 없다. phpmyadmin에서 information_schema DB를 본 화면 총 78개 테이블이 보이는대 이번 글에서 메인으로 볼 테이블은..
0-0 사전준비, DB이름 길이, DB이름 가져오기:https://dorahee.tistory.com/108?category=735413 0-1 table 길이, 이름 가져오기: https://dorahee.tistory.com/109?category=735413 0-2 칼럼길이 칼럼값 가져오기: https://dorahee.tistory.com/110 1-1 값 길이 가져오기 일단 확실한 공부환경을 만들기 위해서 약간에 소스코드 수정과 DB값을 추가 했다. 위와 같이 admin을 하나 추가 시키고 123456789101112131415161718192021222324252627Colored by Color Scriptercs php 에서는 no에 값이 5일 경우 pw만 빼고 출력하는걸로 바꿨다. 일단 ..
0-0 사전준비, DB이름 길이, DB이름 가져오기: https://dorahee.tistory.com/108?category=735413 0-1 table 길이, 이름 가져오기: https://dorahee.tistory.com/109?category=735413 0-2 칼럼 길이 가져오기테이블에 존재하는 칼럼값을 가져오기 위해서 and length((select column_name from information_schema.columns WHERE table_name='sql_injection' limit 0,1)) = 2을 입력한다. 참이기 때문에 값이 나오는걸 확인 할 수 있고 sql_injection에 첫번째 칼럼은 길이가 2 인것을 확인할수있다. mysql에서 쿼리문을 입력해보면 역시 참값이..
0-0 사전준비, DB길이, DB이름 가져오기 : https://dorahee.tistory.com/108?category=735413 0-1 테이블 길이 가져오기 일단 DB에 존재하는 테이블을 길이 알아내기 위해서 length((select table_name from information_schema.tables where table_schema = 'blind_db' limit 0,1)) = 1 쿼리를 입력한다 위 와 같이 쿼리가 들어갈 경우 php에서는 "SELECT * FROM sql_injection WHERE no = 1 and length((select table_name from information_schema.tables where table_schema = 'blind_db' lim..