이번에는 블로그 방식의 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 |