본문 바로가기

blind sql injection

[Secuinside 2013] banking, write up 이번 문제의 핵심은 웹소켓을 이용한다는 점과, 그 후에는 간단한 블라인드 인젝션 문제이다. 웹소켓을 사용하기 위해선, 파이썬 웹소켓 모듈이 필요하다. 구글을 통해서 다운받는다. 그리고나면, desc와 asc를 넣어주는 부분이 있는데, 해당부분을 통해서 인젝션이 가능하다. 정렬을 할때, order by a desc, b asc로 하게되면, a로 정렬한후, a가 같을때 b로 정렬하게 된다.이 특징을 이용해서, by a desc, if(1=1,b,c) asc로 넣어주게 되면 블라인드 인젝션이 가능하다. 상황에 따라 True와 False가 의미하는 결과가 다르기때문에, 주의해야한다. from websocket import create_connection import json import pprint import.. 더보기
LPAD,bin,ascii를 이용한 효과적인 Blind SQL Injection (Only mysql) Blind SQL injection은 아무래도 브루트포싱이다보니, 한글자를 알아내기까지 많은 쿼리를 보내야합니다.빠릿빠릿한 서버라면, 별 상관없을수도 있지만. 느린서버를 공략할때는 너무 답답합니다.하지만, LPAD,bin,ascii와 같은 함수들을 이용하면, 쿼리의 횟수를 확 줄일수 있습니다. 기존의 방법대로라면 한글자를 알아내기까지 최대 약 70개정도의 쿼리를 보내야 한다면.이 방법을 사용했을땐, 8번의 쿼리만으로 글자를 알아낼수 있습니다. 함수들을 설명해드리면,ascii는 캐릭터를 숫자로 변환하는 함수입니다.ex) 'A' -> 65, 'a' -> 94, '0' ->48 bin은 숫자를 2진법 형태의 스트링으로 변환하는 함수입니다.ex) 12 -> '1100', 65->'1000.. 더보기
Time-based Blind Injection 이번에도 문법은 MySQL 기준으로 설명하겠습니다. Blind SQL injection을 할때, True or False에 따라 결과값이 달라진다면, 간단히 해낼수있지만.True or False에 따른 화면 결과값이 달라지지 않을때가 있습니다. 그럴땐 if함수와 sleep함수를 이용하면 됩니다.그리고, 시간을 재야하기 때문에 파이썬등의 스크립트를 이용한 공격이 필수라고 생각됩니다.. Sleep은 대부분 아실텐데, sleep(x) 라면, x초간 멈추는겁니다. 그리고 if함수의 구성을 보자면,if(조건,참일때 결과값,거짓일때 결과값)입니다. 그래서 참일때, sleep(x)을 걸고, 요청을 보내서 response가 x초 이후에 도착했다면, True라고 판단하면 됩니다.물론, 평소의 response가 오기까지 .. 더보기
SQL Blind Injection 제가 여기저기서 조금조금씩 주워듣고 해본것들을 정리하는것이기 때문에, 일반적인 용어가 아닐수도 있습니다.그리고, 문법은 MySQL을 기준으로 설명하겠습니다. (물론, 다른 SQL에서도 문법만 조금 달리하여 사용 가능합니다.) Blind Injection이란 True or False의 결과값을 이용하여 DB의 내용을 알아내는 기술을 말합니다. 예를 들어서 설명을 해보겠습니다. 어떤 테이블이 있고, search 기능을 통해 특정한 num을 불러오는 기능이 있다고 할때 그 search의 쿼리문은 select * from table where num=[원하는 번호] 대충 이런형태 일것입니다. 그러면, 만약 원하는번호에 "1 and 1=1 #" 를 넣는다면,select * from table where num=1.. 더보기