728x90 sqli11 OWASP Juice Shop - Database Schema Exfiltrate the entire DB schema definition via SQL Injection. 직역하면 SQL Injection을 통하여 DB 스키마의 정의어를 가져오라는 의미이다. SQLi를 시도해 볼 수 있는 공격 벡터는 크게 로그인과 상품 검색 두 가지 었지만 로그인 부분은 일단 SQLi를 통해 원하는 결과를 가져오지 못하므로 일단 패스하였다. (그리고 이런 문제 유형의 공격 벡터는 주로 검색 페이지인 경우가 많았었다.) 주제와는 상관 없지만 계정 페이지에는 ERROR BASED를 이용하는 블라인드 SQLi 가능성은 있었다. jim@juice-sh.op' AND CASE WHEN (select 1 from Users where email='jim@juice-sh.op') THEN 1.. 2023. 9. 29. DreamHack - error based sql injection 풀이 TMI) extractvalue 함수 extractvalue(XML 데이터, XPath 표현식)을 인자로 받습니다. XML 데이터는 '드림핵 이야기' 같은 데이터가 올 수 있으며 XPath 표현식에는 '/STORE/BOOK/TITLE' 같은 값이 올 수 있습니다. 만약 SELECT extractvalue('드림핵 이야기', '/STORE/BOOK/TITLE')를 실행하면 드림핵 이야기가 출력이 됩니다. extractvalue 함수를 이용한 error based sql injection 특이하게도 MySQL에는 XPATH syntax 오류가 생기면 그 오류의 원인이 되는 XPath 표현식을 그대로 보여줍니다. 예시: (1105, "XPATH syntax error: '에러의 원인'") 이점을 이용하면 er.. 2023. 9. 10. Lord of SQLinjection - succubus https://los.rubiya.kr/chall/succubus_37568a99f12e6bd2f097e8038f74d768.php https://los.rubiya.kr/chall/succubus_37568a99f12e6bd2f097e8038f74d768.php los.rubiya.kr 아이디와 패스워드를 입력을 받고 있으며, (')를 사용하면 안 된다. 정답) ?id=\&pw=OR 1=1;%00 id에 주석처리를 해서 pw의 첫번째 ' 까지 문자열 형태로 만든다. id='\' and pw='OR 1=1;%00 그리고 참이 되는 조건과 뒤의 '를 무시하기 위해 주석처리를 해주면 해결 2021. 12. 8. Lord of SQLinjection - assassin https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php los.rubiya.kr 패스워드를 입력을 받는데 '를 금지하고 있어서 다른 쿼리문을 넣는 게 힘들다. 문제에서 실행되는 쿼리문을 잘 살펴보면 pw가 =가 아닌 like로 일치하는 조건을 구하고 있다. LIKE는 =와 다르게 특정 문자가 포함이 되어있어도 조건을 참으로 만들 수가 있다. 예를 들어 A로 시작하는 문자를 찾고 싶다면 A% A로 끝나는 문자를 찾고 싶다면 %A A가 포함하는 문자를 찾고 싶다면 %A% 이런 식으로 말이다. 또한 _를.. 2021. 12. 8. Lord of SQLinjection - giant https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php los.rubiya.kr shit이라는 인자를 입력받아서 쿼리문을 실행시키는 것이 목적 쿼리문은 select 1234 from{$_GET[shit]}prob_giant where 1 이렇게 구성되어있으며, 쿼리를 정상 동작을 시키기 위해서는 from 뒤에 공백을 넣어야 한다. 공백을 넘겨주는게 쉽지만은 않다. URL 주소에 스페이스를 넣어도 전달이 되지 않는다. 그래서 공백을 대신할 다른 것을 넣어줬다. 바로 "%0b" 요것을 참고: https://jan.. 2021. 12. 8. Lord of SQLinjection - bugbear 이번에는 무려 공백과 OR AND를 제외하고, LIKE도 필터링이 된다. 공백은 %0a로 치환하고, LIKE는 IN으로 대체하면 된다. 그리고 인젝션을 하던 중 ORD 함수를 사용하려고 하자 OR 키워드가 포함이 되어있어서 사용이 불가능했다. 그래서 하는 수 없이 ORD를 HEX로 대신 사용하고 여기에 CONV 함수를 더해서 16진수를 10진수로 변경해 주었다. 그것만 수정하면 이전의 자동화 소스랑 비슷하다. import requests parameter = None cookie = {'PHPSESSID':'자신의 쿠키 값을 입력'} result = None solve = "" for i in range(1, 8+1): for ascii in range(48, 112+1): print(ascii) par.. 2021. 12. 7. Lord of SQLinjection - darkknight 이전까지는 문자열 형태의 id 혹은 pw를 값을 넘겨주었다면, 이번에는 숫자 형태의 no를 넘겨주어야 한다. 즉 no은 '로 둘러싸여서 쿼리를 실행하는 것이 아니기 때문에 굳이 '를 사용해 우회를 할 필요가 없다. 수고를 좀 더 덜어준 셈이다. 마침 필터링을 하는 부분도 '를 금지하고 있다. 그렇기 때문에 문자를 이용해 Blind 인젝션을 시도하는 것은 불가능하다. (문자를 주기 위해서는 '를 포함을 해야 하기 때문에) 그리고 또 제외를 하는 함수들도 있는데 각각 substr과 ascii가 있다. 이는 다 다른 함수로 대체가 가능함. substr -> mid ascii -> ord =도 LIKE로 치환하면 된다. 아래는 파이썬 자동화 도구이다. import requests parameter = None .. 2021. 12. 7. Lord of SQLinjection - skeleton 이번에는 뭐든 입력해도(심지어 일치하는 패스워드를 넣어도) 쿼리문 맨 뒤에 and 1=0 때문에 무조건 실패가 뜨게 된다. 이런 의미 없는 쿼리문을 보고 딱 봐도 주석을 이용한 문제라는 것이 떠올랐다. (뒤에 있는 and 1=0을 무력화 시켜주기 위해서) 정말 주석 #를 넣어서 문제를 통과하는 것도 가능했다. 하지만 ;%00라는 방법도 존재 했다. 얘는 세미콜론(;)과 NULL(%00)을 이용한 주석처리이다. 2021. 12. 7. Lord of SQLinjection - vampire 이번에는 troll 문제와 다르게 모든 대문자를 소문자로 변경을 시키며, str_replace함수를 이용해 admin 키워드를 공백으로 변경시키고 있다. admin 키워드를 공백으로 변경시키고 있다. admin을 ""으로 바꾼다. 그러면 adadminmin을 넣으면 어떻게 될까? adadminmin 중간에 admin 지워지고, admin이 남게 되어 쿼리를 잘 실행할 수 있게 된다. 문자열 변경 함수의 취약점은 이미 꽤 유명하기 때문에 저 함수 보자마자 바로 떠올랐다. 2021. 12. 7. Lord of SQLinjection - troll 이문제에서 admin을 필터링하는 저 부분 "/admin/", id로 admin을 넘겨주면 HeHe가 뜨게 됨 하지만 admin이 아니라 Admin을 보내주면? 클리어가 됨 어째서 admin은 안되고 Admin은 가능한 걸까 우선 "/admin/" 필터링을 우회할 수 있었던 이유는 바로 소문자가 아닌 대문자로 입력을 했기 때문에 가볍게 패스가 가능한 것이며, 만약 대소문자를 무시하고 싶다면 뒤에 i를 붙이면 된다. '/admin/i' 2021. 12. 7. Lord of SQLinjection - orge 파이썬3 자동화 도구 https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php los.rubiya.kr import requests parameter = None cookie = {'PHPSESSID':'여기다 자신의 쿠키 값을 넣음'} result = None solve = "" for i in range(1, 8+1): for ascii in range(48, 112+1): print(ascii) parameter = "?pw='|| id='admin'%26%26 ascii(substr(pw,{},1))={}%23".format(i.. 2021. 12. 7. 이전 1 다음 728x90