SQL-Injection(Blog)

반응형

이번에는 블로그 방식의 SQL Injection을 해보도록 하겠다.

일단 SQL-Injection(Blog)를 클릭하면

다음과 같이 나온다.

이제 여기서 SQL Injection 공격이 먹히는지 확인하기 위해 '를 입력해보자

입력하면 다음과 같이 나오는데 우리는 여기서 사용하는 DB는 MYSQL이라는 점을 알 수 있다. 또한 bee')라는 것이 왜 나왔는지 의심해봐야한다. 이제 여기다 '입력후 아무 말이나 입력해보자

현재 듣고 있는 노래가 마크툽 노래여서 '마크툽이라고 입력했는데 다음과 같이 나왔다. 

여기서 우리는 밑줄 친 부분을 분석해보면 '마크툽', 'bee')' 인것인데 지금 짝이 맞지 않아서 에러가 생긴것으로 추측해 볼 수 있다. 

그렇다면 DB에 전송될 때는('입력내용','계정명')으로 전달한다고 추측해 볼 수 있다.

이제 DB 버전을 알아보자 다음과 같이 입력해보면 된다.

-> 입력말', (select @@version))#

나는 마크툽' ,(select @@version))# 이렇게 입력하였고 그 결과

다음과 같이 Owner 부분에 version을 띄어 version을 알아낼 수 있었다.

이게 DB로 넘어가게 되면 ('마크툽', (select @@version))#', '계정명')

이렇게 넘어가게 되고 # 뒤부분은 주석 처리 되어 로그인한 ID 부분에 DB 버젼이 뜨게 되는거 같다.

이제 DB안 테이블 명을 알아내보자

-> 입력말', (select table_name from information_schema.tables))#

다음과 같이 입력하면

이 오류는 출력값은 너무 많은데 출력할 수 있는 칸이 1개 밖에 없어서 뜨는 오류 인거 같다.

그래서 책을 보니 limit라는 구문을 사용하였다.

limit[시작행], [출력 행 개수] = 시작행 부터 개수만큼 출력한다.

이제 다시 노가다를 해야할 거 같다.

입력값', (select table_name from information_schema.tables limit 0,1))#

나는 마크툽', (select table_name from information_schema.tables limit 0,1))#라고 입력을 하였고

다음과 같이 나왔다.

[시작행]을 1씩 늘려가면서 해보았다.

노가다 하다가 많이 보던 테이블 명이라(이미 이전 문제에서 사용하던 DB랑 똑같음) users에 중요한 정보가 있을거 같아 users 테이블에 column명을 구하기로 했다.

입력값',

 (select column_name from information_schema.columns where table_name='users'limit 0,1))#

입력하니

다음과 같이 나왔다 이전과 똑같은 DB를 사용하는 거 같으니 id, login, password을 출력해 보기로 했다.

입력값', (select login from users limit 0,1))#

입력하면 다음과 같이 나오는데 우리가 알아볼것은 여러가지이므로 여러가지 컬럼을 한 줄에 출력하기 위해 concat을 사용하기로 했다.

-> 입력값', (select concat(id, login, password) from users limit 0,1))#

그랬더니

limit 2,1 부분에는 아무것도 나오지 않았다. 이를 통해 users에 있는 계정은 2개고 A.I.M과 bee라는 것을 알았다.

 

난이도 -  (중, 상)

난이도 중, 상에 sql injection이 먹히는지 확인하기 위해 '를 넣었는데 

다음과 같이 나왔다. 특수문자가 먹히지 않는 것 같다.

이를 확인하기 위해 sqli_7.php 페이지에 들어갔다.

페이지를 확이하니 (중)단계에서는 sqli_check_1 함수가 (상) 단계에선는 sqli_check_3가 적용되어 있었다.

sqli_check_1은 addslashes 함수를 사용하였다.

1. addslashes : ', ", \ 등을 데이터가 아닌 제어문자롤 인식하기에 슬래시로 이스케이프 해줌

(<-> stripslashes : \'. \", \\로 저장되어 있는 값에서 \를 제거하고 보여줌)

sqli_check_3은 sqli_check_2와 동일하게 mysql_real_escape_string 함수가 쓰였다.

2. mysql_real_escape_string : SQL 명령문에 사용되는 문자열에서 특수 문자를 회피시켜주는 함수

 

반응형

'웹해킹 > bee-box' 카테고리의 다른 글

SQL Injection - Blind - Time Based  (0) 2019.08.06
Blind SQL Injection - Boolean Based  (0) 2019.08.05
SQL-Injection - Login Form/Hero  (0) 2019.08.04
SQL Injection(AJAX/JSON/JQuery)  (0) 2019.08.03
SQL-Injection(POST/Select)  (0) 2019.08.02