(Lord of SQLInjection) orc 문제입니다.
일단 문제에 접속해보면

이전 문제와는 다르게 코드가 2개로 보입니다.
윗줄 코드와 아랫줄 코드로 나눌 수 있는데
짧게 해석하자면 id가 admin으로 쿼리가 True값이 되면 Hello admin이 출력되지만
아래 코드에서 우리가 입력한 pw의 값이 db에 있는 admin의 pw값과 같을 경우에면
solve("orc")가 출력되면서 문제가 해결된다고 합니다.
즉 이전처럼 주석처리라던가 우회하는 방식으로는 해결이 불가능한
블라인드 SQL문제라고 이해할 수 있습니다.
또한 이경우에는 정확한 pw값을 전부 찾아서 입력해야만 하는 문제입니다.
작성자는 드림핵에서 이러한 문제를 학습한적이 있는데
이진탐색과 비트연산등 여러가지 방식으로 해결이 가능하다고 배웠습니다.
아래 사진은 드림핵 무료강의중 익스플로잇코드의 일부로
패스워드의 길이가 몇인지를 찾는 코드입니다.

query를 보면 admin and length(pw)= 길이 형태입니다.
이를 참고하여 문제사이트에 삽입해보면

네 길이가 1일리는 없으니까 당연히 실패합니다.
(뒤의 #이 있어야만 드림핵의 참고 코드의 - 역할이 가능합니다)
그래도 10번까지는 노가다할만하니 시도를 해봤습니다.

오 10번까지도 안가고 8번만에 성공했습니다.
이제 pw의 길이가 8글자라는 사실을 확인했습니다.
이다음에는 드림핵의 코드를 참고해
비트연산으로 해결하려 했으나
작성자의 개인사정으로 손에 깁스를 하고 있어서
부득이하게 버프스위트를 이용했습니다.
(아래 드림핵 익스플로잇코드는 참고로 올려둡니다.)

버프스위트로 넘어가기전에 위의 코드같은 비트연산말고
이진탐색을 아스키코드를 활용한 내용도 있어서
그부분을 활용한 코드로 삽입해봤습니다.

작성한 코드 부분만 따로 빼서 보자면
아래코드인데
pw=%20%27%20or%20ascii(substr(pw,§1§,1))=§33§%23
URL 인코딩이 되어있어 보기 힘드니 디코딩해서 정리하면
pw=' or ascii(substr(pw,1,1))=33#
위와 같이 정리가 됩니다.
해석하면 pw의 입력은 공백으로 False가 나오고 or 로 연결시켜
pw의 8개중 첫번째의 값이 아스키코드값으로 33인가 를 확인하는 코드가 됩니다.
아스키코드표를 한번 집고 넘어가자면

10진수 16진수를 문자로 변환하는 표 입니다.
즉 문자에 대한 필터링이 걸려있거나
지금과 같은 반복을 이용해 값을 찾는 경우에 유용한 변환방법입니다.
즉 우리는 특수문자 33번부터 알파벳이후 문자 126번까지 아스키코드로 반복해
pw의 값을 찾는 것입니다.
해서 위의 코드에서 33부터 입력해본것입니다.
그리고 버프스위트 사진을 보면 보라색으로 줄이 그어져 있는 부분이
우리가 반복할 타겟부분을 명시하는 것입니다.
즉 1~8자리 까지 33~126까지 반복하는 것이죠
버프스위트로 반복을 돌려 확인해보면

5414로 일반적인 결과와 다른 문자갯수가 나옵니다.
이값은 페이지 전체의 문자길이를 표현해줍니다.
즉 페이지 전체의 문자 길이가 다르다는 것인데
이는 length를 찾았을 때 처럼 Hello admin이 출력된 결과가 html에 표현되었기에
구분이 되는 것입니다.
우리는 이것으로 1~8글자의 아스키 코드값을 찾을 수 있는 것입니다.
1 : 48 - 0
2 : 57 - 9
3 : 53 - 5
4 : 97 - a
5 : 57 - 9
6 : 56 - 8
7 : 53 - 5
8 : 50 - 2
유일하게 4번째 자리만 영문자 a인것으로 보아 숫자검색으로만 찾을 수 없게 한것으로 보입니다.
어쨋든 정리하면 pw = 095a9852 가 됩니다
이 값을 문제 사이트에 삽입해보면

크~ 문제가 해결되었습니다!
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) darkelf문제 (0) | 2022.08.16 |
---|---|
(Lord of SQLInjection) wolfman문제 (0) | 2022.08.16 |
(Lord of SQLInjection) goblin 문제 (0) | 2022.08.01 |
(Lord of SQLInjection) cobolt 문제 (0) | 2022.08.01 |
(Lord of SQLInjection) gremlin 문제 (0) | 2022.08.01 |