본문 바로가기
반응형

워게임/LOS20

[los - SQL injection] darknight ( 12단계 ) [los - SQL injection] darknight ( 12단계 ) [ 풀이과정 ] darknight에서 no는 prob _ . ( ) ' substr ascii = 기호가 preg_match로 필터링 되어있고pw는 싱글쿼터가 필터링 되어있다. pw에는 싱글쿼터가 필터링 되어있어서 우회하기가 힘들고 no를 보면 numeric SQL injection을 이용할 수 있는게 보인다..select id from prob_darknight where id='guest' and pw='' and no=1 or id in (char(97,100,109,105,110)) %26%26 length(pw) like 8을 이용해서 admin의 pw 길이가 8인걸 알아냈다. substr과 ascii가 필터링 되어있지만 .. 2017. 9. 23.
[los - SQL injection] golem ( 11단계 ) [los - SQL injection] golem ( 11단계 ) [ 풀이과정 ] golem은 if(($result['pw'] && ($result['pw'] == $_GET['pw'])) 조건을 만족해야 문제가 풀린다.여기 문제에서는 prob _ . ( ) or and substr( = 기호가 preg_match()를 통해서 필터링 되어있다..보통 참/거짓을 확인할때 1=1 쓰지만 '=' 기호는 쓸수 없기 때문에 like, sleep(), char() 등을 이용해서 참/거짓을 확인한다. select id from prob_golem where id='guest' and pw='' || sleep(10) #'를 이용해서 참/거짓을 통한 인젝션 가능성을 확인을 했다. select id from prob_g.. 2017. 9. 23.
[los - SQL injection] skeleton ( 10단계 ) [los - SQL injection] skeleton ( 10단계 ) [ 풀이과정 ] skeleton에서도 문제가 풀리는 조건은 마찬가지로 if($result['id'] == 'admin')를 만족해줘야한다.다른 테이블로 이동할수 없도록 막혀져 있고 SQL 쿼리쪽을 확인해보면 $query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0" 로 되있다.다만 여기서는 무언가 결과를 출력해주는 echo에 대한 내용이 없기 때문에 웹페이지의 출력을 통해서 참/거짓을 파악할수 없는 경우이다... 이럴때는 SQL 내장함수인 sleep()을 이용해서 참/거짓 확인이 가능하다... ( 약간의 다른 부분만 있더라도 잘이용하면 충분.. 2017. 9. 23.
[los - SQL injection] vampire ( 9단계 ) [los - SQL injection] vampire ( 9단계 ) [ 풀이과정 ] vampire도 if($result['id'] == 'admin') 조건을 만족하면 문제가 풀리게 되는데troll문제와 다른점은 $_GET[id]=str_replace("admin","",$_GET[id]); 가 있어서 $_GET[id]안에 admin값이 입력 되있다면 빈문자로 값을 바꿔주게 되있다. str_replace() 함수를 찾아보니 문자열에 특정 단어가 포함되어있다면 그 값을 찾아서 원하는 값으로 치환해주는 역할을 하는 함수이다.str_replace("찾으려는 단어","바꿀 값",찾으려는 값)의 형태를 가진다고 보면된다. 이 문제 또한 troll과 마찬가지로 \ 문자를 이용하면 str_replace() 함수를 사.. 2017. 9. 23.
[los - SQL injection] troll ( 8단계 ) [los - SQL injection] troll ( 8단계 ) [ 풀이과정 ] troll은 if($result['id'] == 'admin') 조건을 만족해야 solve("troll");가 실행되면서 문제가 풀린다.다만, 이 문제를 풀기전에 코드를 전체적으로 보면 if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");와if(@ereg("admin",$_GET[id])) exit("HeHe"); 코드가 있어서 싱글 쿼터를 이용할 수가 없고admin이라는 문자를 입력 할 수가 없다... 싱글 쿼터를 없애서 참/거짓을 판단하고 sql 인젝션을 시도하려고 해도 싱글 쿼터로 감싸져 있기 때문에다른 SQL 함수들의 기능이 동작하지 않고 문자열로만 출력이 됬다. 그래서 .. 2017. 9. 23.
[los - SQL injection] orge ( 7단계 ) [los - SQL injection] orge ( 7단계 ) [ 풀이과정 ] orge는 if(($reulst['pw']) && ($result['pw'] == $_GET['pw'])) 조건을 만족하게 되면 문제가 풀린다..이 문제에서도 or, and가 필터링 되있어서 우회해줘야한다.id값은 guest로 고정이 되있고 pw를 이용해서 SQL injection을 진행하면 되는데 여기서도 2군데 취약점이 존재하는데 아래쪽 select 쿼리는 실행이 되기전에 addslashes()를 이용해서 pw로 넘어가는 값에 싱글쿼터, 더블쿼터, 백슬래시, NULL 값이 있다면 해당 문자앞에 이스케이프 문자가 자동으로 붙는 함수이다.그러므로 위에 있는 select 쿼리와 echo에 나오는 결과로 admin의 비밀번호를 알.. 2017. 9. 23.
[los - SQL injection] darkelf ( 6단계 ) [los - SQL injection] darkelf ( 6단계 ) [ 풀이과정 ] wolfman은 prob _ . ( ) or and가 preg_match 함수를 이용해서 필터링 되있었다.$result['id']에 'admin'이 들어있어야 문제가 풀리게 된다.. or나 and가 필터링 되어있을때는 해당 기능을 대신하는 다른 문자로 우회가 가능하다. 우회문자 : || ( or ) , && ( and ) or만 우회할수 있다면 string injection을 통해서 문제를 풀어나갈수 있다.select id from prob_darkelf where id='guest' and pw=''|| 1=1 #'에서 '||' 문자를 이용해서 or을 우회했고pw=''|| 1=1 #' 쿼리를 추가시켜서 참/거짓을 판단 .. 2017. 9. 23.
[los - SQL injection] wolfman ( 5단계 ) [los - SQL injection] wolfman ( 5단계 ) [ 풀이과정 ] wolfman은 if($result['id'] == 'admin') 조건을 만족하게 되면 solve("wolfman"); 가 실행되면서 문제가 풀린다.여기서는 pw에 prob _ . ( ) 스페이스바 입력을 막아두었다. whitespace 우회인데 우회가 가능한 문자들은 미리 파악 해둬야한다. - whitespace 우회 -> %0d, %09, (), /**/, %0a, %0b, %0c, ... 스페이스바 입력이 되지 않기 때문에 SQL 쿼리를 입력할때 각각을 구분 주려면 다른 방법을 이용해야 한다.처음에 '+' 기호를 이용해서 하려고 했더니 다른 화면으로 넘어가면서 'No whitespace ~_~'라는 문장이 떳다.... 2017. 9. 23.