DB는 데이터를 관리하는 곳으로. 엑셀 프로그램과 유사하다.
[구조]
엑셀과 비교하면 구조는 다음과 같다.
Database : 엑셀 파일
Table : 엑셀 시트
Column : 열, 데이터 종류, 카테고리, 세로 데이터
예시) 순번, 이름, 점수 등등
Row : 행, 가로데이터

[phpMyAdmin]
mySql이라는 DB를 웹페이지에서 관리할 수 있게한 시스템
로그인 시 DB의 계정으로 접속하면 된다.
예) admin / student1234
DB생성하기 : 새로운 (선택)
새 테이블 만들기 : 다음 예시와 같이 설정한다.
이름, 종류, 길이(값)
idx int(숫자) 10 >> 인덱스 : 프라이머리 AI(오토인크리먼트, 자동 늘려주겠다) 체크
name varchar(가변적인 문자) 20
score varchar 20
pass varchar 20
데이터 넣기 : 삽입
idx는 알아서 숫자가 늘어나니 비워둔다. (입력하지 않아도 된다.)
name, score, pass 등에는 데이터를 입력한다.
[SQL]
SQL은 WAS가 DB랑 대화하는 언어다.
위와같은 GUI 말고, 코드로 대화하는 방식이라 몇 가지 명령어를 알아야 한다.
1. select
: 데이터를 가져온다.
select [칼럼 이름] from [테이블 이름]
의 방식으로 사용한다.
예시) select name,pass from test_table
이렇게 치면 결과값이 나온다.
2. insert
: 데이터를 넣는 명령어
회원가입이나 게시판에 글 작성 등 저장할 때 사용한다.
insert into [테이블 이름] (컬럼 이름) value (값)
의 방식으로 사용한다.
예시) insert into test_table (name, score, pass) value ('doldol', '80', '2222')
혹은 컬럼 이름 없이 다음과 같이 바로 명령할 수도 있다.
insert into test_table (NULL, 'dalgdol', '70', '3333')
3. 정교하게 select 하기 : where
구체적으로 내가 원하는 데이터를 가져오기 위해서 사용한다.
사용방법은 select 맨 마지막에 조건을 붙여주면 된다.
예시) select Column from [테이블 이름] where [조건]
조건이 name='pooh' 라면
select name from test_table where name='pooh'
이름과 비밀번호를 가져오고 싶은데, 이름이 pooh인 것만 찾을 때는
select name,pass from test_table where name='pooh'
조건을 다음과 같이 여러개를 쓸 수도 있다.
name='pooh' and pass='1234'
참고로 and는 앞과 뒤를 동시에 만족시켜야 작동한다.
반면 or은 앞이나 뒤 중 하나만 맞아도 데이터를 가져온다.
[php - mysql 연동하기]
WAS가 DB와 통신하기 위해선, DB의 ID, PW를 WAS가 알고 있어야 한다.
그리고 SQL언어로 말을 걸어줘야 한다.
php 코드에 이를 적어준다.
로그인에 성공하게 되면, 출입이 가능한 티켓을 받게된다. (커넥터)
sql 언어를 사용할 때는 이 티켓을 사용하여 질문한다.
티켓을 잘 받았는지 체크한다.
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'student1234');
define('DB_NAME', 'test');
$db_conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if($db_conn){
echo "DB Connect OK";
}else{
echo "DB Connect Fail"
}
?>
$db_conn = 변수에 넣어준다. 그래야 티켓을 버리지 않고 계속 쓸 수 있다.
WAS는 DB의 아이디와, 비밀번호가 있을 수 밖에 없다. (DB와 통신하기 위하여)
따라서 웹서버의 shell이 털렸다는건 DB도 같이 털렸다는 것을 의미한다.
반대로 해커 입장에서 web shell을 따면 가장 먼저 해야할 것은 DB추출이다.
[select 하는 방법]
우리가 사용할 sql을 선언해준다.
$sql = "select * from test_table";
result = mysqli_query($db_conn, $sql);
Vardump로 result를 호출하면 다음과 같은 선물 꾸러미를 준다.

위 결과를 row에 담고, fetch를 통해 데이터를 꺼낸다. (fetch는 맨 위에 순서부터 하나씩 꺼내준다.)
$row = mysqli_fetch_array($result);
언급했듯 fetch는 하나의 행만 가져온다.
row에서 이름만 가져오는 방법은 다음과 같이 한다.
echo "Name :" . $row['name'];
돌돌의 비번은 다음과 같이 가져온다.
$sql = "select * from test_table where name='doldol'";
~~
echo "Pass :" . $row['pass'];
DB에 저장된 비밀번호를 가져오는 방법
$db_pass = $row['pass'];
if ($_POST['userpass'] == $db_pass){
// login OK
}
[]요 딱딱이 괄호는,
오브젝트, 선물꾸러미, 객체, 사전형타입의 배열, 구조화되어있는 데이터 패키지를 다 담을 수 있다.
따라서 컬럼 정보를 가져오려면 컬럼 이름을 쓰는 것이다.
$row['pass'];
이런 방식으로!
'모의해킹 공부하기 > 모의해킹 수업 복습' 카테고리의 다른 글
| [6주차] SQL Injection으로 데이터 추출하기 (UNION SQL Injection) (1) | 2023.12.04 |
|---|---|
| [5주차] SQL Injection으로 인증(Authentication) 우회(Bypass) (0) | 2023.12.04 |
| [4주차] Burp Suite 기본 사용 방법 (0) | 2023.11.22 |
| [3주차] 로그인 (인증과 식별, 식별/인증 동시), 로그인 유지(쿠키와 세션) (0) | 2023.11.12 |
| [1주차] 웹 서버의 이해 (Web Server, Web Root 경로, WAS, 도커, PHP) (0) | 2023.10.27 |