web攻击日志分析之新手指

0x00 前言


现实中可能会常常出现web日志当中出现一些被攻击的迹象,好比针对你的一个站点的URL进行SQL注入测试等等,这时候须要你从日志当中分析究竟是个什么状况,若是很是严重的话,可能须要调查取证谁来作的这个事情,攻击流程是什么样子的。php

除此以外,还有其余场景。html

做为一名管理员,理解如何从安全的角度来分析日志真的很重要。python

这篇文章内容包括了日志分析的一些基础知识,能够解决上述需求。mysql

0x01 准备


出于演示目的,我进行如下设置。git

Apache 服务器

预安装在Kali Linuxgithub

能够用如下命令开启:web

service apache2 start

enter image description here

MySQL

预安装在Kali Linuxsql

能够用如下命令开启:shell

service mysql start

enter image description here

使用PHP-MySQL建立一个有漏洞的web应用

我使用PHP开发了一个有漏洞的web应用而且把它放在上面提到的 Apache-MySQL里面。数据库

上述设置完成后,我用了一些Kali Linux中的自动工具(ZAP、w3af)扫描这个有漏洞的应用的URL。

如今让咱们来看看分析日志中的不一样状况。

0x02 Apache服务中的日志记录


Debian系统上Apache服务器日志的默认位置为:/var/log/apache2/access.log

日志记录只是在服务器上存储日志。我还须要分析日志以得出正确结果。在接下来的一节里,咱们将看到咱们如何分析Apache服务器的访问日志以找出web站点上是否有攻击尝试。

分析日志

手动检查

在日志量较小的状况下,或者若是咱们查找一个指定关键词,可使用像grep表达式这样的工具观察日志。

在下图中,咱们在URL中试图搜寻全部关键词为“union”的请求。

enter image description here

从上图中,咱们能够看到URL中的“union select 1,2,3,4,5”请求。很明显,ip地址为 192.168.56.105的某人尝试了SQL注入。 相似地,当咱们有本身的关键词时能够搜索特殊的关键词。

enter image description here

在下图中,咱们正在搜索试图读取“/etc/passwd”的请求,很明显是本地文件包含尝试。

如上面的截图所示,咱们有许多本地文件包含的尝试,且这些请求发送自ip地址 127.0.0.1。

不少时候,能轻易经过日志看出是不是自动化扫描器产生的。

举例来讲, IBM appscan在许多攻击payload中使用“appscan”这个词。因此,在日志中查看这样的请求,咱们基本就能够判断有人在使用appscan扫描网站。

Microsoft Excel也是一个打开日志文件和分析日志的不错的工具。咱们能够经过指定“空格”为分隔符以用excel打开日志文件。

当咱们手头没有日志分析工具时,这个也挺好用的。

除了这些关键词,在分析期间要了解HTTP状态代码的基础知识。如下是关于HTTP状态代码的高级信息的表格。

enter image description here

0x03 Web shells


webshell是网站/服务器的另外一个问题。webshell能够已web server权限控制服务器。

在一些状况下,咱们可使用webshell来访问全部放在相同服务器上的其余站点。

如下截图显示了Microsoft Excel 中开启相同的access.log文件。

enter image description here

咱们清楚地看到有一个叫“b374k.php”的文件被访问了。“b374k”是一个流行的webshell,所以这个文件是很可疑的。

查看相应代码“200”,本行代表有人上传了一个webshell并访问了它。

在许多状况下,攻击者重命名webshell的名字以免怀疑。咱们必须变得聪明点,看看被访问的文件是不是常规文件或者是否他们看起来不太同样。咱们能够更进一步,若是任何文件看起来可疑的话,还能够查看文件类型和时间戳。

One single quote for the win

SQL注入是web应用中最多见的漏洞之一。大多数学习web应用安全的人是从学习SQL注入开始的。

识别一个传统的SQL注入很容易,给URL参数添加一个单引号看看是否报错。

任何咱们传递给服务器的东西都会被记录,而且能够朔源。

如下截图显示了日志当中记录了有对参数user传入单引号测试是否有SQL注入的行为。

%27是单引号的URL编码。

enter image description here

出于管理目的,咱们还能够运行查询监视来查看数据库中的哪一个请求被执行了。

enter image description here

若是咱们观察以上图片,传递一个单引号给参数“user”的SQL语句被执行了。

0x04 使用自动化工具分析


当存在大量日志时。手动检查就会变得困难。在这种情景下,除了一些手动检查以外咱们可使用自动化工具。

虽然有许多高效的商业工具,可是我要向大家介绍一款被称为“Scalp”的免费工具。

据他们的官方连接所说,Scalp是用于Apache服务器,旨在查找安全问题的日志分析器。主要理念是浏览大量日志文件并经过从HTTP/GET中提取可能的攻击。

Scalp能够从如下连接下载:

https://code.google.com/p/apache-scalp/

Scalp是python脚本,因此要求咱们的机器中安装python。

如下图片显示该工具的帮助。

enter image description here

如咱们在上图所见,咱们须要使用标志-l来提供要分析的日志文件。

同时,咱们须要提供使用标志-f提供一个过滤文件让Scalp在access.log文件中识别可能的攻击。

咱们可使用PHPIDS项目中的过滤器来检测任何恶意的尝试。

该文件名为“default_filter.xml ”,能够从如下连接中下载:

https://github.com/PHPIDS/PHPIDS/blob/master/lib/IDS/default_filter.xml

如下代码块是取自上面连接的一部分。

#!html
<filter>
??????<id>12</id>
??????<rule><![CDATA[(?:etc\/\W*passwd)]]></rule>
??????<description>Detects etc/passwd inclusion attempts</description>
??????<tags>
??????????<tag>dt</tag>
??????????<tag>id</tag>
??????????<tag>lfi</tag>
??????</tags>
??????<impact>5</impact>
</filter>

它是使用XML标签订义的规则集来检测不一样的攻击测试。以上代码片断是检测文件包含攻击尝试的一个示例。

下载此文件以后,把它放入Scalp的同一文件夹下。

运行如下命令来使用Scalp分析日志。

#!bash
python scalp-0.4.py –l /var/log/apache2/access.log –f filter.xml –o output –html

enter image description here

“output”是报告保存的目录。若是不存在的话,由Scalp自动建立。-html是用来生成HTML格式的报告。 如咱们在上图看到的那样,Scalp结果代表它分析了4001行,超过4024并发现了296个攻击模式。

运行上述命令后在输出目录内生成报告。咱们能够在浏览器内打开它并查看结果。 下面截图显示的输出显示了目录遍历攻击尝试的一小部分。

enter image description here

MySQL中的日志记录


本节论述了数据库中的攻击分析和监视它们的方法。

第一步是查看设置了什么变量。咱们可使用“show variables;”完成,以下所示。

enter image description here

接下来显示了上述命令的输出。

enter image description here

如咱们在上图中看到的,日志记录已开启。该值默认为OFF。

这里另外一个重要的记录是 “log_output”,这是说咱们正在把结果写入到文件中。另外,咱们也能够用表。

咱们能够看见“log_slow_queries”为ON。默认值为OFF。

全部这些选项都有详细解释且能够在下面提供的MySQL文档连接里直接阅读:

http://dev.mysql.com/doc/refman/5.0/en/server-logs.html

MySQL的查询监控


请求日志记录从客户端处收到并执行的语句。默认记录是不开启的,由于比较损耗性能。

咱们能够从MySQL终端中开启它们或者能够编辑MySQL配置文件,以下图所示。

我正在使用VIM编辑器打开位于/etc/mysql目录内的“my.cnf”文件。

enter image description here

若是咱们向下滚动,能够看见日志正被写入一个称为“mysql.log”的文件内。

enter image description here

咱们还能看到记录“log_slow_queries” ,是记录SQL语句执行花了很长时间的日志。

enter image description here

如今一切就绪。若是有人用恶意查询数据库,咱们能够在这些日志中观察到。以下所示:

enter image description here

上图显示了查询命中了名为“webservice”的数据库并试图使用SQL注入绕过认证。

0x05 更多日志记录


默认地,Apache只记录GET请求,要记录POST数据的话,咱们可使用一个称为“mod_dumpio”的Apache模块。要了解更多关于实现部分的信息,请参考如下连接:

http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html

另外,咱们可使用“ mod security”达到相同结果。

Reference http://httpd.apache.org/docs/2.2/logs.html

相关文章
相关标签/搜索