HW_chick hacker
웹 개발 및 SQL Injection - 개발 및 DB연동 (1) 본문
- Node.js를 이용해 웹 페이지 제작 후 SQL Injection을 이용한 테이블 삭제
1. Node.JS + MySQL을 이용하여 간단한 웹 페이지 제작(시큐어코딩 x)
2. form, input, button 태그 활용
3. 웹서버 오픈을 위한 Express 모듈 활용 및 Mysql DB 연동
4. 다중쿼리 설정
5. SQL Injection을 활용한 DROP TABLE 사용
1. 웹 서버 구축 - 프론트엔드
기능 구현: 이름, 주소 입력란을 만들어 데이터를 제출하는 형식으로 만들기

- login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>My To-Do App</h2>
<form action="/login" method="post">
이름 <input type="text" name="id"><br>
주소 <input type="text" name="address"><br>
<button type="submit">로그인</button>
</form>
</body>
</html>
-> 힌트에서 <form>, <input>, <button> 기능을 활용
<form> 태그
-> 웹 페이지에서의 입력 양식을 의미 하며 실제로 백엔드 코드와 함께 <form>을 사용하기 위해서는 속성을 사용한다
- <input> 태그
-> <form>태그 안에서 실제로 사용자가 양식을 입력하기 위한 태그이다.
- <button> 태그
-> 버튼 양식을 만드는 태그이다.
-> 우리가 만드는 코드는 백엔드로 입력값을 제출하기위해 "submit" type을 활용해 양식 제출용 버튼을 사용한다.
2. 웹 서버 구축 - 백엔드
백엔드 서버를 만들어 웹 페이지 구축을 위해 Node.js코드를 활용하였다.
Node.js를 활용하기 위해 중요 소프트웨어인 npm을 먼저 설치 후 프레임 워크를 이용하여 웹 서버를 구축해 보았다.
- npm
-> npm(노드 패키지 매니저/Node Package Manager)로 자바스크립트 프로그래밍 언어를 위한 패키지관리자이다.
npm install express fs path body-parser
- express
-> Node.js를 이용하여 웹 서비스를 쉽게 개발하게 할 수 있는 프레임 워크이다. API서버를 구축하는데 많이 쓰인다.
- fs
-> 파일 입출력 처리 모듈
- path
-> 디렉토리의 경로를 다룸
- bodyparser
-> 클라이언트 POER request data의 body로부터 파라미터를 편리하게 추출
- index.js
var express = require('express');
var fs = require('fs');
var path = require('path');
var bodyparser = require('body-parser');
var app = express()
app.use(bodyparser.json()) //'application/json' 방식의 Content-Type 데이터를 받음
app.use(bodyparser.urlencoded({extended: true})) //내부 qs library를 사용하여 URL-encoded data를 파싱
app.use(express.json())
app.get("/", (req,res) => {
res.sendFile(__dirname + "/login.html")
})
//'login.html'경로의 디렉터리 파일을 보여줌
app.post("/login", (req,res) =>{
var id = req.body.id; // 요청 받은 'name = id' 값을 id로 지정
var address = req.body.address; // 요청 받은 'name = address' 값을 address로 지정
})
var port = 3000
app.listen(port, () => {
console.log("Server listening on 3000 port",port)
})
// 3000번 포트를 사용하여 웹 페이지 연결
3. Node.js + Mysql DB연동
Mysql을 활용하여 DB연동을 위해 Npm기능에서 Mysql 모듈을 설치해준다.
npm install mysql
- package.json

-> 지금까지 설치한 프레임워크를 확인활수 있으며, mysql은 2.18.1버전 모듈이 설치 됨을 확인함.
- index.js
var express = require('express');
var fs = require('fs');
var path = require('path');
var bodyparser = require('body-parser');
var mysql = require('mysql');
var con = mysql.createConnection({
host: "127.0.0.1",
port: "3306",
user: "root",
password: "1234",
database: "mydb",
});
con.connect();
-> mysql 모듈 사용 할 것을 지정
-> mysql을 사용하는 host, port, user, password, database가 무엇인지 DB연동값이 일치해야 한다.
- index.js
var express = require('express') //express: API서버를 구축하는데 많이 사용하는 프레임워크
var fs = require('fs') //fs: 파일 입출력 처리 모듈
var path = require('path') //path: 디렉토리의 경로를 다룸
var mysql = require('mysql');
var bodyparser = require('body-parser'); //bodyparser: 클라이언트 POST request data의 body로부터 파라미터를 편리하게 추출
const { strictEqual } = require('assert');
var app = express()
app.use(bodyparser.json()) //'application/json' 방식의 Content-Type 데이터를 받음
app.use(bodyparser.urlencoded({extended: true})) //내부 qs library를 사용하여 URL-encoded data를 파싱
app.use(express.json())
var con = mysql.createConnection({
host: "127.0.0.1",
port: "3306",
user: "root",
password: "1234",
database: "mydb",
});
con.connect();
app.get("/", (req,res) => {
res.sendFile(__dirname + "/login.html")
}) //'login.html'경로의 디렉터리 파일을 보여줌
app.post("/login", (req,res) =>{
var id = req.body.id;
var address = req.body.address;
var sql = `insert into mydb.customers (name, address) VALUES ('${id}', '${address}')`;
con.query(sql, (error,result,fields) => {
if (error) throw error;
console.log(result);
})
})
var port = 3000
app.listen(port, () => {
console.log("Server listening on 3000 port",port)
})
-> insert 구문 사용 하여 웹페이지 로그인 시 이름, 주소가 적절히 데이터에 쌓이도록 작성



'Activity > Hawkis' 카테고리의 다른 글
| Plz Recovery - CTF문제 (0) | 2023.07.05 |
|---|---|
| babyforms, babysheet - CTF문제 (0) | 2023.07.05 |
| 과유불급 문제 - CTF문제 (0) | 2023.06.07 |
| 웹 개발 및 SQL Injection - SQL Injection (2) (0) | 2023.02.04 |
| 어셈블리어 - 이름 출력 (0) | 2023.01.08 |