본문 바로가기
3. 웹 애플리케이션 취약점 진단/Lord of Sql Injection

lord of sql injection 11번 - golem

by Robert8478 2023. 12. 21.

이번 문제도 블라인드 sql인젝션 문제네요.
or과 and뿐만 아니라 =과 substr 까지 필터링을 합니다.
or과 and는 || 와 %26%26을 통해 우회하고 =는 like로, substr은 mid 함수나 substring 으로 우회할수 있습니다.
필터링을 철저하게 해야 이런 세세한 부분들을 막을수 있는 것이겠죠

우선 쿼리를 넣어봅니다.
or 1=1 대신 || 1 like 1로 필터링을 우회하여 넣었더니 guest가 뜨네요.
이제 패스워드 길이를 알아봅시다.

length 함수를 사용해 length(pw) like 8을 넣어주었더니 admin이 나왔네요.
admin이 떴다는건 admin의 pw의 길이를 알려주는 것이겠죠.
하지만 확실하게 하려면 id='admin' and length(pw) like 8 과 같은 구문으로 admin을 확실하게 지정해주는것이 좋습니다.

이제 블라인드 sql 인젝션을 해야겠죠
이처럼 id='admin' 지정을 안해주니 블라인드 sql 인젝션을 하는데 guest가 나오네요
이는 guest의 pw를 의미하므로 id='admin' 구문을 넣어서 admin의 pw로 찾아야합니다.

위와 같은 구문으로 하나하나 노가다로 찾아주면 됩니다.
위 방법 말고도 다른 방법이 있는데

pw like '7%' 이런식으로 지정해주면 7으로 시작된다는 뜻을 의미하며 %앞의 문자나 숫자를 변경해가며 확인할 수 있습니다. '7%'로 헀더니 hello admin이 떴다는건 pw의 첫 자리가 7이라는 뜻이겠죠

두번째 자리도 '77%'와 같은 방법으로 한자리씩 늘려가며 찾아가면 됩니다.
패스워드를 다 찾은 결과 패스워드는 77d6290b

패스워드를 넣어주면 클리어