목록워게임 문제풀이/Lord of SQLInjection (6)
⠀

$query = "select pw from prob_darkknight where id='admin' and pw='{$_GET[pw]}'"; if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("darkknight"); 소스코드를 보니 id가 ‘admin’인 pw의 값을 맞혀야 해당 문제를 통과할 수 있다. if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); 지난 문제 golem..

$query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'"; if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); 소스코드를 보니 id가 ‘admin’인 pw의 값을 맞혀야 해당 문제를 통과할 수 있다. if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); 지난 문제 orge와 유사하지만, 이 문제는 orge를 풀기위해 사용했던 substr과 = 기호가 추가적으로 필터링 되고 있다. * 여기서 = 기호는 like 연산자로 우회 가능하다. 참인 값인 ?pw=’||id like ‘admin’%26%26‘..

if($result['id'] == 'admin') solve("skeleton"); id가 admin이 맞다면 문제는 풀린다. pw 값에 아무 문자나 입력한 뒤, or id=admin을 입력하고 and 1=0을 주석 처리한다. 정답: ?pw=pw’ or id=’admin’%23

id가 admin이 맞다면 문제는 풀린다. 시도1> ?id=admin 실행 결과 공백이 출력된다. $_GET[id] = strtolower($_GET[id]); strtolower 함수는 입력값을 소문자로 바꿔주는 역할을 한다. 즉, $_GET[id]의 값을 소문자로 변환해 다시 $_GET[id]에 저장한다. $_GET[id] = str_replace("admin","",$_GET[id]); str_replace 함수는 문자열에 특정 단어가 포함되어 있는 부분을 원하는 값으로 치환하는 역할을 한다. 즉, 입력값에 admin이 있다면 admin을 그냥 공백(“”)으로 치환하여 다시 $_GET[id]에 저장한다. 여기서 admin을 공백으로 치환한다는 점을 이용하여 문제를 풀 수 있다. ?id=aadmind..

id가 admin이 맞다면 문제는 풀린다. 시도1> ?id=admin 실행결과 HEHE문구가 출력된다. if(preg_match("/admin/", $_GET[id])) exit("HeHe"); 소스 코드를 보면 admin 문자열이 필터링 되어있다. 하지만 DB인 MySQL은 대소문자를 구분하지 않는다. 즉, admin과 Admin을 같은 문자라고 보는 것이다. 이 점을 이용하여 문제를 풀 수 있다. 시도2> ?id=Admin 정답: ?id=Admin

$query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 소스코드를 보니 id가 ‘admin’인 pw의 값을 맞혀야 해당 문제를 통과할 수 있다. 참인 값인 ?pw=’||1=1%23을 입력했을 때, Hello guest 라는 문구가 뜨는 것을 확인할 수 있다. 거짓 값인 ?pw=’||1=2%23을 입력했을 때는 아무 문구도 안 뜨는 것을 확인할 수 있다. 참과 거짓일 때 나오는 결과가 다르다는 점을 이용하여 블라인드 인젝션을 통해 pw를 알아낸다. [풀이 과정] pw의 길이를 알기 위해 인자로 주어진 문자열..