[Lord of SQLInjection] Ouroboros Write UP
2021. 8. 27. 12:02
워게임/Lord of SQLInjection
공격 백터 Get 메소드 : pw 입력 값에 대한 검증 pw : prob, _, ., rollup, join, @ 필터링 코드 설명 if(preg_match('/prob|_|\.|rollup|join|@/i', $_GET['pw'])) exit("No Hack ~_~"); 위에 언급하였던 prob, _, ., rollup, join, @ 필터링이다. pw에 필터링 목록이 있다면 No Hack ~_~을 출력하고 종료한다. $query = "select pw from prob_ouroboros where pw='{$_GET[pw]}'"; echo "query : {$query} "; 필터링에 걸리지 않았다면 select pw from prob_ouroboros where pw='{$_GET[pw]}'에 삽입..
[Lord of SQLInjection] Phantom Write UP
2021. 8. 26. 12:55
워게임/Lord of SQLInjection
공격 백터 Get 메소드 : joinmail, email 입력 값에 대한 검증 joinmail : duplicate 필터링 email : htmlentities 함수, addslashes 함수 코드 설명 if($_GET['joinmail']){ if(preg_match('/duplicate/i', $_GET['joinmail'])) exit("nice try"); $query = "insert into prob_phantom values(0,'{$_SERVER[REMOTE_ADDR]}','{$_GET[joinmail]}')"; mysqli_query($db,$query); echo "query : {$query}"; } joinmail의 입력이 있을 경우 내 아이피 주소와 입력한 joinmail이 ins..
[Lord of SQLInjection] Frankenstein Write UP
2021. 8. 25. 12:55
워게임/Lord of SQLInjection
공격 백터 : pw 입력 값에 대한 검증 pw : prob, _, ., (, ), addslashes 함수 if(preg_match('/prob|_|\.|\(|\)|union/i', $_GET[pw])) exit("No Hack ~_~"); $_GET[pw] = addslashes($_GET[pw]); $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_frankenstein where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw']))..
[Lord of SQLInjection] Blue Dragon Write UP
2021. 8. 19. 11:48
워게임/Lord of SQLInjection
공격 백터 : id, pw 입력 값에 대한 검증 id : prob, _, . 필터링, ', \ 필터링 if(preg_match('/prob|_|\./i', $_GET[id])) exit("No Hack ~_~"); if(preg_match('/\'|\\\/i', $_GET[id])) exit("No Hack ~_~"); pw : prob, _, . 필터링, ', \ 필터링, addslashes() if(preg_match('/prob|_|\./i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/\'|\\\/i', $_GET[pw])) exit("No Hack ~_~"); $_GET[pw] = addslashes($_GET[pw]); $_GET[pw] = adds..
[Lord of SQLInjection] Red Dragon Write UP
2021. 8. 18. 00:39
워게임/Lord of SQLInjection
공격 백터 : id, no 입력 값에 대한 검증 id : prob, _, . 필터링, 7 이하 길이 제한 if(preg_match('/prob|_|\./i', $_GET['id'])) exit("No Hack ~_~"); if(strlen($_GET['id']) > 7) exit("too long string"); no : 숫자가 아닌 경우 1로 설정 $no = is_numeric($_GET['no']) ? $_GET['no'] : 1; $query = "select no from prob_red_dragon where id='admin'"; // if you think challenge got wrong, look column name again. $result = @mysqli_fetch_array(..
[Lord of SQLInjection] Green Dragon Write UP
2021. 8. 14. 13:16
워게임/Lord of SQLInjection
공격 백터는 id와 pw가 있으며, select id,pw from prob_green_dragon where id='{$_GET[id]}' and pw='{$_GET[pw]}'에 사용이 된다. 똑같은 쿼리문이 2개가 작동하는데 첫번째 쿼리문의 id 결과 값이 있어야만 두번째 쿼리문이 작동되는 시스템이다. id와 pw에 대한 검증은 prob, _, ., ', "이 필터링 되는 거 빼곤 없다. 그래서 일단 문자형 데이터를 삽입할 땐 hex값으로 넣어야 할 것으로 판단된다. 나는 id를 admin으로 만들어주기 위해 /**/를 사용하여 id=‘/*’ and pw=‘*/admin’이라는 쿼리문을 생각했지만, /**/은 ’, “ 안에서 사용 시 문자열로 인식되어 주석처리가 되지 않는다. 다른 방법으로 \를 사용..
[Lord of SQLInjection] Evil Wizard Write UP
2021. 8. 10. 18:42
워게임/Lord of SQLInjection
전 문제인 Hell Fire 문제의 코드와 별다른 차이점이 없는 것 같다. 다만 차이점이라면 첫번째 쿼리문 옆에 주석으로 ‘same with hell_fire? really?’라는 문구가 있었다. 정말 Hell Fire와 같을 것 같냐는 문구를 보니, 뭔가 DBMS에서 설정을 한 것으로 보인다. 일단 Hell Fire에서 시도하였던 것들과 비교하여 차이점을 찾아보겠다. 다른 방법들도 비교를 해봤지만 별차이가 없는 것 같았다. import requests, string url = 'https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php' headers = {'Cookie': 'PHPSESSID=6pcue41grdd15c632..
[Lord of SQLInjection] Hell Fire Write UP
2021. 8. 8. 21:53
워게임/Lord of SQLInjection
새로운 문제 유형이 나왔다. 공격 백터는 order, email 입력 값에 대한 검증은 밑과 같다. order 필터링 : prob, _, ., proc, union email addslashes() : ', ", \, null 바이트 -> \', \", \\, \null 바이트 문제를 클리어하기 위해선 admin의 email 값을 알아내야한다. 첫번째 쿼리문은 select id,email,score from prob_hell_fire where 1 order by {$_GET[order]}로 order by를 이용하여 정렬을 시켜서 반환 값을 표로 출력한다. Order by 절의 기본 구조 SELECT * FROM table_name ORDER BY column_name (ASC, DESC) 데이터를 지..
[Lord of SQLInjection] Dark Eyes Write UP
2021. 8. 7. 20:59
워게임/Lord of SQLInjection
공격 백터는 pw 파라미터 하나다. pw 파라미터의 검증은 prob, _, ., (), col, if, case, when, sleep, benchmark를 필터링하고 있으며, 두번째 쿼리에는 addslashes 함수를 사용하여 쿼리문에 넣어지고 있다. 필터링 목록에 있는 함수들은 정리하였다. col 이것은 함수가 아니고, column이라는 단어을 막기 위해 목록에 넣는 것으로 판단이 된다. if IF(requested, A, B)으로 사용 가능하며 requested가 True일 때 A가 반환되며, False일 때 B을 반환하다. case, when CASE WHEN 조건1 THEN A WHEN 조건2 THEN B ELSE C END 으로 사용 가능하며 조건1일 때 A를 반환, 조건2일 때 B를 반환, ..