일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- forensic
- hacking case
- AWS EKS
- 해킹
- 모의해킹
- AWS
- 정보보안기사
- AWS EKS Udemy
- ISMS-P 인증심사원
- 보안기사
- AWS Opensearch
- 정보보안기사 실기
- artifacts
- SMS-P 인증 기준 안내서 요약
- AWS Elasticsearch
- isms-p
- k8s
- 쿠버네티스
- The Sleuth Kit
- CFReDS
- 보안
- 포렌식
- 실습
- 정보보안
- Autopsy
- ISMS
- TSK
- AWS 쿠버네티스
- kubernetes
- iam
- Today
- Total
Always-Try(정보보안 및 일상)
webhacking.kr - Challenge(old) - 18번 (SQL 인젝션) 본문
#1. 18번
1-1. 문제
1-2. 풀이
대놓고 SQL INJECTION이라고 되어있다.
일단 소스보기를 하자.
소소의 끝 쪽에 preg_match와 mysqli_fetch_array를 사용하여 작성된 부분이 있는데, 여기에 sql 쿼리문이 적나라하게 나와있다.
* preg_match는 php에서 정규표현식을 이용하여 결과 값을 반환할 수 있는 함수이다.
- 첫 번째 인수 : 정규식 표현 작성
- 두 번째 인수 : 검색 대상 문자열
- 세 번째 인수 : 배열 변수 반환. 패턴 매치에서 매칭된 값을 배열로 저장
- 반환값 : 매칭에 성공하면 1, 실패하면 0이 반환
*mysqli_fetch_array는 select 쿼리의 결과 값을 배열 형태로 입력해주는 함수이다.
그럼 selcet와 from을 포함한 일부 문자열은 입력 값으로 사용할 수 없다. 그리고 쿼리의 결과 값을 $result에 넣는데, $result에 id가 admin인 값을 넣으면 문제가 해결된다. 그리고 admin의 no는 2이다. 여기서 말하는 쿼리는 다음과 같다.
select id from chall18 where id='guest' and no=$_GET[no]
위 쿼리의 조건에는 id='guest'라고 되어 있는데, 이걸 무력화 시키고 where id='admin' 이라고 인식하게 하면 문제가 해결 된다. and, or의 특성을 이용하여 결과적으로 아래와 같은 형태의 쿼리가 실행되도록 해보자.
select id from chall18 where id='guest' and no='2' or no='2'
위 쿼리의 빨간 부분을 일력하면 no hack 이라고 필터링된다.
흠.. GET 방식이므로 URL 인코딩을 이용하여 입력해보도록 하자.
끝
'Pen Test' 카테고리의 다른 글
OWASP-ZAP 사용 가이드 - 3. https 사이트 접속 시 사설 인증서 오류 (0) | 2021.08.29 |
---|---|
webhacking.kr - Challenge(old) - 20번 (0) | 2021.03.10 |
webhacking.kr - Challenge(old) - 17번 (0) | 2021.03.05 |
webhacking.kr - Challenge(old) - 16번 (0) | 2021.03.05 |
webhacking.kr - Challenge(old) - 15번 (0) | 2021.03.04 |