티스토리 뷰
https://los.rubiya.kr/chall/zombie_78238dee92f8ed0f508b0e9e00fc0e49.php

GET 파라미터로 pw를 받는다.
쿼리문에서 반환되는 값이 있으면 <h2></h2>태그로 pw를 출력해준다.
' union select 'asdf'--
위와 같이 쿼리를 작성해주면

일단 값이 나오긴 한다.
근데 solve를 부르기 위해서는 내가 입력한 값과 실제로 반환되는 값이 같아야 한다.
이전 문제와 같은 Quine Query문제이다.
Quine Query에 대한 설명 : https://aidencom.tistory.com/325
[ SQL Injection Tech ] Quine Query(Quine SQL Injection)
Lord Of SQL Injection Ouroboros 문제의 주제인 Quine Query 에 대해서 알아보도록 하자. 먼저 Quine Query 를 알아보기 전 전산학에서의 Quine(콰인)에 대한 정의를 보면 다음과 같다. Quine Quine(콰인)은 입력 없이
41d3n.xyz
결국 내가 입력한 값에 의해 그 입력과 동일한 출력이 나와야 한다.
내가 입력한 값을 가지고 있는 버퍼? 같은게 있을까 싶었는데 비슷한게 있었다.
DB의 메타 정보와 관련한 데이터를 가지고 있는 information_schema가 이번에도 도움이 되었다.
processlist 테이블을 불러오면 실행중인 쿼리를 가져와준다.

혹시나 저렇게 여러줄이 나오면 안되니까 LIMIT을 걸고, INFO 컬럼에 있는걸 참조하면 되겠다.
아까 쿼리를 조금 수정해서
' union select info from information_schema.processlist LIMIT 1--
이렇게 걸어주면

쿼리가 똑같이 나온다!
근데 아직 해결이 안된것은, pw에 넣은 것 외에 앞의 select pw ~ pw='이 같이 들어갔기 때문이다.
right 함수로 오른쪽부터 잘라주면 될 것 같다.
' union select right(info, n) from information_schema.processlist LIMIT 1--
n에 저 코드 자체의 길이를 넣어주면 된다. 즉
' union select right(info, 78) from information_schema.processlist LIMIT 1--
이렇게 된다. 문자열 길이가 77인데 78인 이유는 -- 뒤에 띄어쓰기 있어야 작동해서...ㅎ # 써도 되긴 한데 URL 인코딩 귀찮다.
페이로드를 삽입하면

뭐지?
개꿀잼 몰카인가?
싶었는데 알고보니까 저 오른쪽에 '가 내가 넣은게 아니었다;;; 이거 떄문에 30분은 날린듯
left로 오른쪽 것까지 날려주면

흐히히 재밌당