[+] 개인적인 공부이니 틀린부분 지적 ㄳ
SQL Injection (GET/Search) 방식과 다르게 SQL Injection (POST/Search) 방식은 Request 방식만 다르다.
GET방식은 Request를 보냈을때 URL에 파라미터와 값이 노출되고 Request-Header에 파라미터를 담아서 보내지만,
POST방식은 URL에 파라미터와 값이 노출되지 않고, Request-Body에 파라미터를 담아서 보낸다. 따라서 POST방식은 프록시 도구가 필요하다.
GET, 과 POST 방식의 차이점은 요청값이 Header에 포함이냐 Body에 포함이냐만 다르기 떄문에, 대충대충 설명했음. GET방식에 자세히 포스팅해놨으니 이해하려면 아래 링크를 꼭 보고 와야함. 안그러면 이해 못할수도...?
https://revi1337.tistory.com/51?category=896718
[bWAPP] SQL Injection (GET/Search)
[+] 개인적인 공부이니 틀린부분 지적 ㄳ - SQL Injection은 사용자가 입력한 값을 서버에서 검증하지 않고, 입력한 값이 데이터베이스 쿼리 일부분으로 포함되 어DB의 민감데이터를 노출, 갈취, 인
revi1337.tistory.com
Low 레벨
1. 정상적인 동작 확인과 Burp Suite
- GET방식과 다르게 Iron Man이라는 값이 URL에 노출되지 않는 것을 확인할 수 있음.
- 따라서 이번 POST방식은 프록시 도구인 Burp Suite를 사용
- 프록시 도구인 Burp Suite에서 요청을 Intercept한 사진
- 검색한 Iron Man이 Request-Body에 포함되어 있는 것을 확인.
- Header와 Body는 /r/n /r/n (개행 두번) 을 기준으로 구별함. 따라서, 13줄 까지가 헤더이고, 그 밑에는 Body
2. ' 와 " 를 이용한 오류 SQL Injection 가능 여부 확인.
- title에 싱글쿼터( ' )를 삽입해 요청 변조
- 오류가 발생하는 것을 보면 정상적으로 SQL Injection을 실행할 수 있음을 확인.
- title에 더블쿼터( " )를 삽입해 요청을 변조
- 제목 " 인 영화가 없기 떄문에, 결과를 찾을수 없다고 출력. 때문에, POST방식도 마찬가지로 입력값을 싱글쿼터( ' )두개로 묶어주는것을 예측할 수 있음. 자세한건 최상단 GET방식 링크 참조
3. GET방식과 동일하게 ' or 1=1 # 인젝션
- ' or 1=1 # 를 사용하는 이유는 최상단의 GET방식 링크 참조
- Burp에서 Body값에 ' or 1=1 #를 삽입해 요청을 변조하고 포워딩한다.
- POST방식이라 변조된 Request가 URL에 보이지 않지만, or 1=1 때문에 모든 영화가 출력됨을 확인할 수 있음.
4. Union Select Injection
- GET방식과 마찬가지로 동이라하게 "' or 1=1 union select 1,2,3,4,5,6,7 # 인젝션을 했을 때의 사진.
- 이해가 가지 않는다면 최상단 GET방식 링크 참조
- 결과적으로 DB내의 컬럼 수를 확인할 수 있고, 출력된 2,3,4,5번째의 컬럼에 인젝션 가능
4-1. Union Select Injection
- "' union select 1,@@version,@@datadir,4,5,6,7 # 를 삽입하여 DB서버의 정보를 출력해줄 수 있음.
- 자세한건 최상단 링크 참조.
5. Low 레벨 대응방안 보기
- 여느 떄와 마찬가지로 no_check함수를 사용하고 있다 나와있음.
- 입력값검증을 하지않고 그대로 입력값을 리턴해주는 것을 확인.
High 레벨
1. ' or 1=1 # 인젝션
- ' or 1=1 # 를 삽입하여 SQL 인젝션 실행 가능 여부를 확인하였으나, 모든 값이 출력되지 않았음. 취약점 X
- ' or 1=1 # 를 삽입하여 오류발생 여부를 확인하였으나 모든 값이 출력되지 않은 사진.
2. High 레벨 대응방안 보기
functions_external.php파일의 sqli_check_2 함수를 사용한다고 나와있음
- mysql_real_escap_string 함수로 입력값을 검증하고 있음.
mysql_real_escape_string() 함수는 \x00, \n, \r, \, ', ", \x1a 와 같은 문자 앞에 백슬래시(\)를 붙여서 해당 문자가 작동하지 않도록 이스케이프 시켜주는 함수이다.
'WebHacking > bWAPP' 카테고리의 다른 글
[bWAPP] SQL Injection (SQLMAP) (0) | 2021.10.15 |
---|---|
[bWAPP] SQL Injection (POST/Select) (0) | 2021.10.15 |
[bWAPP] SQL Injection (GET/Select) (0) | 2021.10.15 |
[bWAPP] SQL Injection (GET/Search) (0) | 2021.10.15 |
[bWAPP] Server-Side Includes (SSI) Injection (0) | 2021.10.15 |