Hacking/[Web]Natas

OverTheWire [Natas Level 20]

양선규 2023. 4. 4. 19:48
728x90
반응형

Natas Level 20 입니다.

 

 

문제

 

현재 일반 유저로 로그인 되어 있으며, admin 계정으로 로그인하여 natas21의 password를 획득하라고 합니다.

 

 

admin 입력

 

"admin" 입력하고 Change name 버튼을 눌러보니

 

 

아무런 변화도 없음

 

아무런 변화도 없습니다.

소스코드를 살펴봅시다.

 

 

1
2

 

조금 길군요

 

 

php session_set_save_handler

 

일단 아래쪽을 보시면, session_set_save_handler 함수를 사용하는 것을 알 수 있습니다.

해당 함수에 의해  세션이 처리되고, 세션값이 세션 파일에 수동으로 저장됩니다.

 

 

print_credentials()

 

위쪽 print_credentials() 함수는 password를 출력해주는 함수인데,

출력 조건은 세션명이 admin 이고, 해당 값이 1 이어야 합니다.

쉽게 말해서 key = admin , value = 1  이어야 한다는 것입니다.

 

 

myread()

 

이건 myread() 함수의 일부분입니다.

세션을 배열형태로 저장하고 있고

"\n" 개행문자를 기준으로 각 데이터를(세션을) 분리하고 있습니다. ( explode함수에 의해 분리되고 있음 )

 

4,5행을 보시면 " "(공백) 을 기준으로 key와 value를 나누고 있으며

세션 배열의 2행을 가져와서, value값을 key에 대입하고 있습니다.

 

쉽게 말해서, "test 1" 을 입력하게 되면 

test = 1 이렇게 값이 대입이 되는 것입니다.

 

그렇다면 우리가 해야 할 일은,

"admin 1" 을 전송하는 것이겠군요. 물론 배열의 2행에 말이에요.

공격을 수행할 파이썬 코드를 짜보도록 하겠습니다.

 

 

import requests

username = 'natas20'
password = 'guVaZ3ET35LbgbFMoaN5tFcYT1jEP7UH'

url = f"http://{username}.natas.labs.overthewire.org/?debug=true"

payload = dict(name="test\nadmin 1") # test 자리엔 아무거나 넣어도 됨
# 2번째 행에 admin 1 이 들어가야 함


r = requests.post(url, auth=(username,password), data=payload)
cookie = r.cookies.get_dict()

d = requests.post(url, auth=(username,password), cookies=cookie)
print (d.text)

 

 

소스코드입니다.

 

딕셔너리 형태로 payload를 만들어, 문제의 name 파라미터에 test\nadmin 1 값을 전송하고 있습니다.

test는 세션 배열의 1행에 들어갈 것이며, \n 개행문자를 기준으로 admin 1 값은 2행에 위치할 것입니다.

그리고 위 코드에서 봤던 대로, 1이 admin에 대입되어 admin = 1 이라는 결과를 만들겠죠.

 

먼저 payload를 보내어, admin의 cookies 값을 획득한 후

다시 cookies 값을 대입하여 로그인한 후 response를 받아오는 코드입니다.

 

 

password 출력 조건문

 

그렇게 print_credentials 이라는 password 출력 조건문 함수의 조건을 충족하게 됩니다.

session 이름은 admin이고, admin의 값은 1이 되니까요.

 

 

password 획득

 

프로그램 실행 결과입니다.

가운데쯤 "Password :" 부분에 natas21의 password가 출력되었습니다.

 

==================================

참고한 링크입니다.

https://medium.com/overthewire-natas-writeup-by-jsinix/overthewire-natas-level-19-20-e93c7343f67

 

OverTheWire: Natas Level 19→ 20

Use the credentials from previous level to login to this challenge.

medium.com

http://www.lug.or.kr/files/docs/PHP/function.session-set-save-handler.html

728x90
반응형

'Hacking > [Web]Natas' 카테고리의 다른 글

OverTheWire [Natas Level 22]  (0) 2023.04.05
OverTheWire [Natas Level 21]  (0) 2023.04.04
OverTheWire [Natas Level 19]  (0) 2023.04.04
OverTheWire [Natas Level 18]  (0) 2023.03.29
OverTheWire [Natas Level 17]  (4) 2023.03.29