티스토리 뷰
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
21단계 소스코드이다.
pw 파라미터에 sleep, benchmark 등의 함수가 필터링 된걸 볼 수 있고, 문제 해결조건은 pw에 admin의 pw 값을 넣으면 해결된다.
일단 필터링된 두 함수의 기능부터 알아보자.
1. sleep(n) // sql에서 where 뒤에 호출되며 괄호안의 숫자(초) 만큼 지연시킨다. ex) sleep(3) -> 3초 지연
2. benchmark(a,b) // a는 돌릴 횟수 이며 b는 수행할 함수이다. ex) select benchmark(10000,2+2) ->2+2를 만번한다.
또 이번엔 exit(mysqli_error)를 통해 에러가 생기면 해당 에러를 페이지에 반환해준다.
이 문제는 error based 문제이다.
union select를 사용하여 문제를 풀겠다.
union select를 사용하기 위해선 컬럼의 수를 정확히 맞춰줘야한다. 일단 컬럼의 수 부터 찾아보겠다.
order by n은 sql에서 칼럼을 정렬할 때 사용하며 n의 숫자가 칼럼수보다 많아지면 에러가 생긴다. 이를 이용 해서 컬럼수를 알아 낼 수 있다.
컬럼의 수를 알아냈다. order by 2 에서 에러페이지가 출력되었으니 컬럼의 수는 하나이다.
이와 if 를 사용해서 injection을 진행한다.
일단 admin의 pw를 알아내야 하니 pw의 길이부터 추출해야한다.
pw길이를 추출하기 위해 union 구문을 사용한다.
union select 구문은 order by로 알아낸 컬럼수보다 더 많은 컬럼을 호출하면 에러를 발생하는데 이를 참 거짓 유무로 사용 하겠다.
1. 컬럼수에 맞게 사용했을 때
2. 컬럼수를 초과해서 사용 했을 때
if 조건문을 사용하여 참일때 에러페이지 , 거짓일때 정상페이지가 출력되는것을 응용해서 pw길이를 추출한다.
여러시도후에 pw의 길이가 32자릿 수인걸 알아냈다.
이제 인젝터를 만들어 비밀번호의 값을 추출해낸다.
헤헤..
문제 해결!!
시행착오
1. 처음엔 참 거짓을 구분하는 쿼리를 order by 2로 넣으려 했는데 아예 구문오류가 생겼다..
문제는 order by절은 파라미터 뒤에 와야하는데 if를 사용하기위해서는 반드시 ||연산자가 들어가야만 했다.
그래서 상성이 안맞았다. 아니면 가능한 방법이 있는데 내가 모르는 걸 수도 있다. 그래서 일단은 union으로 사용했다.
추후에 더 알아봐야겠다.
2. if문 앞에는 or이 와야하고 order는 파라미터 다음에 바로 쓰면된다. ex) ?pw='order by1 --+-' ex)?pw='||if()--+-'
3. 참과 거짓을 구분하는 웹페이지는 바뀌어도 되지만 특정할 수 있는 문자가 오는게 편하다. ex) Subquery
'SQL injection > lord of SQL' 카테고리의 다른 글
Lord Of SQL injection 23단계-hell fire (0) | 2022.01.14 |
---|---|
Lord Of SQL injection 22단계-dark_eyes (0) | 2022.01.13 |
Lord Of SQL injection 20단계-dragon (0) | 2022.01.12 |
Lord Of SQL injection 19단계-xavis (0) | 2022.01.11 |
Lord Of SQL injection 18단계-nightmare (0) | 2022.01.10 |
- Total
- Today
- Yesterday
- 김영한 실전 자바 기초
- 김영한 실전 자바 중급
- spring
- 자바
- 백준 피보나치 수열
- 백준 피보나치
- extends
- samron
- 기술스택
- 상품을 구매한 회원 비율 구하기 파이썬
- ys.k
- 김영한
- 상속
- los 15
- java
- static
- lord of sql
- los 15단계
- Los
- 코딩테스트 준비
- 김영한 실전 자바 기본
- 코딩테스트
- 프로그래머스 상품을 구매한 회원 비율 구하기
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- samron3
- 스프링
- webhacking.kr
- zixem
- 백준
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |