본문 바로가기
SQL Injection in INSERT query ▶ INSERT query INSERT query는 테이블 내에 데이터를 입력할 때 쓸 수 있는 쿼리이다. INSERT 쿼리의 양식은 아마도 다음과 같을 것이다. INSERT INTO TABLE(a,b,c) values (d,e,f) INSERT INTO TABLE SET a='d', b='e', c='f' ▶INSERT query SQLi 아마도 다음과 같이 수행할 수 있을 것이다. 쿼리 - insert into table(a,b,c) values ('d','사용자입력값','f') 사용자입력값 - e',(select table_name from information_schema.tables limit 1))# 실제쿼리 - insert into table(a,b,c) values ('d','e',(sel.. 2023. 1. 15.
Information_schema와 SQL Injection ▶ Information_schema? DB의 메타 정보(ex. 테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB를 말한다. Information_schema 데이터베이스 내의 모든 테이블은 읽기 전용이며, 단순히 조회만 가능하다. 즉, 직접 수정하거나 관여하는건 불가하다. 데이터베이스 내의 테이블은 레코드가 있는 것이 아니라, SQL을 이용해 조회할 때마다 메타 정보를 MySQL 서버의 메모리에서 가져와서 보여준다. 따라서, 한꺼번에 많은 테이블을 조회할 경우 시간이 많이 걸린다. ※ 메타 데이터(Metadata) : 데이터의 데이터로써, 데이터베이스 또는 테이블의 이름, 칼럼의 데이터 타입, 또는 접근 권한과 같은 것을 말한다. 경우에 따라서 데이터 사전(data dictionary)과 시스템.. 2023. 1. 7.
SQL Injection 필터우회의 모든 것 (펌) 우선 필터링에 대해선 크게 3가지로 나뉜다. 1) MySQL syntax MySQL은 상당히 말랑말랑한 문법체계를 가지고 있다. SeLeCT와 같이 keyword는 대소문자를 구분하지 않고 select * from users와 같은 query도 공백을 필터링하는 경우 %0a 같은 delimiter를 쓸 수 있고 또한 select(*)from(users); 와 같이 공백이 필요한 부분에 ()를 감싸는 것도 적법한 문장이다. 이러한 MySQL의 특성을 이용해 여러가지 필터링을 우회할 수 있다. 2) Keyword Filter 인젝션을 가능하게 하는 여러가지 키워드 (union, select, limit, having, like) 등등의 필터링은 인젝션을 얼핏봐서는 불가능하게 만든다. 이런 경우에 mysql내.. 2023. 1. 6.
Blind SQL Injection 과 자동화 (Blind SQL Injector) 및 SQL Injection 대응방안 ▶ SQL Injection 항목별 적용법 SQL 질의문이 화면에 보이는 경우 : Union SQL Injection SQL 에러가 응답에 포함되는 경우 : Error based SQL Injection SQL 질의문 결과가 화면에 나오지 않는 경우 : Blind SQL Injection ※ Blind SQL injection은 속도가 느려서 모든 타입에 무작정 적용하기에는 적합하지 않다. ▶ Blind Based SQL Injection 원리 SQL 질의문 결과가 참/거짓에 따라 응답이 달라지는 원리를 이용 ex) ~ and '1%'='1%' (T) // ~ and '1%'='2%' (F) 사용하는 대표적인 트릭은 다음과 같다(경우에 따라 다른 SQL 문법도 이용가능 - 우회하는 경우). [1] lim.. 2022. 12. 11.
SQL injection 우회방법 정리 ※ 워게임 풀면서 찾은 우회법, 계속 업데이트 할 예정. ▶공란 필터링 (avoiding whitepsace) %0a(\n) %0b(\v: vertical tab) %0c(\f:Form feed{프린트 출력시 현재 페이지 침}) %0d(\r:Carriage return) %09(\t) %a0(nbsp:non-breaking space) /**/ 괄호() 사용 : pw = 'or(id='admin')and'1'='1 ▶주석 필터링 ;%00 /* %23(#) (c.f. %00: null) ▶equal(=) 필터링 substr('abc',1,1)like('a'), if(strcmp(substr('abc',1,1),'a'),0,1), substr('abc',1,1)%20in('a') LIKE,REGEXP,RLI.. 2022. 12. 10.
SQL injection in 'order by' clause ※ 참고자료 중 영어자료도 포함되어 오역이 있을수 있습니다. 지적해주시면 성실히 수정하도록 하겠습니다. ▶ order by clause SQL Injection 요소 탐지 다음과 같은 쿼리문의 있다고 가정하자(단, member: 테이블명, id: 'member' 테이블의 id칼럼), SELECT * FROM member WHERE 1 GROUP BY id ORDER BY {INJECTION POINT} ASC 불러오는 쿼리의 칼럼 수는 총 7개이다(총 칼럼의 수(*)가 7개이므로). 따라서, {injection point}의 숫자가 7을 초과하면 query는 실패하게 된다. 여기서 order by clause에서 SQL Injection 요소가 있음을 확인해볼 수 있다. ▶ order by clause .. 2022. 12. 9.