이 친구도 그다지 복잡하지 않은 친구이다. 역슬래시로 id 영역의 싱글쿼터를 벗어나는 방법은 WAF(Web Application Firewall)에 걸리지 않는 것 같다. Blind SQL Injection 형식의 문제이니 pw를 모두 구해야 한다. 우선 길이부터 구하자. id=\&pw= or id="admin" and length(pw)>'0 아주 예쁘게 나온다. 이후에는 pw를 구하는 코드를 짜면 될 것 같다. pw를 구하는 payload 구성 방식에는 다음과 같은 방식들이 있을 것이다. substr 함수를 사용 pw like "X%" - like문과 와일드카드 이용 pw rlike "^X" - 정규표현식과 rlike 이용 bin(ord(substr())) 함수를 이용 - 2진수로 검색 이번에는 그냥..
Ouroborus. 아래 내가 그림판으로 그린 작품처럼 생겼다. "꼬리를 삼키는 자"로 통한다고 한다. 과연 이번에는 무슨 문제일까. 코드를 보면 딱히 구체적인 필터링은 사용하고 있지 않다. 사용할 수 있는지는 모르겠지만, 풀려있는 무기들이 많다. 이후에 query 문의 where 부분이 참값이 될 경우, 화면에 'Pw : ...' 를 띄우는 것 같다. 우선 테스트를 몇개 해보자. pw=' or 1%23 아무런 반응이 없다. table에 아무런 데이터가 존재하지 않는 것 같다. 지난번에도 table에 데이터가 존재하지 않았던 문제가 있었다. 이때는 union 을 통하여 데이터를 새롭게 전달해주어야 한다. pw=' union select 1%23 우선은 출력을 하는 데에 성공하였다. 하지만 문제가 하나 더..
query가 두 개 존재하는 문제이다. 잘 보면 위쪽 query 는 no 값에 아무런 quotation 이 사용되고 있지 않다. 반면에 아래의 query2는 single quotation 이 사용된 모습이다. 먼저 두 개의 query를 동시에, 동일한 query로 만들어주어야 할 것이다. 싱글쿼터와 주석을 잘 활용하면 될 것 같다. 다음과 같이 작성해보자. no=1 union select 1#' union select '1 결과는 아래와 같다. query : select id from prob_alien where no=1 union select 1#' union select '1 query2 : select id from prob_alien where no='1 union select 1#' union..
문제 형식은 앞전의 문제 ouroborus 와 매우 유사하다. 필터링에 'ace' 라는 문자열이 포함되어있어 Quine 은 사용하지 못할 것 같다. 이번 문제에는 table에 데이터가 존재할 수도 있을 것 같다. 확인해보자. pw=' or 1%23 음. 없다. 이번 문제에도 테이블에 아무런 데이터가 존재하지 않는다. Quine도 사용하지 못한다. replace 함수를 다른 함수로 대체할 수 있는지 찾아보았지만 그런 것은 존재하지 않았다. 어떤 기술을 발휘해야 이 난관을 뚫을 수 있을까. 이전에 SQL Injection 에 대한 공부를 할 적에, Real World 환경에서의 SQL Injection 을 테스트 사이트에서 진행한 적이 있었다. DB 시스템에서 사용하는 메타데이터들의 집합, informati..