전체 글

Department of Computer Science and Engineering, 21th, Sungkyunkwan University
Web Hacking/LOS

Lord of SQL Injection - zombie

문제 형식은 앞전의 문제 ouroborus 와 매우 유사하다. 필터링에 'ace' 라는 문자열이 포함되어있어 Quine 은 사용하지 못할 것 같다. 이번 문제에는 table에 데이터가 존재할 수도 있을 것 같다. 확인해보자. pw=' or 1%23 음. 없다. 이번 문제에도 테이블에 아무런 데이터가 존재하지 않는다. Quine도 사용하지 못한다. replace 함수를 다른 함수로 대체할 수 있는지 찾아보았지만 그런 것은 존재하지 않았다. 어떤 기술을 발휘해야 이 난관을 뚫을 수 있을까. 이전에 SQL Injection 에 대한 공부를 할 적에, Real World 환경에서의 SQL Injection 을 테스트 사이트에서 진행한 적이 있었다. DB 시스템에서 사용하는 메타데이터들의 집합, informati..

Web Hacking/LOS

Lord of SQL Injection - frankenstein

Blind & Error-Based SQL Injection 문제인 것 같다. 싱글쿼터는 필터링하지 않아서 문자열 탈출은 수월하게 이루어질 것 같다. 그런데 필터링에 괄호들과 'union' 이 존재한다. 서브쿼리와 함수는 이용하지 못할 것 같다. 코드의 첫 번째 paragraph를 보면 마지막 line에 query에 error가 존재하면 "error"라는 문자열 페이지로 exit 된다. 바로 이것을 이용하면 될 것 같다. 우선 오류를 어떻게 만들어 내야할지 고민해야 한다. union을 사용할 수 없기 때문에 subquery로 하여금 select으로 뽑아낼 2개의 columns 보다 많은 수의 column들을 뽑아 오류를 발생시키는 것은 불가능하다. 이때 정수의 범위를 벗어나게 하여 오류를 발생시킬 수 있..

Web Hacking/LOS

Lord of SQL Injection - phantom

table을 이용하는 문제가 다시 등장했다. 우선 차근차근 코드를 이해해보자. 제일 먼저 duplicate 이라는 문자열을 필터링한다. 필터링이 없었다면, insert 문 제일 뒤쪽에 on duplicate 를 적음으로써 기존에 있던 table 데이터를 우리가 원하는 특정 문자열이나 숫자로 값을 바꿀 수 있다. 그렇게 해서 no의 값이 1인 row를 다른 no 값으로 변경하여 email이 asterisk(*)로 변경되는 조건문을 뛰어넘을 수 있었다. 그 다음은 $_SERVER[REMOTE_ADDR] 로 접속자의 IP를 가져오고, joinmail 값을 가져와 하나의 row를 insert 한다. 예를 들어서 간단한 임의의 이메일을 전달해주면 다음과 같이 하나의 row가 추가된 것을 볼 수 있다. 한 가지 신..

Web Hacking/LOS

Lord of SQL Injection - red_dragon

박수가 절로 나오는 문제였다. 예전 문제에 admin 이라는 문자열 필터링을 우회하기 위하여 adadminmin 과 같은 방식으로 썼던 것이 기억 나는가? 무언가 유사한 패턴이다. 주석에 대한 특성도 같이 사용된 문제였다. 문제는 admin 계정의 no를 알아내는 것이다. pw를 찾는 것과 유사하다. Blind SQL Injection 문제로 보인다. id는 7글자밖에 사용하지 못한다. no 영역은 숫자가 아니면 1을 반환한다. 따라서 no 에서는 아무런 짓을 할 수가 없다. 처음에는 no영역에 16진수를 넣으면 되지 않을까 했지만 PHP 문법의 is_numeric 함수에서는 16진수와 2진수는 적용되지 않는다고 한다. 우선 id에서 Hello 라는 문자열을 출력시키기 위하여 필요한 최소 글자는 어떻게 ..

Lucvs
Lucvs