본문 바로가기

SQL Injection39

lord of sql injection 32번 - alien 이번에도 문제가 특이하고 어렵다.. 몇몇 필터링은 우회한다 쳐도 밑에 4개 구문이 이상하다. 첫번째 조건은 id가 admin이 아니면 exit되기에 admin이어야 하는 것이고 두번째는 id가 admin이면 안되고 세번째는 query2 구문에서 admin이면 안되고 네변째는 query2 구문에서 admin이어야 한다. 우선 no에 1값을 넣어보았다. 그대로 sandbox1로 넘어가는 것을 볼 수 있다. 단순하게 admin을 찾는 구문을 넣어보아도 이상한 조건들때문에 넘어가지지 않는다. 그냥 구문만 넣었을때 이 조건을 만족하는건 불가능하다. 그래서 구글링으로 찾아보았는데 now()와 sleep()을 이용해서 시간에 따른 쿼리를 조정한다면 가능해진다. 우선 union select를 이용해 두개의 쿼리를 이용.. 2023. 12. 22.
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.