web vulnerability seminar2

38
Web vulnerability seminar from make to exploit (Login with Database)

Upload: sakuya-izayoi

Post on 15-Feb-2017

273 views

Category:

Art & Photos


0 download

TRANSCRIPT

Page 1: Web vulnerability seminar2

Web vulnerability seminar

from make to exploit(Login with Database)

Page 2: Web vulnerability seminar2

Contents$ Homework Solution$ Database?$ Manage Database$ Flowchart

Page 3: Web vulnerability seminar2

Login page?$ 어떤 형식이건 값을 저장$ User 의 입력과 해당 값이 맞는지 비교

Page 4: Web vulnerability seminar2

Login page (binary) int main(){

char* id = (char*)malloc(20);char* pw = (char*)malloc(20);scanf(“%s”,&id);scanf(“%s”,&pw);if(id == “admin” && pw == “admin”)printf(“Welcome!!\n”);elseprintf(“Not accept.\n”);return 0;

}

Page 5: Web vulnerability seminar2

Login page<?

$id = "justlife3";$pass = "password";if($id == $_GET[id] && $pass == $_GET[pw])echo "Hello!";else echo "You are not justlife3";

?>

Page 6: Web vulnerability seminar2

Login page (file)int main(){

FILE* f = fopen(“./account”,”r”);char * data;fseek(f, 0, SEEK_END);int file_size = ftell(f);fseek(f, 0, SEEK_SET);

data = (char*)malloc(file_size);fread(data,1,file_size,f);… 이후 비교

}

Page 7: Web vulnerability seminar2

DBColumn

Table

Row

Page 8: Web vulnerability seminar2

DB

기본 패스워드 : apmsetup

mysql –uroot -p

Page 9: Web vulnerability seminar2

Default password 극혐$ UPDATE mysql.user SET

password=passowrd(‘ 사용할암호’ ) WHERE user=‘root’

$ 뜻을 알건 모르건 일단 바꾸고 봅시다 ..

Page 10: Web vulnerability seminar2

DB$ 어떤 db 가 있나 보자

> show databases;

$ db 를 사용하기 위해 선택하자 .> use database_name

>ex) use mysql;

Page 11: Web vulnerability seminar2

내 DB 만들기$ CREATE DATABASE db_name

> CREATE DATABASE webhacking;

$ CREATE TABLE table_name(column name type option,…)> CREATE TABLE member(

user_id varchar(20) NOT NULL,user_pw varchar(20) NOT NULL,nickname varchar(20),PRIMARY KEY(user_id));

Page 12: Web vulnerability seminar2
Page 13: Web vulnerability seminar2

값을 넣어보자 .$ INSERT INTO tablename values(a1,a2..);

> INSERT INTO account values(‘sakuya’,’1234’,’SAKUYA’);

$ INSERT INTO tablename(c1,c2..) values(a1,a2..);

> INSERT INTO member(user_id, user_pw, nickname) value(‘sakuya’,1234 , user_id);

Page 14: Web vulnerability seminar2

연달아서 입력$ INSERT INTO member values

('sakuya','1234','SAKUYA'),('fear2fear','4321','131ackcon'),('commio0','bluebit','redbit'),('python','URYY',user_id),('ruby',abs(-1234),'sapphire');

$ 함수 , 컬럼도 가능함$ Mysql 주석 : #, --, /**/

Page 15: Web vulnerability seminar2

조회$ SELECT column FROM tablename

WHERE condition> SELECT nickname FROM member WHERE

user_id=‘sakuya’;

$ SELECT * FROM tablename WHERE contidion> SELECT * FROM member WHERE

user_id=‘sakuya’;

Page 16: Web vulnerability seminar2

결과

Page 17: Web vulnerability seminar2

가입 페이지 만들기$ 가입 페이지의 개략적인 형태<?include ‘db_conn.php’

$inp_id = $_POST[id];$inp_pw= $_POST[pw];$inp_nick = $_POST[nick];

//Send to Mysql$query = ‘INSERT INTO account values(‘.$inp_id.’,’.$inp_pw.’,’.$inp_nick.’)’

