Chapter07. SQL 인젝션 공격



!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ō

미친놈들… 휴 그양

다른 자리 알아보던지

해야겠습니다. 이거야 원… |ω・`)

하다못해 팬시 일러스트 라도(…)
~~퍽! 펵!펵…!~~

아무튼 긴 글을 읽어 주셔서 감사하고

좋은 하루 보내시고, 하시는 일 잘 되시고

역시 코로나 조심 하시길 바랍니다. 🙂