WarGame
[Lord of SQL Injection] assassin 15번 풀이
[Lord of SQL Injection] assassin 15번 풀이
2021.10.17[ 문제 접근 ] 1. get방식으로 pw를 입력받고 입력받은 pw를 쿼리의 like 구문안에 넣고 있다. 2. 싱글쿼터를 필터링하고 있다, 즉 like 절을 거짓으로 만든 후 새로운 쿼리를 만드는게 불가능하다. => like를 통해서 비교를 하고 있다, like는 와일드카드를 통해 패턴을 만들 수 있다. 1. %abc : abc로 끝나는 문자열 2. %abc% : abc라는 문자가 어딘가에 존재 3. abc% : abc로 시작하는 문자열 4. _abc : abc 앞에 특정한 한글자가 존재함 5.. a_bc : a와 b사이에 어떤 한글자가 존재함 [ % 는 여러개의 문자를 대체 , _ 는 단일 문자를 대체 ] [ 문제풀이 ] 더보기 : ?pw=902EFD10 우선 _ 를 사용해 문자열의 길이를 먼저 파악..
[Lord of SQL Injection] giant 14번 풀이
[Lord of SQL Injection] giant 14번 풀이
2021.10.17[ 문제 접근 ] 1. if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) : shit에 존재하는 \n \r \t를 필터링한다 2. shit을 get방식으로 입력을 받는데 질의문이 서로 붙어있고 가운데 우리가 입력한 shit가 들어간다. =>방법 : shit에 1번 이외의 공백을 넣어주어 질의문 형식을 맞춰준다. https://devdori.tistory.com/39 [SQL Injection] 공백 우회방법 (WHITE SPACE) SQL Injection 공격시 공백 문자 필터링시 우회 방법 줄바꿈 (Line Feed) [ \n ]: %0a 탭 (Tab) [ \t ]: %09 수직탭 (vertical tab) [ \v ] : %0b 폼피드 (form feed) [ \f ]..
[Lord of SQL Injection] bugbear 13번 풀이
[Lord of SQL Injection] bugbear 13번 풀이
2021.10.17[ 문제 접근 ] 1. if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe"); 1번에서 substr, ascii, or, and ,like,= 문자열 그리고 공백을 모두 필터링하고 있다 2. 2. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) 쿼리질의 결과 admin의 pw와 사용자가 입력한 pw가 같을 경우 solve시켜줌, 이쯤이면 다들 blindsqlinjection인거 유추하실 수 있을꺼라고 생각합니다. =>방법 : 기존에 작성한 코드를 응용하고 기존에는 like를 사용했지만 like를 필터링 하고 있으므로 like를 대체할 또 다른 방법을 찾아서 적용하면 풀..
[Lord of SQL Injection] darkknight 12번 풀이
[Lord of SQL Injection] darkknight 12번 풀이
2021.10.17[ 문제 접근 ] 1. if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); , if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); 1번에 2구문을 통해서 싱글쿼터, substr,ascii, = 을 모두 필터링하고 있다 2. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) 쿼리질의 결과 admin의 pw와 사용자가 입력한 pw가 같을 경우 solve시켜줌, 즉 blind sqlinjection 사용을 유추 =>방법 : 단순하게 1번에서 필터링하는 모든 것을 우회해서 기존과 같이 blind sqlinjection을 하면 구할 수 있다! *힌트 : ord, like..
[Lord of SQL Injection] golem 11번 풀이
[Lord of SQL Injection] golem 11번 풀이
2021.10.17[ 문제 접근 ] 1. if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); : or,and,substr,= 문자열을 필터링함 2. if($result['id']) echo "Hello {$result[id]}"; : id가 존재하면 Hello를 띄워줌 3. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); : 질의결과의 pw가 우리가 입력한 pw와 같을 경우 solve 시켜줌 => blindsqlinjection 사용해야 함을 유추 가능 =>방법 : or, and를 우회, 기존에 substr대신에 한글자씩 비교할 수 있는 함수를 사용 => = 대신 다른 방식으로 비교하..
[Lord of SQL Injection] skeleton 10번 풀이
[Lord of SQL Injection] skeleton 10번 풀이
2021.10.17[ 문제 접근 ] 1. 이번 문제는 쿼터나 공백 그리고 특정 문자에 대한 필터링이 없다 2. 기존 문제와의 차이는 뒤에 and 1=0 이 붙어있다. 3. if($result['id'] == 'admin') solve("skeleton"); : 쿼리 질의 결과 id가 admin인 경우 solve 시켜준다. => 방법 : and 1=0 부분이 거슬리지만 이걸 무시하게 만드는 방법을 생각해본다. https://devdori.tistory.com/20 [Lord of SQL Injection] cobolt 2번 풀이 [ 문제접근 ] 1. 쿼리 : id와 pw파라미터가 존재하고 pw를 md5 암호화, 이를 통해 DB를 조회한다 2. $_GET[id], md5('{$_GET[pw]}') : GET방식을 통해서 id..
[Lord of SQL Injection] vampire 9번 풀이
[Lord of SQL Injection] vampire 9번 풀이
2021.10.17[ 문제 접근 ] 1. $_GET[id] = str_replace("admin","",$_GET[id]); : 우리가 입력한 id에 admin이라는 문자열을 지워버리고 있다. 2. if($result['id'] == 'admin') solve("vampire"); : 쿼리질의 결과 id가 admin인 경우 solve 시켜준다 => 방법 : admin이라는 문자열이 지워졌을 때 admin을 만드는 방법을 생각해본다. [ 문제풀이 ] 더보기 : ?id=adadminmin 정답과 같은 방식으로 적어주면 adadminmin 녹색 부분이 사라지게 된다. 따라서 admin이라는 문자열이 완성되게 된다. "VAMPIRE Clear!" 가 나타났다! 정답! 이제 다음 스테이지로 넘어가도록 하자
[Lord of SQL Injection] troll 8번 풀이
[Lord of SQL Injection] troll 8번 풀이
2021.10.13[ 문제접근 ] 1. if(preg_match("/admin/", $_GET[id])) exit("HeHe"); : 이 부분에서 admin을 필터링 하고 있다. 2. if($result['id'] == 'admin') : 쿼리질의 결과 id가 admin인 경우 solve시켜준다 =>방법 : preg_match에 대해서 잘 생각해본다! [ 문제풀이 ] 더보기 : ?id=ADMIN preg_match() 함수는 해당 문자열에서 전달받은 정규 표현식과 일치하는 패턴을 검색하는 역할을 한다. 정규 표현식 리터럴을 작성할 때 다음과 같은 플래그를 사용하여 기본 검색 설정을 변경할 수 있다. 다시 문제를 보면 preg_match(" /admin/i " ...)가 아닌 preg_match(" /admin/ " .....
[Lord of SQL Injection] orge 7번 풀이
[Lord of SQL Injection] orge 7번 풀이
2021.10.12[ 문제접근 ] if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 1. 이번에도 위의 조건을 통해 문자 and 또는 or라는 문자가 들어갔을때 필터링을 하고 HeHe를 출력 2. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) : 쿼리문 질의결과의 pw와 사용자가 입력한 pw가 같을때 solve 시켜줌, 즉 우리는 pw를 구해야한다 => 방법 : 4번(orc) 문제를 푸는 방식과 6번(darkelf)를 풀때 사용한 방식을 응용 4번 orc : https://devdori.tistory.com/22 [Lord of SQL Injection] orc 4번 풀이 [ 문제접근 ] 1. 쿼리 : id는 admin으로 고정..
[Lord of SQL Injection] darkelf 6번 풀이
[Lord of SQL Injection] darkelf 6번 풀이
2021.10.12[ 문제접근 ] if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 1. 이번 문제에서는 위의 조건을 통해 문자 and 또는 or라는 문자가 들어갔을때 필터링을 하고 HeHe를 출력 2. if($result['id'] == 'admin') solve("darkelf"); : 쿼리문 질의결과의 id가 admin일 경우 solve 시켜줌 => 방법 : and와 or를 대체할 다른 문자를 사용 [ 문제풀이 ] 더보기 : ?pw='||id='admin 이번 문제에서는 단순히 문자 and와 or을 의미하는 기호를 사용해서 우회할 수 있었다. 여기서는 or을 우회하기 위해 || 만 사용했지만, 만약 and를 사용하고 싶다면 아래와 같이 사용하면 된다. or 연산자 : ||..
[Lord of SQL Injection] wolfman 5번 풀이
[Lord of SQL Injection] wolfman 5번 풀이
2021.10.12[ 문제접근 ] if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 1. 위에 적혀있는 조건문을 분석해보면 whitespace가 입력되면 No whitespace를 띄움 > 화이트스페이스(whitespace)란? :: 공백형태로 된 문자형태(스페이스, 탭, 줄바꿈 등) 2. if($result['id'] == 'admin') : 이 조건문을 통해 쿼리문 질의결과의 id가 admin일 경우 solve("wolfman"); 시켜줌 => 방법 : whitespace를 우회하여 아이디를 admin으로 바꿔준다 [ 문제풀이 ] 더보기 : ?pw='or%0aid='admin 이번 문제에서는 공백을 필터링하고 있기 때문에, 우리는 공백을 대신하여 사용할 수 있..
[Lord of SQL Injection] orc 4번 풀이
[Lord of SQL Injection] orc 4번 풀이
2021.10.10[ 문제접근 ] 1. 쿼리 : id는 admin으로 고정되어 있고 pw가 존재, 이를 통해 DB를 조회한다 2. $_GET[pw] : GET방식을 통해서 pw를 입력을 받는다 3. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) : DB 조회결과의 pw와 우리가 입력한 pw가 같아야 solve("orc"); 시켜줌 => 이 문제에서 우리는 admin의 pw를 알아내야함4. 로그인에 성공시 Hello admin을 출력시켜줌 =>방법 : BlindSqlinjection을 통해 pw를 알아내야함 > pw를 한글자씩 비교하고 Hello admin 출력으로 참,거짓을 판별* 힌트 : length(문자열), substr(문자열, 시작할 지점, 자를 개수), ASCII..