네트워커의 보안 티스토리

* 본 게시물의 내용은 수업에서 배운 것을 정리한 것이므로 악용해서는 안됩니다.

  게시된 내용들은 잘 알려져있는 기술들입니다. 따라서  악용하더라도 쉽게 적발되니

  절대 악용해서는 안됩니다.

--------------------------------------------------------------------------------------------




* DATABASE SCHEME 파악하기



데이터가 어떻게 만들어져 있나.




Client Side Validation 우회

특정 문자 길이 이상 제한을 우회할 수 있다.

서버에서 확인하는 것이 제일 좋다.




1. 데이터베이스 이름 찾기.


2. field명 찾기


3. record 찾기.


순으로 이루어진다.



db 이름을 먼저 알아내는 작업을 하는 이유는, 다른 정보들을 찾아 낼 수 있는

인젝션 벡터냐, 아니냐를 테스트 하기위함이다.


마찬가지로 형변환 오류를 응용하는 것인데,


* db_name()을 이용한다.

db의 이름을 문자열로 반환하는 MS-SQL 함수이다.

문자열을 숫자와 비교하는 구문이 되므로 형 변환중 오류가 발생하게 되며 에러 메시지를 화면에 표시하게 되는 경우에 변환에 실패한 값인 DB이름을 에러 메시지에 포함하게 된다.



ex ) 'and db_name() > 1 --







or 는 왼쪽이 참이면 오른쪽을 보지 않는다.

and는 왼쪽이 거짓이면 오른쪽을 보지 않는다.



둘중 하나 해보고 안되면 다른 것을 해보면 그만이다.




인젝션 백터에 만약 홑따옴표 '를 사용하지 않고, 작성해야한다고 가정하자.

홑따옴표는 문자열 처리에 사용된다는 것을 알고 있으면 의외로 쉽다.





숫자열로 처리하는 곳을 찾는게 답이다.









camel 역시 마찬가지다.








위와 같은 공백을 없애주는 방어방법도 우회가 가능하다








방어법도 다양하다.


- 파라미터 값을 다 '' 로 처리하고 ''를 공백으로 처리하는 방법,


- instr로 찾아서 있으면 에러처리,


- 일정 길이를 넘으면 에러처리



* Table 명 알아내기


Table 명을 포함한 시스템 테이블


sysobjects(있을수도 있고 없을수도 있다.)

information_schema.tables

information_schema.columns









sysobjects에서 필요한 테이블명을 알아내는 과정.






information_schema columns의 member 기본 쿼리문








위에 있는 것이 기본적인 쿼리문


다음은 응용해서 알아내겠다





* 모든 테이블의 이름을 알아내기 위한 방법


1. 알아낸 Table 이름을 하나씩 제거하면서 알아내는 방법


2. 알아낸 Table 이름과 비교연산을 통해 하나씩 차례대로 알아내는 방법


3. Top 구문을 이용하여 검색결과를 하나씩 늘리면서 정렬/ 역정렬을 통해 알아내는 방법






위는 알아낸 Table 이름을 하나씩 제거하면서 알아내는 방법이다.






위는  알아낸 Table 이름과 비교연산을 통해 하나씩 차례대로 알아내는 방법이다.


1번방법은 테이블값을 알아내면 알아낼수록 추가해줘야하는 값이 늘어나지만


이 방법은 테이블명만 달라진다.


테이블 문자값들이 다 아스키코드로 변환되서 비교되기 때문에, 비교적 단순하다.








 Top 구문을 이용하여 검색결과를 하나씩 늘리면서 정렬/ 역정렬을 통해 알아내는 방법


쿼리문 하나만 작성하면 , 숫자만 바꿔주면 되기 때문에, 제일 편하다.




응용: 

'and (select top 1 column_name from (select top 11 column_name from information_schema.columns where table_name='member' order by column_name) as vtable order by column_name desc

)>1--




'정보보안' 카테고리의 다른 글

DBMS 마다 다른 한개만 보기  (0) 2017.03.21
30일차 SQL인젝션, Blind Sql Injection  (0) 2017.03.21
28일차 SQL Injection  (0) 2017.03.17
27일차 CSRF, SQL BASIC  (0) 2017.03.16
26일차 CSRF  (0) 2017.03.15