본문 바로가기

보안/[War Game] Load of SQL Injection

(8)
Lord of SQL injection level 11 (Golem) 풀이 문제는 위와 같다. ​ or, and, substr( , = 를 사용 할 시 HeHe 페이지로 전환이 되고 필터링 단어를 우회해서 admin 의 pw 를 blind injection 공격으로 알아내야하는 문제이다. ​ or , and 는 앞선 문제에서 || 와 && 를 사용하는 것을 배웠기 때문에 substr 와 = 필터링 우회 방법을 확인한다. ​ substr 은 substring 또는 substr('abc',1,1) 를 right(left('abc',1),1) 으로 substr('abc',2,1) 를 right(left('abc',2),1) 으로 우회 하는 방법도 있다. ​ ​ right, left 는 추후 문제풀이에서 나올 가능성이 크기 때문에 이번에는 substring으로 키워드 필터링을 우회한다..
Lord of SQL injection level 10 (Skeleton) 풀이 스켈레톤 문제는 위와 같다. ​ 데이터베이스에서 admin 을 가져오면 문제가 해결된다. 하지만 query문에서는 id가 guest로 고정되어있고 and 1=0 이 뒤에 따라붙는다. ​ 때문에 id / 공격 구문 / and 1= 0 총 세부분으로 나누어 SQL Injection 공격구문을 작성한다. ​ ?pw='or id='admin' or id='abc ​ 위와 같이 작성하여 pw=' 를 통해 guest 를 이용한 query 구문을 버리고, id='admin' 로 문제를 해결한다. or id='abc 를 통해 and 1=0 와 id='admin' 부분을 나눈다. ​ ​
Lord of SQL injection level 9 (Vampire) 풀이 문제는 위와 같다. ​ 문제 해결을 위해서는 데이터베이스에서 admin이라는 아이디를 가져와야 하는데 조건문에서는 싱글쿼터를 사용하지 못하고 admin 이라는 글자를 "" 으로 치환한다. ​ 즉 adadminmin 이라고 작성하면 중간의 admin 은 "" 으로 치환되어서 ad""min => admin 이라는 id를 입력 폼에서 받아 query에서 사용 할 것이다. ​
Lord of SQL injection level 8 (Troll) 풀이 ​ 문제느 위와같다. 싱글쿼터를 필터링하며 id에 admin 을 입력할 시 HeHe 페이지로 필터링 된다. ​ 하지만 sql 에서 가져온 아이디가 admin 이여야 문제가 해결되므로 ereg 으로 admin을 필터링한 부분을 우회해야하는 문제이다. ​ 처음에는 싱글쿼터를 우회하고 admin을 16진수로 작성하여 공격을 진행해보았다. ​ ?id=" or id=0x61646d696e -- ​ ​ 실패. ​ SQL 우회 기법을 검색하던중 ereg 을 따로 필터링 하는 방법이 있어서 시도해보았다. ​ 참고는 https://blog.minivet.kr/?p=304 이 곳에서 하였다. ​ 알면 쉽고 모르면 어렵다.
Lord of SQL injection level 7 (Orge) 풀이 문제는 위와 같다. 앞선 문제에서 해결했던 or 와 and 필터링과 admin 아이디의 비밀번호 추측을 위한 Blind SQL Injection 을 결합한 문제이다. ​ Blind SQL Injection 을 위해 사용했던 파이썬 코드를 다음과 같이 수정한다. query에서 or 를 || 로 , id 가 admin 인 계정의 패스워드를 알아내야 하기 때문에 &&도 필요하다. 싱글쿼터를 문자로 인식시키기 위해 \' 로 사용한다. ​ ​ 길이를 알아내었기 때문에 범위를 좁혀서 Blind SQL Injection 을 사용한다. 비밀번호를 대입하다가 비밀번호 추측이 맞을 경우 Hello admin 이라는 글자가 나오기 때문에 사용 가능한 공격이다. ​ 위와 같이 query를 변경하여 실행하면 ​ 위와 같이 ad..
Lord of SQL injection level 6 (darkelf) 풀이 다크엘프의 문제는 위와 같다. ​ 문제는 데이터베이스에서 admin 이라는 아이디를 가져오면 풀리는 문제이다. if(preg_match('or|and/i', $_GET[pw])) exit("HeHe"); 코드를 보면 pw의 입력에 or 또는 and 가 포함 될 시 HeHe 페이지로 전환되는 것을 확인 할 수 있다. ​ 문제를 풀기 위해서 pw=' or id='admin 로 쿼리를 보내야 하는데 HeHe 라는 페이지로 가지 않기 위해 or 를 직접사용하지 않고 우회하여 사용한다. URL 에서 and를 & 로 사용 하듯이 or 를 | 로 우회할 수 있지 않을까 해서 | 로 입력해본다. ​ ​ 하나로는 or 기능이 동작하지 않아 || 로 다시 입력해 본다. pw='|| id='admin​ ​ ​ or 또는 a..
Lord of SQL injection level 5 (wolfman) 풀이 wolfman의 문제는 위와 같다. ​ 코드를 해석하면 id가 데이터베이스 내에 존재하면 echo 를 통해 Hello '데이터베이스 내에 조회한 ID' 라고 출력된다. 만약 조회한 아이디가 admin 이면 문제는 풀리게 된다. ​ 코드에서 알수 있지만 pw=' or id='admin 를 입력 해보면 No whitespace라는 문구가 나온다. ​ 즉 pw 입력에 공백이 포함되어 있으면 안된다. 그이유는 if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 에서 필터링 되기 때문이다. 공백을 우회하는 방법으로 ​ 을 직접 URL 에 대입해하여 공격해보았지만 풀리지 않았다. ​ 공백을 우회하는 기법을 인터넷에서 찾아아본다. ​ 참고한 글은 https:/..
Lord of SQL injection level 1~4 풀이 https://los.rubiya.kr/gate.php 에서 lord of SQL injection 문제를 풀고 작성한 내용이다. 메인 화면에는 괴물들이 나와 있고 단계별로 문제를 풀게 구성되어 있다. ​ 1. gremlin 문제 문제의 내용은 다음과 같다. ​ SQL Injection 공격을 한 번도 시도 해보지 않아서 처음에 어떻게 공격을 진행을 해야 할지 당황하였다. 이론적으로 간단하게 SQL Injection 공격은 Query 를 SQL에 보내 쿼리의 결과가 참이 되게 만들어 데이터베이스의 정보를 탈취하는 공격 기법으로만 알고 있었다. 코드 내용 중간을 살펴보면 "select id from prob_gremlin where id=’{$_GET[id]}’ and pw=’{$_GET[pw]}’”; 구..