본문 바로가기

SQL Injection39

lord of sql injection 28번 - frankenstein 이번 문제도 난이도가 상당하다. 어려워서 정보를 참고했다. 우선 id가 admin인 곳의 pw를 알아내면 되는데 필터링으로 인해 오류가 나서 아무래도 error based SQLI를 써야하는것 같다. if문을 쓸수 없어서 case 문을 사용하고 오류를 발생시키기 위한 값인 9e307*2 를 넣어주어 오류를 유발하였다. 9e307*2 값은 큰 숫자값이 들어가서 오류를 일으키는 형태이다. 다른 숫자도 넣어보았는데 이 숫자만 제대로 되는것 같다. pw의 값을 검증하고 참이면 오류를 발생, 그게 아니면 0을 반환한다. 이것을 코드에 활용해서 패스워드를 알아낼 수 있다. frankenstein.py import urllib.request import requests url="https://los.rubiya.kr.. 2023. 12. 22.
lord of sql injection 27번 - blue_dragon 이번 문제는 '와 \가 필터링 되는 문제여서 우회하기가 어렵다. 대신 sleep 함수를 막지 않는것으로 보아 time based SQLI를 사용하면 될것같다. 쿼리를 사용했을때 메시지가 뜨지 않아도 sleep() 을 장시간으로 해서 주면 메시지가 뜰때 메시지대신 페이지 로딩 시간이 길어질 것이다. if문으로 length를 검증하고 sleep(3) 을 주어 참이면 3초간 sleep 후 페이지를 로딩하게 했다. length 비교값에 8을 주니 갑자기 페이지가 3초동안 로딩되었다가 불려졌다. 이를 보고 pw 길이가 8자리라는 것을 알아내었다. 이제 이를 이용해서 pw 값을 알아내면 된다. ord와 substr 함수를 이용해 알아보았다. blue-dragon.py import urllib.request impo.. 2023. 12. 22.
lord of sql injection 26번 - red_dragon 이번문제는 조금 어려웠다. id는 값을 받는데 7자를 넘으면 안되고 no는 숫자외의 값이 들어가면 다 1로 리턴시킨다. 고민해본 결과 id에 쿼리를 넣고 no에 비교할 숫자를 넣어야 하는 문제이다. 우선 id 값에 admin%23 을 넣어주면 뒤의 구문이 주석화 되어 hello admin이 뜬다. 이를 이용하면 될것 같다. 우리가 찾아야하는건 admin의 no 값이다. 그러니 id값은 ''로 막아버린뒤 바로 or (||) 구문을 이용해서 no의 비교를 수행한다. 뒤의 and no=를 주석처리 한 뒤 줄바꿈하여 no에 숫자값을 넣어준다면 정상적으로 쿼리가 들어갈것이다. id='||no>%23&no=%0a10000 이라고 넣어주었다. id 값은 다행히 7자를 안넘어 들어가고 no도 줄바꿈하여 숫자를 넣어주었.. 2023. 12. 22.
lord of sql injection 25번 - green_dragon 이번에는 쿼리가 두개가 들어가있는 문제이다. 우선 \를 활용해 뒤에 구문을 넣어보았다. 이런 방식으로 넣어주면 되는데 우선 id='admin'을 호출해야하는데 ' 와 "가 필터링 되어있어 hex값으로 호출해보자. 그런데 해결되지 않았다. 아무래도 첫번째 쿼리에있는 테이블에 admin 자체가 없는듯 하다. 그러면 두번째 쿼리에 있는 곳에서 찾아야할듯 싶다. 두번째를 호출하기 위해 union select를 사용해보았다. union select 1,2 로 불러오니 두번째 쿼리가 불러와졌다. 여기서 두번째 쿼리에 아까 첫번째에서 했던것처럼 id에 \를 넣어주고 pw에 union select 0x61646d696e--+- 을 넣어주면 될것같다. https://www.branah.com/ascii-converter.. 2023. 12. 22.