Blind Elephant: Web Application Fingerprinting & Vulnerability
Web vulnerability seminar2
-
Upload
sakuya-izayoi -
Category
Art & Photos
-
view
273 -
download
0
Transcript of Web vulnerability seminar2
Web vulnerability seminar
from make to exploit(Login with Database)
Contents$ Homework Solution$ Database?$ Manage Database$ Flowchart
Login page?$ 어떤 형식이건 값을 저장$ User 의 입력과 해당 값이 맞는지 비교
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;
}
Login page<?
$id = "justlife3";$pass = "password";if($id == $_GET[id] && $pass == $_GET[pw])echo "Hello!";else echo "You are not justlife3";
?>
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);… 이후 비교
}
DBColumn
Table
Row
DB
기본 패스워드 : apmsetup
mysql –uroot -p
Default password 극혐$ UPDATE mysql.user SET
password=passowrd(‘ 사용할암호’ ) WHERE user=‘root’
$ 뜻을 알건 모르건 일단 바꾸고 봅시다 ..
DB$ 어떤 db 가 있나 보자
> show databases;
$ db 를 사용하기 위해 선택하자 .> use database_name
>ex) use mysql;
내 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));
값을 넣어보자 .$ 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);
연달아서 입력$ INSERT INTO member values
('sakuya','1234','SAKUYA'),('fear2fear','4321','131ackcon'),('commio0','bluebit','redbit'),('python','URYY',user_id),('ruby',abs(-1234),'sapphire');
$ 함수 , 컬럼도 가능함$ Mysql 주석 : #, --, /**/
조회$ 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’;
결과
가입 페이지 만들기$ 가입 페이지의 개략적인 형태<?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.’)’
?>
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”;
}?>
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
로그인 페이지 만들기$ 로그인 페이지의 개략적인 형태<?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?”
?>
$rowmysql_fetch_array?
$row = array(‘user_id’ =>’1’‘user_pw’ => ‘2’‘nickname’ =>’3’);
$row = array(‘1’,’2’,’3’);
PHP array = Python dictionary + list
PHP??
프로그램 !int main(){
if(login())printf(“HELLO!”);
elseprintf(“NO..”);
}
웹 사이트에 들어갈때int main(){
if(login())printf(“HELLO!”);
elseprintf(“NO..”);
}
유저에게 입력을 받자 .$ GET$ POST$ COOKIE…
GET$ GET
페이지 ? 변수 1= 값 & 변수 2= 값./program 1 test
GET 예제<?
$user_input = $_GET[inp];echo “Hello! ”.$user_input;
?>
Example
<?$post_value = $_POST[‘ID’];echo $post_value;
?>
POST 로 보내기 ?$ 복잡한걸 손으로 직접쓰기$ 폼 형태를 사용<form action=‘index.php‘ method='POST' ><input type=‘text' name=‘value'></form>
추후 있을 문제를 통해서 이야기 하도록 합시다 !
Cookie$ 웹서버에 접근한 흔적
> 사용자가 누구인지 ..
$ 주로 서버에서 세팅해 주는 경우가 많음 .
$ 웹 서버마다 다른 값을 가짐 !
Cookie 확인 방법
Cookie 변경방법
웹 사이트에 들어갈때http://facebook.com/login.php?id=admin&pw=admin1234
if…http://facebook.com/login.php?id=admin’&pw=admin1234
이상한 점 ? 예상되는 결과 ?
Injection?
그래서 ?
결론$ 무언가의 양식에 맞춰서 원하는 값을 넣는 것 .
$ SQL injection => SQL 구문에 맞게$ HTTP Header injection => HTTP 에 맞게$ Mail Header injection => Header 에 맞게
과제각자 만든 로그인 페이지 ( 혹은 게시판 ) 에 Injection 공격을 성공 시킬 것 .
-php.ini 파일의 magic_quote_gpc 의 옵션을 off 로 하고 실습할 것 .
+ injection 방지 방법 및 우회방법 조사5/17 23:59 까지 [email protected]