티스토리 뷰
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
12단계 소스코드이다.
no 에는 ascii, substr, probl , _ ,. , () 이 필터링된 모습이다.
입력받은 pw 값은 ', ", null을 필터링하는 모습이고 그 값이 admin과 같으면 해결된다.
pw 뒤에 싱글 쿼터가 바로 막힌다. 일단 싱글 쿼터 필터링을 우회해야 한다.
그렇게 생각했는데 새로 배운 게 있다. no 뒤에는 더 이상 쿼리문이 없기 때문에 바로 추가 쿼리를 날릴 수 있다.
간단한 쿼리로 참값을 만들어본다.
이제 blind sql로 pw 값과 no 값을 알아내면 된다.
pw의 자릿수는 8자리이다.
또한 admin의 no 값은 2다.
이제 admin 의 pw 값을 알아내면 되는데 substr과 ascii 가 필터링되어있다.
substr 은 right(left(pw, {}),1)로 우회할 수 있고 ascii()는 ord()와 chr()로 우회할 수 있다.
1. ord('A') -> 65 // 문자를 아스키 값으로 변환해준다.
1-2. ord('a') -> 97
2. chr(65) -> A // 숫자를 문자로 변환해준다.
2-1. chr(0x41) -> A
하지만 지금은 아스키코드로 변환해줘야 하기 때문에 ord() 함수를 채택한다.
그에 따른 코드를 작성하고 pw를 추출한다.
추출한 pw 값과 no 값을 입력한다.
문제 해결.
느낀 점
1. 싱글 쿼터가 우회되어있을 때 더블 쿼터로 대체할 수 있는데 이는 파이썬 인젝터에서 문자열에 문제를 주므로 URL인코딩해서 사용하거나 hex로 변환해서 사용한다.
1-1. " -> URL 인코딩 %22
1-2. hex -> 0x뒤에 값을 넣음
2. ascii() 함수 필터링 우회는 ord()로 사용하면 된다. 똑같이 작동한다.
3. 쿼리 문의 where절 맨뒤에는 쿼리를 추가로 작성할 수 있다.
3-1. ex) select id from ---- where id=1 and pw =2 and no=1'or1=1--+-
ㄴpw와 no 가 필터링되어있는 게 달라 생각을 못했다... 실화냐
4. and 와 && 의 차이점
4-1. 우선순위 and < = < &&, ||으로 &&, || 의 우선순위가 더 높다. ex) b= true and false // b = true이다!!
4-2. 또한 and와 & 가 php에서 하는 역할은 다르기 때문에 착각하지 않도록 해야 한다. and = 논리 연산자,
& = where절 뒤의 조건을 이어준다.
5. 쿼리 맨뒤에 쿼리문을 작성하려면 바로 전 조건에 아무 값이라도 넣어야 한다.
5-1. ex)? pw=&no=""like"" // false
ex)?pw=&no=1""like"" // true
'SQL injection > lord of SQL' 카테고리의 다른 글
Lord Of SQl injection 14단계-giant (0) | 2022.01.08 |
---|---|
Lord Of SQL injection 13단계-bugbear (0) | 2022.01.07 |
Lord Of SQL injection 11단계 [2] 이진검색 (0) | 2022.01.06 |
Lord Of SQL injection 11단계-golem (0) | 2022.01.06 |
Lord Of SQL injection 10단계-skeleton (0) | 2022.01.06 |
- Total
- Today
- Yesterday
- 프로그래머스 상품을 구매한 회원 비율 구하기
- los 15
- 자바
- zixem
- 백준 피보나치 수열
- 코딩테스트
- ys.k
- 백준
- 기술스택
- spring
- Los
- java
- 김영한 실전 자바 기초
- 코딩테스트 준비
- lord of sql
- 백준 피보나치
- samron
- los 15단계
- 김영한 실전 자바 중급
- webhacking.kr
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- 김영한
- 프로그래머스
- 상속
- 스프링
- static
- 상품을 구매한 회원 비율 구하기 파이썬
- extends
- samron3
- 김영한 실전 자바 기본
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |