티스토리 뷰
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
43단계 소스코드이다.
id와 pw를 파라미터로 받으며 메타데이터에 접근하지 못하도록 필터링 되어있다.
이번엔 에러를 표출하지않는다. 따라서 에러기반 주입은 진행할 수 없다.
하지만 필터링에서 시간기반 명령어들은 필터링 되어있지 않기에 힌트정도는 얻을 수 있다.
입력받은 pw와 id가admin인 pw가 일치하면 문제는 해결된다.
이제 풀어보자
이번에도 문제는 mssql환경에서 진행된다.
일단 pw길이부터 추출해보자
쿼리: ?pw='if(len((select pw from prob_yeti where id='admin'))=8)waitfor delay'0:0:3'--+-
pw의 길이는 8이다.
하지만 이 과정에서 오랜 시간이 걸렸다.
그 이유는 바로 두 쿼리의 차이에 있다.
정답쿼리: ?pw='if(len((select pw from prob_yeti where id='admin'))=8)waitfor delay'0:0:3'--+-
오답쿼리: ?pw='if(len(select pw from prob_yeti where id='admin')=8)waitfor delay'0:0:3'--+-
차이를 논리적으로 구분할 수 있나?
나는 못했다.
글을 작성하는 지금도 무슨 차이가 있는지 모르겠다.
그냥 len()을 소괄호로 한번 더 감싸준 것 뿐인데 왜 결과가 달라지는지 모르겠다.
아마 mssql의 문법에서 발생한 문제같다.
일단 문제해결에 초점을 두자.
이제 pw값을 추출할 차례이다.
쿼리: ?pw='if(ascii(substring((select pw from prob_yeti where id='admin'),1,1))>1)waitfor delay'0:0:2'--+-
위 쿼리를 기본으로 삼아 인젝터를 작성한다.
6425b725가 정답이라 출력되었다.
문제해결!
시행착오
1. 일단 mssql는 문법공부를 조금 더 해야겠다. substr() -> substring(), length() -> len(), sleep() -> waitfor delay '0:0:2' 등으로 바꿔줘야한다.
'SQL injection > lord of SQL' 카테고리의 다른 글
Lord Of SQL injection 45단계-kraken (0) | 2022.02.23 |
---|---|
Lord Of SQL injection 44단계-mummy (0) | 2022.02.22 |
Lord Of SQL injection-42단계 revenant (0) | 2022.02.21 |
Lord Of SQL Injection 41단계-nessie (0) | 2022.02.21 |
Lord Of SQL injection 40-poltergeist (0) | 2022.02.18 |
- Total
- Today
- Yesterday
- los 15
- Los
- 백준
- lord of sql
- samron
- los 15단계
- 코딩테스트 준비
- ys.k
- 스프링
- 김영한 실전 자바 기초
- 코딩테스트
- 상속
- samron3
- 백준 피보나치 수열
- spring
- 백준 피보나치
- java
- 기술스택
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- 프로그래머스
- 김영한 실전 자바 중급
- webhacking.kr
- 김영한
- zixem
- 상품을 구매한 회원 비율 구하기 파이썬
- 프로그래머스 상품을 구매한 회원 비율 구하기
- extends
- static
- 김영한 실전 자바 기본
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |