[+] Security [+]/Lord of SQLInjection
-
[Lord of SQLInjection] #20 dragon[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 06:34
야~ 이제 20번째 문제 드래곤! 뭔가 이제 엄청난 몬스터가 나온듯 하다. 좋아! 살펴보자! 신박하게도 쿼리 자체에 주석이 삽입되어있어 우리는 저걸 피해야한다. 줄바꿈(\n %0a)로 피할 수 있다! 필자는 ?pw=%0aand pw='123' or id='admin 을 넣어서 해결했다. 이경우 ?pw=%0a or id='admin 만 넣으면 id = guest 와 id = admin 둘다 만족하게 된다. 따라서 id = guest를 False 시키기위해 의미없는 pw =123 을 추가로 집어넣어 쿼리를 만들어 줘야한다. 여튼!
-
[Lord of SQLInjection] #19 xavis[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 06:25
19번째 문제 자비스! 자비스? 아이언맨? 악당이 맞나 싶지만. 우리 앞은 가로막는건 뭐든 밟고 지나간다! 좋아! 문제를 살펴보자! 보니 특별한걸 찾지 못하겠다. 어째서 이런 문제가 19번째 문제인 것인가? like 와 reget가 필터링 되어있고, 쿼리는 두번 실행되는데 두번째에는 addslashes와 select pw 를 한다는 점? 그것말고 특별한게 보이지 않는다. 첫번째에서 Blind SQL Injection으로 pw 값을 정확히 찾아내면 그만 아닌가? 흐음... 아몰랑 일단 파이썬 코드를 작성한다. 좋아 비밀번호의 길이는 12! 음? 역시 잘 되지 않는다. 어디서부터가 문제인 걸까 영 풀리지 않아서 구글링을 하며 찾아보았더니 이런 맙소사 비밀번호가 애초에 영어가 아니었다. 그러니 인식하지 못한 ..
-
[Lord of SQLInjection] #18 nightmare[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 05:11
18번째 문제 악몽! 코드를 살펴보자면 비밀번호를 입력해서 레코드를 조회해야하는데 id != 'admin'이라고 admin으로 조회하는 걸 막아놨다. 여느때와 같이 prob과 _ . ( ) 는 필터링 되어있고 # 과 - 도 막혀있어서 id!='admin' 부분을 날려버릴수도 없고? 뭔가 한가지 빠져있는거같은데? ; + (null)로 쿼리를 끊어 버릴 수 있지 않은가? 이번엔 쿼리가 pw가 id보다 앞서 있는 형태다. 쿼리를 끊어버리세요~ 가 출제자의 의도인 듯 하다. 좋아! 쿼리를 끊어버리는 것까지는 알겠으나 if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 에서 글자수를 6글자까지로 제한을 걸어 놨다. 쿼리를 ')하고 닫고 ;%00 까지 만 4글자를 쓰는데 어떻게 하란 말..
-
[Lord of SQLInjection] #17 zombie_assassin[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 04:49
17번째 괴물 좀비어쌔신? 좀비어쌔신이라니? 세상에 이런 몬스터도 있나..? 음...? 여튼! 코드를 살펴보자 이번엔 파라미터로 입력받은 값에 역슬래쉬를 추가하고 문자열을 뒤집는다. 이런 이유에서 역슬래쉬 또한 뒤에 역슬래쉬가 붙어서 이스케이프 처리된다. 으으... 세상에나... 그럼 어떻게 풀어야하는가? 우리는 따옴표 앞에 역슬래쉬가 붙기를 원한다. 그렇다면 addslash코드를 역이용 하면 되지 않나?? 역슬래쉬를 붙인후 문자열을 뒤집어서 준다. 그렇다면? ?id="&pw=%231%20ro 를 쿼리로 삽입하여 풀 수 있다. 좀비어쌔신 컷!
-
[Lord of SQLInjection] #16 succubus[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 04:18
16번째 서큐버스! 코드를 살펴보자! 흐음. 이번 문제는 특별히 id값을 입력해야한다. 이유가 있지 않을까?? 물론! 이 문제를 풀려면 알아야하는 개념이 있다. 이스케이프 문자! 대부분은 문자열을 타이핑하려고 할때 따옴표를 사용해야함을 알고있지않은가? 하지만 문자열 안에 따옴표를 넣고싶다면? 'i'm good!' 이런식이라면 문자열이 끊어지게 된다. 그래서 'i\'m good' 이렇게 역슬래쉬를 앞에 붙여서 따옴표를 문자열 안에 포함시킬 수 있다. 위의 문제도 마찬가지다! id='' and pw='' 여기 id값에 역슬래쉬를 입력하게 되면 id='\' and pw='' 즉 id = '\'and pw='' id 값으로 'and pw= 를 입력한 셈이 된다! 그럼 pw 값에 쿼리를 마음껏 생성해서 %23으로..
-
[Lord of SQLInjection] #15 assassin[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 03:54
15번째 몬스터 어쌔신! pw는 '가 필터링 되어있어 추가적으로 쿼리를 끊거나 생성하는 것이 안되고, like연산자를 이용해 레코드를 조회하고 조회된 레코드의 id값을 출력 받아서 해당 레코드가 admin인지 아닌지 알 수 있다. 간단한 부르트포싱 문제다! (브루트 포싱: 무차별 대입 공격) 여기서 like 연산자를 잠깐 살펴보고 가자. like 는 기본적으로 = 과 똑같이 동작한다. 하지만! like 연산자는 특별히 % 나 _ 같은 기호를 사용할 수 있다. %: 0개 이상의 모든 글자를 대체 가능 _: 1개의 모든 글자를 대체 가능 예를 들어 보자 'admin' like '%' => True 'admin' like 'admi%' => True 'admin' like 'a%n' => True 'admin..
-
[Lord of SQLInjection] #14 giant[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 03:22
14번째 문제! fromprob_giant 라고 띄어쓰기 없이 붙어 있어서 sql문이 제대로 동작하지 않는다. 그저 띄어쓰기를 넣으면 되는데 공백을 필터링 해놓아 막아놨다. 그렇다면 이 는 5번째 울프맨 문자와 똑같다. 공백우회 문제! %0a : Line Feed (\n) %0b, %0c : nonprintablenon printable characters %0d : carracarriage return (\r) %09 : Tap \n \r \t은 막혀있으니 %0b, %0c로 쉽게 해결할 수 있다. 🔪🔪자이언트 컷!🔪🔪
-
[Lord of SQLInjection] #13 bugbear[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 02:45
13번째 몬스터 버그베어! 코드를 살펴보니 substr ascii = or and 공백 0x 아주 이전까지 쓰였던 모든 함수들을 필터링해 막아 놓았다. 하지만 substr => mid 로 대체 or => || and => && 공백 => %0a like => in ' => " 다 빠져나갈 구멍이 있다! 구글링해서 우회기법들을 조금만 찾아봐도 어렵지 않게 풀 수 있을 것 같다! 좋아 이제 코드를 작성해보자. ?no=1%0a||%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)>{} 이 쿼리를 사용하여 비밀번호를 알아내고 ?no=1||id%0ain%0a("admin")%26%26mid(pw,{},1)%0ain%0a("'.format(j)+arr[i]+'")') 위와 같이 쿼리를 ..