• Kali Linux 2024.2 설치 (VMware Fusion, Apple Silicon) •
• 웹 해킹 훈련장 172.16.15.116 40080/tcp 대상 공개용 도구 기반의 홈페이지 취약점 점검 실습 (20200507)
• Kali Linux 2020.1b 64bit 설치 설명서 (MS 윈도우 10, VMware 플레이어) (20200325)
• VirtualBox 가상머신으로 GSM CE 6.0.2 설치 설명서 (OpenVAS) (20200125)
• Kali Linux 2019.4 64bit Light 배포판 설치 설명서 (권장) (20191202)
• Kali Linux 2019.3 64bit Large 배포판 설치 및 한글 설정 설명서 (20191129)
• [과제] WH-MissAuth-1 웹해킹훈련장: 접속자 권한인증 후 출력 제어 취약점 (20180619)
• [과제] WH-WebEditor-SE2 웹해킹훈련장: 취약한 PHP 버전에서 원래 파일이름을 저장하는 웹에디터의 취약점을 이용한 시스템 침투 (20170827)
• [과제] WH-FILEDOWN-01 웹해킹훈련장: 파일다운로드로 서버침투 (20170810)
• [과제] WH-COOKIE-02 웹해킹훈련장: 쿠키 오용 취약점 (20170809)
• Apache Tomcat /manager/html 무작위대입공격 도구 작성 - PHP (20170721)
• 칼리 리눅스를 이용한 From SQL Injection to Shell 공략 (20170404)
• 단순한 방어법(../ 제거)의 파일 다운로드 취약점 진단 사례 (20170329)
• WH-WebEditor-CH 라이브 ISO: 이미지 검증 기능을 우회하여 PHP 웹쉘 생성 (20170130)
• 오늘의 웹서버 공격 로그: MySQL 관리 인터페이스 자동탐색 도구 - Jorgee Scanner (20170125)
• WH-WebEditor-GM 라이브 ISO: 이미지 검증 기능을 우회하여 PHP 웹쉘 생성 (20170123)
• 오늘의 웹서버 공격 로그: Apache ProxyAbuse 탐지 시도 (20170122)
• 오늘의 웹서버 공격 로그: Bash 쉘쇼크 취약점을 이용한 Perl Ircbot 삽입 시도 (20170122)
• 오늘의 웹서버 공격 로그: phpMyAdmin 취약점 자동탐색 도구 - ZmEu Scanner (20170121)
• 오늘의 웹서버 공격 로그: 워드프레스 취약점 자동탐색 도구 (20170118)
• WH-PathTrav-01 라이브 ISO: 파일 다운로드 취약점으로 서버 침투 (20170116)
• WH-Webshell-Loc-01 라이브 ISO: 서버 내 웹쉘 저장경로 알아내기 (20170114)
• WH-ImgShell-01 라이브 ISO: 이미지에 덧붙인 웹쉘 취약점 웹해킹훈련장 (20170113)
• SSH 무작위 대입 공격으로 root권한을 탈취한 침해사고 사례 (20170112)
• WH-IllInst-WordPress 워드프레스 웹해킹훈련장 소개 (20170110)
• WH-IllInst-WordPress 워드프레스 웹해킹훈련장 실습 설명서 (20170110)
• MSSQL과 MySQL의 SQL구문삽입을 이용한 OS 명령어 실행 (20170109)
• WH-CommInj-01 원격 운영체제 명령어 삽입 취약점 훈련장(라이브 ISO) 소개 및 실습 설명서 (20170106)
• WH-Deface-01 기능별 권한인증 취약점 훈련장(라이브 ISO) 소개 (20170104)
• WH-Deface-01 웹해킹훈련장 실습 설명서 (20170104)
• WH-Account-01 회원가입 취약점 훈련장(라이브 ISO) 소개 (20170102)
• WH-Account-01 웹해킹훈련장 실습 설명서 (20170103)
• WH-Account-02 회원정보수정 취약점 훈련장(라이브 ISO) 소개 (20170103)
• WH-Account-02 웹해킹훈련장 실습 설명서 (20170104)
• 저장형 XSS 공격을 이용한 홈페이지위변조 공격 사례 (20161231)
• 로그인한 상태에서 웹취약점스캐너의 자동점검 위험성 (20161228)
• DBMS Fingerprinting (데이터베이스 관리시스템 탐지) (20161222)
• FCKeditor를 대상으로 한 자동화 공격툴의 침해사례 (20161220)
• 이중 서버스크립트 혼용을 이용한 웹방화벽/확장자검증 우회 (실제 사례) (20161219)
• HTTP/HTTPS 혼용에 따른 관리자로그인 페이지 접근 우회 (실제 사례) (20161214)
• 경로재지정 취약점: 자바스크립트를 이용한 검증과 그 우회, 그리고 XSS (실제 사례) (20161214)
• 웹해킹 사례: 유명 홈페이지를 악성코드 배포 경유지로... (20161213)
• HTML 삽입, XSS 공격 탐지방법 (20161211)
• 오늘의 웹서버 공격 로그, Axis2, 공개프록시 (20161210)
• 오늘의 웹서버 공격 로그, XML-RPC, Open Proxy (20161208)
• nikto와 owasp-zap 연동 (20161206)
• 미라이 IoT DDoS 봇넷이 사용한 61개 비밀번호 (20161205)
• 오늘의 웹서버 공격 로그, SOAP 원격코드실행, D-Link 명령어 삽입, muieblackcat (20161205)
• 오늘의 웹서버 공격 로그, w00tw00t (DFind) (20161204)
• 기억하기 쉽고 안전한 비밀번호 만들기 (20161203)
• 2016.12.01-02 웹서버 공격 로그, armgg DDoS 악성코드 (20161202)
• KISA의 랜섬웨어 예방 수칙 (20161202)
• WH-DVWA-1.9 Damn Vulnerable Web App 웹해킹훈련장 (20161201)
• DVWA Brute Force 실습 설명서 (20161205)
• DVWA Command Injection 실습 설명서 (20161207)
• DVWA CSRF (low, high level) 실습 설명서 (20161208)
• DVWA File Inclusion 실습 설명서 (20161215)
• DVWA File Upload 실습 설명서 (20161221)
• DVWA SQL Injection (low, medium, high level) 실습 설명서 (20161224)
• DVWA SQL Injection medium level - OWASP-ZAP과 sqlmap 실습 설명서 (20161222)
• DVWA Blind SQLi (high level) 수동점검을 통한 '눈먼'SQL 구문삽입의 이해 (20161227)
• DVWA Blind SQL Injection (low, medium level) sqlmap 실습 설명서 (20161226)
• DVWA Reflected Cross Site Scripting (XSS) 실습 설명서 (20161227)
• DVWA Stored Cross Site Scripting (XSS) 실습 설명서 (20170101)
• SVG 이미지의 ECMAscript를 이용한 악성코드 배포 (20161201)
• WH-WebGoat-7.0.1 웹해킹훈련장 라이브 ISO (20161130)
• WebGoat: Bypass a Path Based Access Control Scheme (20161207)
• WebGoat, LAB: DOM-Based cross-site scripting (20161208)
• WebGoat, Authentication Flaws: Multi Level Login 2 (20161209)
• WebGoat, Code Quality: Discover Clues in the HTML (20161210)
• WebGoat XSS: Phishing with XSS (20161211)
• WebGoat: OS Command Injection (20161215)
• WebGoat: Numeric SQL Injection (20161216)
• WebGoat: String SQL Injection (UNION기반 SQL 구문삽입의 이해) (20161217)
• WebGoat: Blind Numeric SQL Injection (추리기반 SQL 구문삽입의 이해) (20161218)
• 2016.11.30 웹서버 공격 로그 (20161130)
• OWASP TOP 10 (2013) 문서의 각종 해킹 시나리오 모음 (20161129)
• WH-LFI-01: 널바이트삽입과 내부파일실행 웹해킹훈련장 (20161126)
• WH-LFI-01 웹해킹훈련장의 취약점 분석 결과보고서 (20161128)
• 인터넷(Internet)과 보안에 대해 짧게 생각해보다 (20161125)
• PHP Easter Egg의 이해와 조치방안 (20161125)
• WH-COOKIE-01: 잘못된 쿠키 사용 사례를 보여주는 웹해킹훈련장 (20161124)
• WH-COOKIE-01 웹해킹훈련장 홈페이지 취약점분석 결과보고서 (20161126)
• 웹해킹 공격/방어 일람 (20161121)
• webhack.dynu.net 문자배너 만들기 - toilet (20161121)
• MIME 형식의 보안위협 완화: X-Content-Type-Options 헤더 (20161120)
• X-XSS-Protection헤더 시험 페이지 (20161119)
• 방화벽을 노리는 블랙너스(Black Nurse) DoS 공격 (20161118)
• 클릭재킹 방지를 위한 X-Frame-Options 헤더 (20161117)
• X-Frame-Options헤더 시험 페이지 (20161118)
• 공시생 성적조작 사건, 물리보안과 정보보안 (20161117)
• ID/PW 평문전송, 정말 그렇게 큰 취약점인가? (20161116)
• [웹해킹훈련장] 취약한 비밀번호: WH-weak-root-pw 실습 설명서 (20161116)
• weak-root-pw 훈련장 웹취약점 분석 보고서 (20161117)
• 슬리타즈 리눅스 4.0 설치와 웹해킹훈련장 Live ISO 만들기 (20161115)
• 버추얼박스 가상머신에서 Tails OS 설치 (20161114)
• Kali Linux에 Tor Browser 설치하기 (20161114)
• 인터넷익명성 - VPN과 Tor (20161114)
• Kali Linux, open-vm-tools, Shared Folder (20161113)
• SSL Strip 공격과 HSTS (20161112)
• 모든 꼬리표 모아보기(태그 클라우드) (20161111)
• HTTP 세션 탈취와 IP보안 (20161111)
• HTTP TRACE method와 XST 공격 (20161111)
• 세션쿠키와 HttpOnly (20161110)
• HTTP 메소드 수동점검 방법 (20161110)
• 파일업로드(웹쉘) 방어하기 (20161109)
• 파일다운로드/경로조작 방어하기 (20161109)
• XSS, SQL Injection 방어하기 (20161109)
• 길찾기(sitemap) (20161109)
• 웹취약성분석 관련 파일 목록 (20161108)
• SQL 인젝션 공격도구 sqlmap의 간단한 사용법 (20161107)
• 웹취약점 분석 도구로서의 THC Hydra (20161107)
• 웹취약점 분석 도구로서의 cURL (20161107)
• [웹해킹훈련장] CVE-2014-6271: Bash Shellshock 실습 설명서 (20161104)
• [PentesterLab] CVE-2014-6271 Shellshock 훈련장 웹취약점 분석 보고서 (20161106)
• 무료 웹해킹 교육장 목록 (20161103)
• 칼리 리눅스(Kali Linux) 설치 (20161030)
• 가상머신 버추얼 박스(VirtualBox) 설치 (20161029)
• 가상머신 VMWare Workstation Player 설치 (20161028)
• [웹해킹훈련장] Drunk Admin Web Hacking Challenge 실습 설명서 (20161027)
• 스마트에디터(SmartEditor) 2.0 Basic의 웹쉘 업로드 취약점 (20160719)
|
#조치방안
#파일업로드 취약점
#방어법
#파일업로드 방어
#웹쉘등록 방어
#확장자 검증
#확장자 제거
#A1-Injection
웹쉘/파일 업로드 방어방법
SmartEditor2의 이미지업로드 기능을 참조하여 안전한 첨부파일 업로드 기능을 구현해보았다.
이 방식에서는 확장자만 소문자로 변환시켜서 유지하고 파일이름은 관리가 편한 방식으로 변경한다.
<?php
$tmp_name = $_FILES['Filedata']['tmp_name'];
$filename = $_FILES['Filedata']['name'];
$filename_ext = strtolower(array_pop(explode('.',$filename)));
$allow_ext = array("jpg", "png", "hwp", "pptx", "docx", "xlsx", "pdf");
if(!in_array($filename_ext, $allow_ext)) {
echo "허용되지않는 확장자 파일입니다.";
exit;
}
// 파일 이름의 예: "../upload/201611092314172063257683.hwp"
$newPath = '../upload/'.date('YmdHis').mt_rand().'.'.$filename_ext;
@move_uploaded_file($tmp_name, $newPath);
?>
첨부파일 처리 순서는 다음과 같다.
- 가장 마지막(
array_pop() ) 마침표(.) 다음 문자열의 소문자(strtolower() )를 파일의 확장자로 한다: array_pop(explode('.',$filename))
- 허용된 확장자를 가지는 파일이 아니면 버린다:
if(!in_array($filename_ext, $allow_ext)) exit;
- 저장할 실제 파일이름은 내부적인 규칙에 따라 만들어서 공격의 여지를 차단한다:
date('YmdHis').mt_rand()
위와 같은 방식으로 업로드된 파일은 "../upload/ " 디렉토리 밑에
"20161110084417864888954.jpg "와 같은 이름을 가지게 된다.
일부 웹 어플리케이션에서는 아예 확장자를 붙이지 않고 파일이나 파일이름의 해쉬 값을 이용하여 -- 예를 들어
"../upload/f9869af5bb8e37fb456d13deb152319e ")와 같이 -- 파일을 저장하기도 한다.
<?php
$newPath = '../upload/'.md5_file($_FILES['Filedata']['tmp_name']);
@move_uploaded_file($_FILES['Filedata']['tmp_name'];, $newPath);
?>
위와 같이 확장자를 제거하면 굳이 첨부파일의 확장자를 검증할 필요가 없는 장점이 있다.
메일 솔루션이나 그룹웨어 등에서 종종 채택하는 방식이다.
[처음 작성한 날: 2016.11.09]
[마지막으로 고친 날: 2016.11.10]
> 이 글을 목록없이 인쇄하기 편하게 보기
< 이전 글 : HTTP 메소드 수동점검 방법 (2016.11.10)
> 다음 글 : 파일다운로드/경로조작 방어하기 (2016.11.09)
이 저작물은 크리에이티브
커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
|