?>

Page 18: Web vulnerability seminar2

Login page<?

$f = fopen(“./account”,”r”);$data = fread($f,filesize($f));$idx = strpos($data,$_GET[‘id’]);if($idx !== true)echo “Not Exist.”;else{if(parsing and compare)echo “HIHIHI”;

}?>

Page 19: Web vulnerability seminar2

PHP + SQL!<?

$ip = "127.0.0.1"; // 혹은 접속할 주소$user = "root";$pass = “db_pass";$db = "webhacking";$conn = @mysql_connect($ip,$user,$pass);$dbs = @mysql_select_db($db);

?>

db_conn.php

Page 20: Web vulnerability seminar2

로그인 페이지 만들기$ 로그인 페이지의 개략적인 형태<?include ‘db_conn.php’

$inp_id = $_GET[id];$inp_pw= $_GET[pw];

$query = ‘SELECT * FROM account WHERE user_id =’.$inp_id.’ and ‘.$inp_pw;$row =mysql_fetch_array(mysql_query($query,$conn))if($row)echo “Hello, ”$row[user_id];else echo “Who are you?”

?>

Page 21: Web vulnerability seminar2

$rowmysql_fetch_array?

$row = array(‘user_id’ =>’1’‘user_pw’ => ‘2’‘nickname’ =>’3’);

$row = array(‘1’,’2’,’3’);

PHP array = Python dictionary + list

Page 22: Web vulnerability seminar2

PHP??

Page 23: Web vulnerability seminar2

프로그램 !int main(){

if(login())printf(“HELLO!”);

elseprintf(“NO..”);

}

Page 24: Web vulnerability seminar2

웹 사이트에 들어갈때int main(){

if(login())printf(“HELLO!”);

elseprintf(“NO..”);

}

Page 25: Web vulnerability seminar2

유저에게 입력을 받자 .$ GET$ POST$ COOKIE…

Page 26: Web vulnerability seminar2

GET$ GET

페이지 ? 변수 1= 값 & 변수 2= 값./program 1 test

Page 27: Web vulnerability seminar2

GET 예제<?

$user_input = $_GET[inp];echo “Hello! ”.$user_input;

?>

Page 28: Web vulnerability seminar2

Example

<?$post_value = $_POST[‘ID’];echo $post_value;

?>

Page 29: Web vulnerability seminar2

POST 로 보내기 ?$ 복잡한걸 손으로 직접쓰기$ 폼 형태를 사용<form action=‘index.php‘ method='POST' ><input type=‘text' name=‘value'></form>

추후 있을 문제를 통해서 이야기 하도록 합시다 !

Page 30: Web vulnerability seminar2

Cookie$ 웹서버에 접근한 흔적

> 사용자가 누구인지 ..

$ 주로 서버에서 세팅해 주는 경우가 많음 .

$ 웹 서버마다 다른 값을 가짐 !

Page 31: Web vulnerability seminar2

Cookie 확인 방법

Page 32: Web vulnerability seminar2

Cookie 변경방법

Page 33: Web vulnerability seminar2

웹 사이트에 들어갈때http://facebook.com/login.php?id=admin&pw=admin1234

Page 34: Web vulnerability seminar2

if…http://facebook.com/login.php?id=admin’&pw=admin1234

이상한 점 ? 예상되는 결과 ?

Page 35: Web vulnerability seminar2

Injection?

Page 36: Web vulnerability seminar2

그래서 ?

Page 37: Web vulnerability seminar2

결론$ 무언가의 양식에 맞춰서 원하는 값을 넣는 것 .

$ SQL injection => SQL 구문에 맞게$ HTTP Header injection => HTTP 에 맞게$ Mail Header injection => Header 에 맞게

Page 38: Web vulnerability seminar2

과제각자 만든 로그인 페이지 ( 혹은 게시판 ) 에 Injection 공격을 성공 시킬 것 .

-php.ini 파일의 magic_quote_gpc 의 옵션을 off 로 하고 실습할 것 .

+ injection 방지 방법 및 우회방법 조사5/17 23:59 까지 [email protected]