본문 바로가기
반응형

워게임58

[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.
[los - SQL injection] orc ( 4단계 ) [los - SQL injection] orc ( 4단계 ) [ 문제풀이 ] orc는 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) 조건문을 만족해야 해당 문제가 풀린다.. 취약점으로 이용할 수 있는 부분은 $query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 와 $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 이 두군데로 보인다...근데 이 문제에서는 addslashes() 함수를 이용해서 쿼터의 사용을 금지하여서 두번째 쿼리에서는 쿼터 사용이 불가능해진다..여기서는 첫번째 쿼리와 출력되는 e.. 2017. 9. 23.
[los - SQL injection] goblin ( 3단계 ) [los - SQL injection] goblin ( 3단계 ) [ 풀이과정 ] goblin 문제도 이전 문제와 같이 if($result['id'] == 'admin') 조건이 만족이 되야 풀리는 문제이다.. prob _ . ( ) ' " ` 기호가 모두 막혀있어서 다른 테이블로의 접근이나 쿼터사용이 불가능해졌다. id의 값은 guest로 고정이 되어있고 no값을 이용해서만 sql injection이 가능한데 no는 string이 아닌 numeric 값을 받는다. no에 1을 넣었을때 Hello guest라는 문자가 출력되는걸 확인하고 guest는 첫번째 행에 있는걸 추측 해볼 수 있다..그렇다면 guest가 어떤 no에 있는지를 알았기 때문에 앞의 쿼리를 만족하지 못하도록no 값에 2를 주고 뒤이어 .. 2017. 9. 23.