드림핵 사이트의 워게임 중 웹 해킹 관련
blind sql injection advanced (Level 2) 문제에 대해서 정리 해보려 합니다
<문제설명>
Exercise: Blind SQL Injection Advanced에서 실습하는 문제입니다.
관리자의 비밀번호는 "아스키코드"와 "한글"로 구성되어 있습니다.
문제 설명에서 보며 아스키코드로만 되어있으면 수월 했을텐데 한글이 포함되어있어
이부분이 문제 해결의 관건일 것으로 보인다
<문제를 풀기 위한 시도 정리>
→ aaa 라는 값을 입력했을 경우에는 아무것도 나오지 않는 것을 확인
→ admin 값을 입력했을 경우에는 ID가 존재한다고 나온다
→ admin 값이 참인것을 확인 했으니 admin 조건을 포함한 참이 되는 입력했을 경우에는 ID가 존재한다고 나온다
이런정보를 활용해서 비밀번호 자릿수나, 비밀번호 정보를 얻을 수 있지 않을까 시도를 해봐야겠다
참, 거짓의 플래그를 통해 값을 유추 해야 하는 상황
→ admin 값이 참인것을 확인 했으니 admin 조건을 포함한 참이 되는 입력했을 경우에는 ID가 존재한다고 나온다
이런정보를 활용해서 비밀번호 자릿수나, 비밀번호 정보를 얻을 수 있지 않을까 시도를 해봐야겠다
#시도했던 쿼리
admin' and substr(upw,1,1)='a #false
admin' and substr(upw,1,1)='b #false
admin' and substr(upw,1,1)='c #false
admin' and substr(upw,1,1)='d #true
admin' and substr(upw,2,1)='h #true
→ upw에서 플래그 값을 가지고 있는것을 확인했으니 실제 길이가 얼마나 되는지 확인이 필요하다
length로 upw에서 길이를 확인
→ 자리수를 확인 하고 그 다음에는 바로 아스키코드와 한글을 찾아서 값을 출력하도록 PoC 코드를 생성했는데 너무 느려 수정의 필요성을 확인
다시 접근 방법을 정리해보면
1. admin 패스워드 길이 찾기
2. 각 문자 별 비트열 길이 찾기
→ 패스워드의 각 문자가 한글인지, 아스키코드 인지 알 수 없기 때문에 이를 판단하기 위해서 문자를 비트열로 표현했을때 의 길이 정보 필요
3. 각 문자 별 비트열 추출
→ 패스워드 별 각 문자에 해당하는 비트열을 추출 아스키 코드의 경우 최대 8번, 한글의 경우 최대 24번 요청으로 추출
4. 비트열을 문자로 변환
# 사용할 쿼리의 대한 정리
length(bin(ord(substr(upw, {i}, 1)))) 함수 사용
substr(upw, {i}, 1)
이 함수는 문자열 upw에서 특정 위치 {i}에서 시작하는 길이 1의 부분 문자열을 추출
즉, {i}번째 문자의 하나의 문자를 반환
예: substr("hello", 2, 1)은 "e"를 반환
ord(substr(upw, {i}, 1))
ord 함수는 주어진 문자를 해당하는 ASCII 값(또는 유니코드 코드 포인트)으로 변환
예: ord("e")는 101을 반환
bin(ord(substr(upw, {i}, 1)))
bin 함수는 주어진 숫자를 이진수(binary) 문자열로 변환
이진수 문자열은 '0b'로 시작하며, 그 뒤에 해당 숫자를 2진수로 표현한 문자열이 붙는다
예: bin(101)은 '0b1100101'을 반환
length(bin(ord(substr(upw, {i}, 1))))
마지막으로 length 함수는 이진수 문자열의 길이를 반환
이때 '0b'를 포함하여 문자열의 길이를 계산
예: length('0b1100101')는 9를 반환
PoC코드
위와 같은 코드를 생성 후 작업을 돌리면 최종적으로 원하는 결과를 얻을 수 있다
# DH출력값 제외 일부 로그 발췌
character 26's bits: 0
character 26:
character 26's bits: 0
character 26:
character 26:
character 27's bit length: 1
character 27's bits: 0
character 27:
Extracted password: DH{} <-- 정답출력
문제 출처 및 참조
'IT Security > DreamHack' 카테고리의 다른 글
드림핵 워게임 command-injection-1 문제 풀이 정리 (0) | 2024.11.13 |
---|---|
드림핵 워게임 baby-union (Level 1) 문제 풀이 정리 (2) | 2024.11.12 |
드림핵 워게임 error based sql injection 문제 풀이 (Level 1) (0) | 2024.11.11 |
드림핵 워게임 sql injection bypass WAF Advanced 문제 풀이 정리 (Level 2) (1) | 2024.11.09 |
드림핵 워게임 sql injection bypass WAF 문제 풀이 정리 (Level 1) (1) | 2024.11.08 |