티스토리 뷰
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
23단계 소스코드이다.
이번엔 union과 proc가 필터링되었다.
이번 문제는 파라미터에 order by절이 들어가 있다.
1.order by n // n번째 칼럼의 오름차순으로 정렬하고, 전체 칼럼이 n개보다 작으면 오류가 생긴다.
에러를 출력하지 않으니 시간지연 기반 sql 이 먹힐 거라는 걸 추측할 수 있다.
일단 문제해결 조건은 admin에 해당하는 email 값을 넣으면 문제가 해결된다.
일단 email의 길이부터 알아내야한다.
query : ?order=if(id='admin'and(length(email)=28),sleep(2),1) // id=admin이고 email의 길이가 28이면 2초동안 멈춘다.
쿼리를 주입했더니 웹페이지가 2.15초가 지연되며 실행되었다.
email의 값은 28자릿 수 이다.
이제 인젝터를 만들어서 email을 추출한다.
하지만 시간기반 인젝터는 에러가 잦았다..
26번째 값 까지 출력되고 많은 시간을 기다려 봤지만 더이상 출력되지 않아 쿼리를 조금 바꿔 27,28번째는 따로 얻어냈다.
admin_secure_email@emai1.com
해결
기분이 시원찮아서 다시 했다.
시행착오
1. blind, error기반 공격은 조금 해봤었는데 시간기반은 처음 접하는거라 파이썬에서 어떻게 코드를 짜야할지 몰랐다.
import time을 통해 시간기반 코드를 짤 수 있다.
start=time.time() // start에 현재 unix time stamp( unix소수로 나타내주며 정수는 초 소수는 마이크로초 단위)를 넣어줌
end=time.time()-start // end에 현재 unix time stamp에서 start 값을 뺀걸 넣어준다.
if(end>n) // sleep(n)가 실행되었으면 시간이 2초이상 지연되었기에 참 거짓을 판별하는 조건으로 쓴다.
으로 시간기반인젝터를 작성하면 된다.
2. order by n은 n컬럼의 데이터를 오름차순으로 정렬해 출력한다.
3. mysql에서의if(조건,a,b) //조건이 참일때 a 거짓일 때 b가 된다.
4. order by 뒤에 바로 쿼리를 더 작성할 수 있다. ex)order by if()~~
'SQL injection > lord of SQL' 카테고리의 다른 글
Lord Of SQL injection 25단계-green_dragon (0) | 2022.01.15 |
---|---|
Lord Of SQL injection 24단계-evil_wizard (0) | 2022.01.15 |
Lord Of SQL injection 22단계-dark_eyes (0) | 2022.01.13 |
Lord Of SQL injection 21단계-iron_golem (0) | 2022.01.12 |
Lord Of SQL injection 20단계-dragon (0) | 2022.01.12 |
- Total
- Today
- Yesterday
- Los
- 백준
- 김영한 실전 자바 기본
- 김영한
- 김영한 실전 자바 기초
- java
- 자바
- los 15단계
- 백준 피보나치 수열
- ys.k
- zixem
- samron3
- 상품을 구매한 회원 비율 구하기 파이썬
- 기술스택
- 스프링
- samron
- static
- 김영한 실전 자바 중급
- los 15
- webhacking.kr
- 상속
- lord of sql
- 프로그래머스 상품을 구매한 회원 비율 구하기
- 코딩테스트 준비
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- extends
- spring
- 코딩테스트
- 백준 피보나치
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |