Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

HW_chick hacker

웹 개발 및 SQL Injection - 개발 및 DB연동 (1) 본문

Activity/Hawkis

웹 개발 및 SQL Injection - 개발 및 DB연동 (1)

{{HW}} 2023. 2. 3. 15:56

- 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