[10] Paros, Proxy, url 파라미터 변조

|


- 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 값 변조를 통한 시스템 파일 접근

 

 

 

And


Linux swap 메모리 추가

|


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 의 정보 삭제

 

 

 

And


[09] php 게시판 생성, 비정상적으로 게시글 입력, 게시판 출력

|


- 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>

 


 

And