본문 바로가기

LoS Level7 orge 문제풀이 이 문제도 역시나 Blind SQL Injection 문제이다. 코드를 한줄씩 살펴보면 다음과 같다. include "./config.php"; login_chk(); dbconnect(); 설정 파일을 include 하고, 로그인 여부를 확인한 후 데이터베이스와 연결한다. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); GET 방식으로 pw를 받아오는데, 받아 온 값에서 prob와 _(언더바), .(온점), (, )를 필터링 하고 추가적으로 or와 and 문자열을 필터링 한다. 즉, 이 Blind SQL Injecton 문제에서 사용한 .. 더보기
LoS Level6 darkelf 문제풀이 darkelf 문제의 소스코드이다. 이 전 wolfman 문제와 코드가 동일해 보이는데 확인해 보니, or와 and를 필터링한다는 것을 알 수 있었다. 따라서 이 필터링을 우회하고 select 된 id가 admin이 되도록 쿼리를 완성시켜주어야 한다. 몇몇 논리연산자들은 다양한 방법으로 우회가 가능하다. and && or || like =이 문제에서는 or 대신에 ||를 사용 해 문제를 풀었다. 먼저 id='guest'를 무력화 시켜야 하므로 pw에는 아무 값이나 넣어 조건을 false로 만들어 준다. 이 후, || id=admin을 입력 해 id가 admin인 행의 id를 select하도록 했다. 완성되는 쿼리는 다음과 같다. select * from prob_darkelf where id='guest.. 더보기
LoS Level5 wolfman 문제풀이 wolfman 문제에 접속하니 아래의 코드가 나왔다. 공백(%20)이 필터링에 막혀있는것을 확인할 수 있다. mysql에서는 ;이 입력될 때까지 엔터, 탭 등을 입력하더라도 계속 입력받는다. 따라서 공백(%20)을 엔터 혹은 탭으로 우회하도록 시도 해 보았다. 우회 가능한 문자열은 %09, %0a, %0d가 있다. 이 중 공백 대신으로 %0a를 삽입하고 1' or id='admin을 추가 해 문제를 풀이 해 보았다. 즉 입력하는 값은 1'%0aor%0aid='admin이 되고, 완성되는 쿼리는 아래와 같다. select id from prob_wolfman where id='guest' and pw='1' or id='admin' 이 경우 앞의 id='guest' and pw='1'의 조건은 거짓이 되므.. 더보기