목록Web/Lord Of Sql (12)
김승현
문제는 이렇게 생겼고 코드를 분석해보자. include "./config.php"; login_chk(); $db = dbconnect(); 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"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. if문들은 필터링 관련 내용입니다. (preg_match란 정규 표현식에 해당 내용이 발견되면 검색..
문제는 이렇게 생겼다. 코드를 분석해보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. if문들은 필터링을 하는 내용입니다. 필터링 내용 no hack 1. prob 2. _ 3. . 4. ( 5. ) hehe 1. or 2. and 3. substr 4. = 위의 문자들..
문제는 이렇게 생겼습니다. and 1=0은 신경 쓸 필요 없는 게 id나 pw의 값에 쿼리문을 이용해서 입력하고 난 후 마지막에 %23을 입력해 주기만 하면 1=0과 같은 뒷 내용이 주석처리가 되기 때문에 신경 쓸 필요 없습니다. 코드를 한 줄 한 줄 살펴봅시다. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. 네 번째 줄은 필터링 관련 내용입니다. (preg_match란 정규 표현식에 ..
문제는 이렇게 생겼다. 한 줄 한 줄씩 분석해보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); $_GET[id] = strtolower($_GET[id]); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. 네 번째 줄은 id에서 대소문자 구분 없이'(작은 따옴표)를 필터링하는 내용입니다. 그러난 후 id의 내용들을 소문자로 바꿉니다. $_GET[id] = str_replace("admin","",$_GET[id]); $query = "select id..
접속해보면 이런 화면이 뜨는데 코드 분석을 해보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match("/admin/", $_GET[id])) exit("HeHe"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. 네 번째, 다섯 번째 줄의 preg_match는 필터링을 하는 내용입니다. 필터링 내용 no hack 1. ' HeHe 1. admin 필터링을 보면 HeHe를 보면 NO hack과 달리 /i가 없는데 /i는 대소문자를 ..
접속 화면은 이렇게 생겼다. 코드를 자세히 살펴보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 첫 번째 줄은 ./config.php를 포함한다는 내용이다. 두 번째 줄은 login을 했는지 확인하는 내용이다. db에 연결하고 preg_match내용은 필터링을 하는 내용이다. 필터링 내용 no hack 1. prob 2. _ 3. . 4. ( 5. ) HeHe 1. and 2. or /i 내용은 대소문자를 구분하지 않는다는 내용이다. ..
문제는 이렇게 생겼다. 코드를 자세히 보도록 하자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 첫 번째 줄은 ./config.php 파일을 포함한다는 내용이다. 두 번째 줄은 login을 했는지 체크하는 내용이다. 세 번째 줄은 db를 연결한다. if문은 필터링 내용이다. 필터링 내용 no hack 1. prob 2. _ 3. . 4. ( 5. ) hehe 1. or 2. and or과 and는 필터링을 하고 있지만 ||이나 &&을 이..
문제는 이렇게 생겼다. 코드를 자세히 살펴보자. login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 제일 먼저 login을 했는지 체크함 db연결 필터링 목록 no hack 1. prob 2. _ 3. . 4. ( 5. ) no whitespace 1. 띄어쓰기 $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; echo "query : {$query} "; $result = @mysq..
문제 문제는 이렇게 되어 있고 그냥 admin이 id로 입력되어 있고 pw에만 쿼리를 입력해서 sqli를 성공시키는 문제인 것 같다. 쿼리문을 확인해보면 select id from prob_orc where id='admin' and pw='{$_GET[pw]}' 이렇게 생겼다. pw에 적당한 값을 입력해보자. 이런 식으로 id가 admin이면 되게 했는데 Hello admin는 떴지만 orc clear! 가 뜨지 않았다. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 자세히 코드를 보면 위의 내용을 볼 수 있는데 result의 pw가 파라미터인 pw와 동일해야지 문제가 풀리는 방식이다. blind sqli로 비밀번호를 한 자리 ..
문제 이번엔 저번 문제와 유사하지만 '와 "와 `까지 필터링하며 만약 사용됐을시 No Quotes가 뜨도록 되어있고 sql쿼리문이 id와 pw가 아니라 id와 no로 작성되어 있고 id엔 이미 guest로 입력되어 있다. 일단 no가 있으니까 파라미터 no에 0을 입력했더니 딱히 변한 건 없다. 이번엔 1을 입력해봤는데 Hello guest가 뜬 걸 알 수 있다. 이를 통해 각 아이디에는 고유의 no가 정해져 있다고 추측할 수있다. 그럼 admin은 0이거나 2 또는 그 이후 숫자일 것인데 일단 0부터 시도해보자. 연산자 우선 순위에 의해 and 먼저 연산이 되는데 guest의 no = 1 이기 때문에 id 'guest and no = 0는 거짓이 되기 때문에 뒤에 있는 or no = 0이 실행된다. 그..