| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- SuNiNaTas
- 정보보안
- 빡공팟 6기
- 워게임
- 써니나타스
- File Upload Vulnerability
- 웹 해킹
- TeamH4C
- wargame
- Insecure CAPTCHA
- Lord of SQL Injection
- XSS
- Hackerfactory
- Weak Session IDs
- Remote File Inclusion
- bypass CAPTCHA
- sql injection
- Web Hacking
- 드림핵
- 해커팩토리
- webhacking.kr
- DreamHack
- 정보보호
- DOM-Based XSS
- DVWA
- 빡공팟 4기
- Dremhack
- Los
- Cross Site Scripting
- H4CKINGGAME
- Today
- Total
도카이트
[Wargame] Lord of SQL Injection - assassin 본문
문제 화면

- 5행의 preg_match 함수를 통해 pw 값에 대하여 싱글 쿼터를 필터링하고 있다.
- like 구문을 사용하여 pw 값을 찾아서 가져오는 쿼리문이다.
- 이전 문제들과는 다르게 like 구문의 특성을 이용하여 풀어야하는 문제인듯 하다.
- 먼저 like 구문에 대하여 쓰임새와 특징에 대해 알아보자 !
Like 구문
: 쿼리문 WHERE 절에 주로 사용되며, 부분적으로 일치하는 칼럼을 찾을 때 사용
SELECT * FROM [테이블명] WHERE LIKE [조건]
- _ : 글자 수를 설정 (ex. pw like a___ 또는 __a)
- % : 글자 수를 설정하지 않음
- %a%: 전체 문자열에 a가 존재
- a% : 문자열이 a로 시작 (ex. pw like ab% 또는 abc%)
- %a : 문자열이 a로 끝 (ex. pw like %ba 또는 %cba)
%나 _ 를 이용하여 각 자리 수 패스워드를 알아낼 때마다 문자열을 각 자리마다 추가하여,
최종적으로 admin이 결과값으로 출력될 때까지, 반복 작업하여 pw를 알아내면 될 듯 하다.
이번 문제도 당연히 파이썬을 이용하여 문자들을 대입하여 패스워드 값을 알아보도록 한다.
그러나, 각 자리 수를 한 번에 알아내고 싶었으나, 문자열 포맷에 각 자리 수를 알아내고,
알아낸 값을 추가하여 request를 보내도록 조건을 설정하는 부분에서 많은 까다로움이 있어서
한 자릿 값에 대하여 패스워드를 알아보도록 코드를 작성하고 각 자리 수에 알아낸 값을
수동적으로 추가 작성하여 코드를 다시 실행하는 식으로 문제를 풀이했다.
(프로그래밍 공부를 소홀히 하면 안되는 이유를 다시 한 번 느낀다 …)
admin과 guest의 패스워드가 일정 부분 중복되는 부분이 있을 수도 있기에,
해당 부분을 유의하여 admin을 나타내는 패스워드가 출력될 때까지, 수동적으로
코드를 반복 수정 실행해보도록 한다 !
los_assassin.py 작성
import requests
url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
pw_admin = ""
pw_guest = ""
for i in range(48, 122):
target_url = url+'?pw={}%'.format(chr(i))
cookies = {'PHPSESSID':'사용자 PHPSESSID 값'}
r = requests.get(url=target_url, cookies=cookies)
if "Hello admin" in r.text:
pw_admin += chr(i)
print("패스워드_admin : "+chr(i))
break
if "Hello guest" in r.text:
pw_guest += chr(i)
print("패스워드_guest : "+chr(i))
break
- 기존과 다르게 아스키 코드를 이용하여 대입하는 range 값을 (48, 122)로 수정하였다.
- 기존처럼 33부터 range를 설정할 경우 중간에 % 문자가 존재하여 와일드 카드 부분이 %%로 True가 돼버린다.
- 따라서 일부 특수문자를 제외한 48부터 122로 설정하여 코드를 실행하였다.
- 또한 코드를 실행 후 획득한 패스워드 값을 target_url 행의 format 함수 대입부 {} 앞에 추가하여 재실행을 반복한다.
- 최종적으로 "패스워드_admin : " 의 값이 출력될 때까지 코드를 추가 · 수정 · 실행하면 된다.
- 다행히 중복되는 패스워드 값이 많지 않아 총 3번 만에 문제를 해결할 수 있었다.
los_assassin.py 실행 결과 및 assassin solve

- los_assassin.py 에서 설명한 내용들이 다소 이해가 안갈 수도 있어 추가적으로 설명을 작성했다.
- 90 까지의 값을 구하고 세 번째 자리 2를 구할 때 패스워드_admin 이 출력되었다.
- 즉, 첫 번째와 두 번째 자리 pw 값은 admin과 guest 가 동일하며, 세 번째 자리부터 값이 다르다.
- 얻을 세 자리 pw 값을 통하여 pw 파라미터 값에 902%를 입력하여 주면..
assassin Clear

- 성공적으로 assassin 문제를 Clear 할 수 있다 !
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
| [Wargame] Lord of SQL Injection - succubus (0) | 2022.06.10 |
|---|---|
| [Wargame] Lord of SQL Injection - giant (0) | 2022.06.10 |
| [Wargame] Lord of SQL Injection - bugbear (0) | 2022.06.09 |
| [Wargame] Lord of SQL Injection - darkknight (0) | 2022.06.09 |
| [Wargame] Lord of SQL Injection - golem (0) | 2022.06.08 |