DAY27
DAY27

웹의 취약점을 분석하여 업로드 페이지를 보안해보자

보통 서버는 80, 443만 열려있다.
웹의 취약점
> 로그인 부분의 무차별 대입공격 가능
> CSRF (요청변조)
> XSS (게시판에 HTML 코드 삽입)

예) hanatour.com naeiltour.co.kr
서버에 침투하는 방법은?

웹쉘 제작
웹에서 작동하는 악성코드( php,asp,jsp,py...)

업로드 자동 공격 코드 만들기
192.168.0.127의 업로드 취약점은 어디인가?
board : 123456 root : 123456

192.168.0.127 : 23

1. 공격
http://192.168.0.127/board/board.cgi?;=form (특이한 게시판)
본인의 이니셜로 된 웹쉘만들기 
jyb.php업로드
(파일 이름을 작성해야 업로드가 된다 !!)
내용상 < ?php 대신 < ?로 바꿔도 업로드가 되는지 확인한다
경로 : cd /usr/apache/local/board/

2. 보안
업로드 실패 원인을 찾고 업로드 가능하도록 조치하라
[쿨보드]
cd /home/board/cool
cat new.html | more (보기)
sz new.html (가져와서 edit+로 확인)
	문제가 되는 내용
	$file_name = substr ( strrchr($up_file_name,"."),1);
	 if ($file_name==php3 || $file_name==html || $file_name==php || $file_name==phtml || $file_name==inc)
	 {
		echo (""
			< script>
			window.alert('확장자가 PHP 스크립트로 등록된 파일은 첨부할 수 없습니다.')
			history.go(-1)
			< /script>
			");
			exit;
	 }

=> 모든 확장자를 가능하도록 설정한 뒤 php3, html, php, phtml, inc만 막은 것
=> 확장자를 변형하면 막을 수 없다. (ex. .PHP로 변경)
=> 보완방법
if($extension == "php" || $extension == "Php" || $extension == "pHp" || $extension == "phP" || $extension == "PHp" || $extension == "PhP" || $extension == "pHP")등 경우의 수를 전부 막아야 한다!

3. 그외 업로드 공격 보안 대책
***파일이 올라간 경로를 알 수 없는 곳에 둔다!
[sboard]
http://192.168.0.127/spboard/board.cgi?id=test&number=2.cgi&file=lsw.Php&action=down_file
	나눠서 읽어보기
	192.168.0.127/sboard/board.cgi?
	id=test&
	number=3.cgi&
	file=lhs.php.txt
	&action=down_file

192.168.0.127/board/board.cgi?;=form
192.168.0.127/~board/cool/new.html?code=test
192.168.0.127/sboard/board.cgi?id=test&page=1&action=view&number=3.cgi&img=no
파일업로드는 가능하지만 파일의 실행위치를 파악하지 못하도록 조치해둠
링크 클릭시 파일 실행은 되지 않음
사진의 실제 저장위치를 파악하는 것이 중요함 > 사진을 업로드하여 위치를 파악할 수 있음
또는 동일한 소스 코드를 다운받아 소스 분석시 파일 저장 위치 파악 가능


업로드된 파일 확인
cd /usr/local/apache/htdocs/spboard/id/test/files/lsw.Php 

=> 사진은 공격이 아니므로 사진을 업로드하면 경로를 알 수 있었다.
(관리자가 생각지 못한 취약점)


< img src="./id/test/files/3.jpg" alt="다운받으시려면 그림 위에서 마우스 오른쪽 버튼을 누르신뒤 다른이름으로 그림저장(익스플로러).. Save Images As(넷스케이프)를 선택하세요...">

***업로드된 파일을 다른 확장자로 변경하는 등 php코드가 실행되지 않도록 한다.
ex ) action -> download로 변경

Bootstrap Example

그누보드를 사용하여 사이트에 적용된 보안 조치를 분석해보자

보안조치
1. 확장자 차단
2. mime 타입 차단
3. 이중확장자 차단

오픈 소스 게시판
제로보드 > xe1.xpressengine.com
그누보드 > 그누보드
워드프레스 > 킴스보드

xe.st.kr > 제로보드 이용 > win7에서 구현 안됨
sir.st.kr > 그누보드 이용

gnuboard.5.6.9 설치
웹 구축DAY13

---------------------------------------------------------
분석

1. 첨부파일 연결 및 위치 확인
workbench
g5_write_free > wr_file
1 > 첨부파일 있음
0 > 첨부파일 없음

board_file > 첨부파일 저장된 것 확인 가능 > bf_file

2. 사용된 암호화 코드
md5_?_sha1 
파일명_?_?
=> $upload[$i]['file'] = md5(sha1($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);

3.php-x가 붙는 이유?
$filename = preg_replace("/\./(php|pht|phtm|html|cgi|pl|exe|jsp|asp|inc|phar)i", "$0-x", $filename);
//위 문자열이 들어간 파일은 -x를 붙여서 웹경로를 알더라도 실행하지 못하게 함!!

4. 업로드 경로를 다른 곳에 둠
글쓰기페이지는 write.php
form이 없음 > editor_path등을 쓴 것으로 보임
>>common.php, config.php 확인 결과
define('G5_eEDITOR_PATH', G5_PLUGIN_PATH.'/'.G5_EDITOR_DIR);
=> 경로
plugin > editor > cheditor5 > editor.lib.php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 

cd /home/sir/public_html/gnuboard5.6.9/bbs
nano write_update.php
업로드 위치 분석하기!!

=> 진짜업로드 경로는?
find / -name .php 7e~~~.php-x(게시판 이름)
/home/sir/public_html/data/file/free/7e~~~.php-x(게시판이름, 파일)