[+] 개인적인 공부이니 틀린부분 지적 ㄳ
GET방식과 다르게 POST방식은 Request 방식만 다르다.
GET방식은 Request를 보냈을때 URL에 파라미터와 값이 노출되고 Request-Header에 파라미터를 담아서 보내지만,
POST방식은 URL에 파라미터와 값이 노출되지 않고, Request-Body에 파라미터를 담아서 보낸다. 따라서 POST방식은 프록시 도구가 필요하다.
GET, 과 POST 방식의 차이점은 요청값이 Header에 포함이냐 Body에 포함이냐만 다르기 떄문에, 대충대충 설명했음. 자세한건 아래 GET방식의 Select 포스팅 참조 꼭봐야함 안그러면 이해 못할수도..?
https://revi1337.tistory.com/43?category=896718
[bWAPP] SQL Injection (GET/Select)
[+] 개인적인 공부이니 틀린부분 지적 ㄳ Low 레벨 1. 기본 페이지 - 영화를 선택하면, 선택한 영화에 대한 정보를 출력해주는 폼을 가지고 있다. - 이름이 Select인 이유는 영화를 선택할 수 있는 폼
revi1337.tistory.com
Low 레벨
1. 기본 페이지
- 영화를 선택하면, 선택한 영화에 대한 정보를 출력해주는 폼을 가지고 있다.
- 이름이 Select인 이유는 영화를 선택할 수 있는 폼을 구성하는 HTML 태그 이름이 select라서 그렇다고 한다.
- 또한 GET방식과 다르게 URL에 요청값이 노출되지 않는 것을 확인할 수 있다.
- 하지만, 페이지 소스보기를 들어가서 보면 각 영화에 대한 value값이 할당되어 있다.
2. 정상적인 동작 확인과 Burp Suite
- Burp 에서의 사진. POST방식이기 때문에, 요청값이 Request-Body에 포함되어있음.
- 정상적으로 Iron Man이 출력된 것을 확인할 수 있음.
3. or 1=1 # 를 사용했을때의 동작 확인
- Burp에서 movie값을 변조해서 요청을 변조해서 포워딩.
- or 1=1 로 인해 모든 값이 출력되어야 하는데, 하나의 값만 출력된 것을 확인.
- 사실상 DB에선 or 1=1 질의에 대한 모든 값을 반환해주었지만, 내부적으로 PHP 코드에서 맨위의 레코드만 출력되게
조절한 것임.
4. LIMIT을 이용한 SQL Injection
4번에서 말했지만, DB에서 모든값을 반환해주었지만, PHP 코드에서 맨위의 레코드만 출력되게 조절한 것임.
하지만, SQL 의 limit으로 출력값을 재조정할 수 있음. limit구문에 대한 것은 최상단의 링크 참조
- movie에 2 or 1=1 limit 6,1 # 를 삽입해 요청 변조해서 포워딩
- movie=2 즉, Iron Man이 출력되어야 하지만, limit 6,1 문으로 인해 7번째 레코드에서 한개만 출력한 것을 볼 수 있음.
자세한건 최상단 링크 참조
4-1. Union Select을 이용한 SQL Injection
movie=2 union select 1,2,3,4,5,6,7 # 를 삽입했지만 일치하는 레코드 값이 나오지 않음.
그 이유는 movie=2의 결과. Iron Man의 대한 출력이 제일 상단에 위치하고있어서 그렇다.
하지만 limit을 사용하면 정상적으로 출력해 줄 수 있다.
자세한건 최상단 링크 참조. 진짜 형태만 다르고 다 똑같다.
4-2. Union Select과 LIMIT을 이용한 SQL Injection
movie=2 union select 1,2,3,4,5,6,7 limit 1,1 # 을 삽입하면 정상적으로 출력 해줄 수 있다.
자세한건 최상단 링크 참조
5. Low레벨 대응방안 보기
- no_check함수를 사용하고 있다 나와있음.
- 입력값검증을 하지않고 그대로 입력값을 리턴해주는 것을 확인.
High 레벨
1. Union Select과 LIMIT을 이용한 SQL Injection
- movie=2 union select 1,2,3,4,5,6,7 limit 1,1 # 를 삽입해 포워딩
- 하지만 인젝션이 통하지 않고, movie=2 인 Iron Man 만이 출력되고 있다. 취약점 X
- 또한 페이지가 qli_13-ps.php로 리다이렉션되어있는 것을 확인할 수 있음. (URL 확인)
2. High 레벨 대응방안 보기
- High 레벨이면 sqli_13-ps.php로 Redirection한다고 나와있음
sqli_13-ps.php 페이지로 들어가보면 prepare statement 를 만나볼 수 있다. prepare statement는 SQL을 정형화해서 사용하는 장점이 있다. 클라이언트에서 웹으로 데이터를 전송하고, 그 데이터를 기반으로 DB에 SQL 쿼리를 보내주는데, 웹에서 클라이언트로부터 잘못된 데이터를 받아올까봐 미리 쿼리문을 준비해놓고 비교하여 SQL Injection에 대응한다.
'WebHacking > bWAPP' 카테고리의 다른 글
[bWAPP] SQL Injection (Metasploit) (0) | 2021.10.15 |
---|---|
[bWAPP] SQL Injection (SQLMAP) (0) | 2021.10.15 |
[bWAPP] SQL Injection (POST/Search) (0) | 2021.10.15 |
[bWAPP] SQL Injection (GET/Select) (0) | 2021.10.15 |
[bWAPP] SQL Injection (GET/Search) (0) | 2021.10.15 |