본문 바로가기

분류 전체보기257

lord of sql injection 31번 - Zombie 이번에도 전문제와 상당히 비슷해보이는 문제인데 필터링이 추가되었다. 우선 union select를 넣었더니 잘 되었다. 그래서 전문제에서 사용했던 Quine 구문을 다시 넣어보았는데 역시 필터링에 걸렸다. 아무래도 ace가 필터링되어 막아진듯 하다. 그렇다면 다른 방법으로 pw에 자신이 입력한 쿼리값이 들어가야하는데 역시나 막막해서 구글링을 해보았더니 info from information_schema.processlist 라는 값을 select 함으로써 자신의 코드를 얻어낼 수 있다고 한다. 그렇게 입력해보았더니 처음부터 끝까지의 전체 쿼리문이 pw값으로 들어가게 되었다. 그렇다면 substr 함수를 이용해 앞 쿼리만 끊어줄수 있지 않을까 생각했다. info를 substr 해준 결과 역시 쿼리가 잘 끊.. 2023. 12. 22.
lord of sql injection 30번 - ouroboros 이번 문제는 소스코드가 짧다. 바로 pw 관련 구문을 넣어보았지만 아무것도 뜨지 않는다. 아무래도 데이터베이스가 비어있어서 그런것 같다. 그래서 union select를 사용해보았다. union select를 사용하니 pw에 대한 값이 나왔는데 클리어를 하는 조건은 result pw와 get pw.. 즉, 자신이 쿼리에 작성한 입력값과 결과 값이 동일해야 한다는 뜻이다. 이걸 어떻게 해야하나 생각하다가 구글링을 해보니 SQL에 Quine 이라는 자신이 작성한 소스코드를 그대로 출력할수 있는 메타프로그램을 찾았다. 이 문제는 Quine을 이용해서 풀어야 할것 같다. https://en.wikipedia.org/wiki/Quine_(computing) Quine (computing) - Wikipedia F.. 2023. 12. 22.
lord of sql injection 29번 - phantom 이번 문제는 joinmail 값을 입력받아서 insert 구문을 수행하는 것을 이용해 취약점을 찾아 해킹해야한다. insert 구문의 취약점중 하나는 값을 검증하지 않으면 여러개의 열에 해당하는 값을 인젝션하여 악성 sql 구문을 넣을 수 있다는 것이다. 우선 joinmail과 email을 get 하길래 둘다 값을 넣어보았다. email은 의미없고 joinmail에 1을 넣으니 쿼리가 나왔다. value 0 값과 서버 remote address 값과 joinmail 값을 받아 테이블로 표시해 주는것 같다. 여기서 joinmail의 쿼리 뒤에 새로운 삽입문을 추가하여 no=1인 해답 이메일을 불러와보자. ?joinmail=2'), (1, '172.22.208.12', select email from pro.. 2023. 12. 22.
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.