- 2015.03.20
임시 강사 수업
1. 사전 준비
1) paros 다운로드
http://sourceforge.net/projects/paros/files/Paros/Version%203.2.13/
exe. zip 파일 모두 받기
2) java se jdk 다운로드 - 32bit 용
http://oracle.com/technetwork/java/index.html
실습에선 7 버전을 사용
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
3) Paros - Proxy 설정
C:Program Files (x86)Javajdk1.7.0_75 에 java가 정상적으로 설치 되었는지 확인
시스템 - 고급 시스템 설정 - 고급 - 환경 변수 - Path
- C:Program Files (x86)Javajdk1.7.0_75bin; - 확인 - 확인 - 확인
in cmd
java -version 으로 자바가 정상 설치 되었는지 확인
바탕화면의 바로가기 실행했을 때 경로가 다르게 나왔다면
C:Program Files (x86)Javajdk1.7.0_75binjavaw.exe 를 선택 해준다.
Paros에서 Tools - option - Local proxy 에서 localhost / 8080 인지를 확인
웹 브라우저 인터넷 옵션 - 연결 - LAN 설정 - 프록시서버 에 127.0.0.1 / 8080 기재 후 확인
이제 웹브라우저에서 사이트 이동을 하면 Paros에 목록이 뜬다.
4)
우측 메뉴 - Trap 아래쪽에 Trap request, Trap response 를 선택하면
Paros 에서 Continue를 누르며 웹페이지 이동하는데, 이 때 단계별로 내가 제어 가능하다.
2. URL 파라미터 변조
1) 동적 방식
원본
board/filedownload.asp?style=pds_etc&filename=bun.hwp&b_idx=1070
변조
board/filedownload.asp?style=pds_etc&filename=.....변조
2) Null Byte Injection
file name 뒤에 Null 값이 있는 것을 참조하여
../../../../etc/passwd NULL.jpg 등의 방법을 통해 시스템 파일을 다운로드
3) 멀티 파라미터 변조
4) 히스토리 파일을 통한 계정과 암호추출
각 사용자의 .bash_history 를 다운받아 분석하여 공격
5) 웹 로그를 통한 관리자 권한 획득
../../../../usr/...log/ 등을 통해 log를 보면
Get 방식이라면 아래와 같이 로그가 남음.
... /manage/login?&id=admin&pw=1234 ...
6) HTTP Header 값 변조를 통한 시스템 파일 접근
'Study > 웹보안' 카테고리의 다른 글
[11] XSS, webgoat, DOM XSS, AJAX Security (0) | 2015.05.13 |
---|---|
[09] php 게시판 생성, 비정상적으로 게시글 입력, 게시판 출력 (0) | 2015.05.07 |
[08] cookie 및 session 이용한 인증, SQL Injection, secure 코딩 (0) | 2015.05.07 |
[07] php 셋팅, mysql 연동, 계정 인증, Web 인증방식, cookie 이용 인증 및 logout (0) | 2015.05.07 |
[06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더 (0) | 2015.05.07 |
Oracle XE를 리눅스에 설치하여 실습하려는데 SWAP 메모리 공간이 부족해서 설치가 안되었다.
그래서 SWAP 공간을 늘려주는 방법을 구글링을 통해 실행하였다.
출처 : http://faq.hostway.co.kr/?mid=Linux_ETC&page=8&document_srl=1443
swap영여을 확보하기 위해서는 2가지 방법이 있다.
- Swap 파일 생성
- Swap 파티션 구성
그 중 이 글은 위의 방법을 이용하는 글이다.
1. SWAP 파일 생성
1) 메모리 용량 확인
# swapon –s, free
2) swap 메모리로 사용할 파일 생성 (1G 생성)
# dd if=/dev/zero of=/home/swapfile bs=1024 count=1000000
(/home/swapfile 로 만들었다.)
3) swap 파일로 포맷
mkswap /home/swapfile
4) swap 파일을 swap 공간으로 활성화
swapon /home/swapfile
5) 부팅 시 활성화 되도록 rc.local에 등록
# vi /etc/rc.d/rc.local
9 swapon /home/swapfile
혹은
재부팅 후에도 적용하려면 /etc/fstab에 아래의 값을 추가해준다.
# vi /etc/fstab
/swapfile swap swap defaults 1 1
(출처 : http://egloos.zum.com/zicman/v/3032298)
2. SWAP 공간 삭제
더이상 필요 없을 시엔 삭제하면 된다.
1) swap 비활성화
# swapoff /home/swapfile
2) 파일 삭제
#rm /home/swapfile
3) rc.local 정보 삭제
혹은 /etc/fstab 의 정보 삭제
'Linux' 카테고리의 다른 글
운영중인 LVM에 용량 추가하기 (0) | 2015.07.08 |
---|---|
간단한 bash쉘 스크립트 작성 요령 (0) | 2015.04.09 |
리눅스(CentOS)에서 토렌트 사용하기 (0) | 2015.04.04 |
리눅스(CentOS 6.6)에서 윈도우 공유폴더 마운트하기 (0) | 2015.04.04 |
- 2015.03.19
Remark)
1) Client -- Server <--> WebApplication
2) 웹 페이지가 없어도 get방식, post방식 등으로 정보를 전달하여 Server에서 처리할 수 있게 할 수 있다.
오늘은 php를 이용한 게시판 만들기 실습
1. mysql 셋팅
# mysql -u root -p
mysql> create database bbs;
1) 테이블 생성
num int
name varchar(20)
subject varchar(50)
body text
mysql> use bbs;
mysql> create table board( num int NOT NULL auto_increment, name varchar(20), subject varchar(50), body text, primary key(num) ); # num 부분은 입력하지 않아도 자동으로 올라간다.
mysql> desc board;
mysql> insert into board(name, subject, body ) values( 'admin', 'test', 'testing' );
mysql> select * from board;
2) 게시판 페이지 작성 (write.php)
[ write.php ]
<html>
<head>
</head>
<body>
<form method=post action=write_ok.php>
<table width=400 border=0 bgcolor=#c0c0c0>
<tr>
<td width=60 align=left> name </td>
<td align=left>
<input type=text name=name size=20>
</td>
</tr>
<tr>
<td width=60 align=left> subject </td>
<td align=left>
<input type=text name=subject size=50>
</td>
</tr>
<tr>
<td width=60 align=left> body </td>
<td align=left>
<textarea name=body cols=52 row=100></textarea>
</td>
</tr>
<tr>
<td colspan=10 align=right>
<input type=submit value="write">
</td>
</tr>
</table>
</form>
</body>
</html>
3) write_ok.php
- mysql_affected_rows()
=> 최근에 실행 된 쿼리의 변경 행 개수를 얻어옴
[ write_ok.php ]
<?
$DB = mysql_connect( 'localhost', 'root', 'a' );
mysql_select_db( 'bbs', $DB );
$sql = "INSERT INTO board( name, subject, body) VALUES( '$name', '$subject', '$body' )";
$result = mysql_query( $sql );
$count = mysql_affected_rows();
if ( $count == 1 ) {
echo "write done... ";
}
else {
echo "write failed...";
}
?>
4) 비 정상적인 방법으로 mysql에 게시글 입력하기
* Get 방식
http://192.168.133.142/write_ok.php?name=attacker&subject=attack start&abody=<script> alert('xss'); </script>
=> mysql 에선 body 내용이 안보인다.?
* Post 방식
<form method=POST action=http://192.168.133.142/write_ok.php>
<input type=hidden name=name value=attack2>
<input type=hidden name=subject value=attack start>
<input type=hidden name=body value=sending post test>
<input type=submit value=send>
</form>
이 태그를 javascript를 통해 전달한다. 단 엔터가 없이 편집,,
javascript:document.write("<form method=POST action=http://192.168.133.142/write_ok.php><input type=hidden name=name value=attack2><input type=hidden name=subject value=attack start><input type=hidden name=body value=sending post test><input type=submit value=send></form>");
=> mysql에선 항목 별로 띄어쓰기 뒤쪽은 무시된 것으로 뜸...?
웹 브라우저 화면은 클라이언트에서 실행되고 있는 화면이므로
절대 서버에서 동작하는 코드가 아니다.
즉, 입력 폼 없이도 데이터 전송은 가능하다.
서버 웹 어플리케이션은 클라이언트로부터 전달받은 데이터를 처리
입력 폼은 사용자로부터 값을 입력받아 서버에 전달해 주기 위한 용도
입력 폼 없이도 얼마든지 서버로 데이터를 전달할 수 있음
5) 게시판 목록 및 게시글 확인 페이지
[ list.php ]
<?
$DB = mysql_connect( 'localhost', 'root', 'a' );
mysql_select_db( 'bbs', $DB );
$sql = "select num, name, subject from board";
$result = mysql_query( $sql );
# $line = mysql_num_rows( $result ); # line 수 확인
# echo $line; # 정상적으로 확인되는지 테스트용
?>
<html>
<head></head>
<style>
p { color: white; }
</style>
<body>
<table width=600 border=0>
<tr height=20 bgcolor=#5e5e5e>
<td width=35 align=center>
<p> num </p>
</td>
<td width=300 align=center>
<p> subject </p>
</td>
<td width=50 align=center>
<p> name </p>
</td>
</tr>
<?
while( $row = mysql_fetch_array( $result ) ) {
?>
<tr>
<td height=20 align=center>
<?=$row[num]?>
</td>
<td heignt=20 align=center>
<a href="view.php?num=<?=$row[num]?>"> <?=$row[subject]?>
</td>
<td height=20 align=center>
<?=$row[name]?>
</td>
</tr>
<?
}
?>
</table>
</body>
</html>
[ view.php ]
<?
$DB = mysql_connect( 'localhost', 'root', 'a');
mysql_select_db( 'bbs', $DB );
$sql = "select * from board where num=$num";
$result = mysql_query( $sql );
$row = mysql_fetch_array( $result );
?>
<html>
<head></head>
<body>
<table width=500 border=0>
<tr height=20 bgcolor=#5e5e5e>
<td width=300 align=center>
<p><?=$row[subject]?></p>
</td>
</tr>
<tr height=20>
<td width=300 align=left>
<?=$row[body]?>
</td>
</tr>
</table>
</body>
</html>
'Study > 웹보안' 카테고리의 다른 글
[11] XSS, webgoat, DOM XSS, AJAX Security (0) | 2015.05.13 |
---|---|
[10] Paros, Proxy, url 파라미터 변조 (0) | 2015.05.13 |
[08] cookie 및 session 이용한 인증, SQL Injection, secure 코딩 (0) | 2015.05.07 |
[07] php 셋팅, mysql 연동, 계정 인증, Web 인증방식, cookie 이용 인증 및 logout (0) | 2015.05.07 |
[06] php 및 mysql 설치, 인증, SQL, get & post, http 헤더 (0) | 2015.05.07 |