web攻击日志分析之新手指

2023-11-17

0x00 前言


现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取证谁来做的这个事情,攻击流程是什么样子的。

除此之外,还有其他场景。

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

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

0x01 准备


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

Apache 服务器

预安装在Kali Linux

可以用以下命令开启:

service apache2 start

enter image description here

MySQL

预安装在Kali Linux

可以用以下命令开启:

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

转载于:https://www.cnblogs.com/pshell/p/7479524.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web攻击日志分析之新手指 的相关文章

  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1
  • 如何更改codeception phpbrowser/mink超时

    我正在尝试使用代码接收创建测试 以检查页面在高负载的情况下是否正常工作 不幸的是 如果页面负载非常高并且测试开始 我会收到这样的错误 Codeception Exception ModuleConfig Codeception Util M
  • 垃圾邮件打败了我所有的验证码

    我有一个 WordPress 博客 我在上面使用验证码插件的时间最长 因为它有效 最近我收到了大量的垃圾邮件 然后我尝试执行通过 PHP 生成的 将这些随机数添加在一起 但仍然没有成功 我不太确定需要做什么来阻止这些垃圾邮件 但这很烦人 我
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • 自定义帖子类型的 WordPress 自定义字段

    过去有几个人出现过这个问题 但他们的问题的解决方案对我来说不起作用 我已经尝试了很多 在 WordPress 中 我创建了 3 种自定义帖子类型 1 代表 视频 新闻 和 音乐 每个内容都发布到自己的页面 我想添加自定义字段 这样我就可以为
  • PHP - 警告:strpos() [function.strpos]: 空分隔符是什么意思?

    警告 strpos function strpos 空分隔符是什么意思 我有这个 if strpos 039 text false text str replace 039 text 猜测一下 我会说 text是一个空字符串 感谢马克指出细
  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • Cakedc.users => 总是重定向到主页

    我在新的 Cakephp 安装上使用插件 CakeDC Users 我有两个控制器 PagesController php CardsController php Pages 有 1 个操作 Beta 它是主页 Cards 有两个操作 索引
  • 纯基于网络的版本控制系统

    我的托管服务当前不允许在其服务器上运行 允许 svn git cvs 我真的希望能够将我的开发计算机上的当前源代码与我的生产服务器 同步 我正在寻找一个纯php python ruby版本控制系统 不只是一个client对于版本控制系统 不
  • 切换到 mysqli 是个好主意吗?

    我正在考虑为我的所有 php 项目切换到 mysqli 我的代码编写方式 我运行非常简单的网站并构建了自己的基本框架 我在所有网站上使用该框架 我在修改函数和类时不应该遇到太多问题 然而 我只听说过关于准备好的语句的积极的事情 除了一些关于
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • 如何使用 jQuery Ajax 将 PHP 数组值传递到另一个文件?

    这是我的代码
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 为什么这评估为 true

    为什么这评估结果为真
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以

随机推荐

  • mysql - windows下my.ini和linux下my.cnf简单配置

    mysql 设置mysql客户端默认字符集 default character set utf8 mysqld 设置3307端口 port 3307 设置mysql的安装目录 basedir G a workIndex mysql mysq
  • MFC创建窗口流程

    一个MFC程序框架 1 应用程序类 CWinApp 2 框架类 CFrameWnd 流程 1 有且仅有一个全局的应用程序类对象 MyApp myApp 2 在程序入口函数实现 InitInstance 1 给框架类对象动态分配空间 自动调用
  • mysql 大数据量如何导入

    MySQL 有多种方法可以用来导入大数据量 这里列举几种常见的方法 导入数据库备份文件 如果你已经有了数据库的备份文件 可以使用 MySQL 的 mysql 命令行工具来导入 例如 mysql u username p db name lt
  • 【微信小程序】运行机制和更新机制

    观众老爷们好呀 牛牛又更文了 上文我们对部分比较常用的组件进行了讲解 作为开发者 我们还需要对小程序的运行机制和更新机制做一定的了解 那问题来了 你对它们了解多少呢 今天牛牛就带大家测一测 不了解的还不笔记做起来 文章目录 一 运行机制 1
  • 图像相似度计算之直方图方法OpenCV实现

    操作步骤 1 载入图像 灰度图或者彩色图 并使其大小一致 2 若为彩色图 增进行颜色空间变换 从RGB转换到HSV 若为灰度图则无需变换 3 若为灰度图 直接计算其直方图 并进行直方图归一化 4 若为彩色图 则计算其彩色直方图 并进行彩色直
  • HTTP首部(下)

    开始头大 哈哈 这个东西真的很无聊且枯燥 奈何最近的学习中经常用到这些知识 还是过一遍比较放心 上一篇博客中我们讨论了http报文首部 其划分为请求头和响应头 请求头主要由请求行 请求字段 通用字段 实体字段组成 那么响应头也由响应行 响应
  • go hash中的读写操作

    在 Go 语言中 我们可以使用 for 循环来遍历哈希表 hash 中的键值对 针对不同的操作进行读写操作 示例代码如下 创建一个映射类型的哈希表 hash map string int apple 2 banana 3 orange 4
  • uni-app实现PDA采集器扫码

    uni app实现PDA采集器扫码 一 开发建议 1 建议使用nvue开发 体检会非常好 使用uni preloadPage url pages index 预加载页面 页面的流畅程度会提高非常多 单独vue的写法 打包成安卓体验很不好 模
  • IntelliJ IDEA 编译程序出现非法字符的解决方法

    最近编码完成后总是报非法字符 项目启动不起来 网上有很多说是File gt Setting gt File Encoding 将IDE Encoding和Project Encoding 都设置为UTF 8就行 可是我试了不行 后来看到另外
  • 不会把if-else重构成高质量代码的程序员,不是个优秀的程序员

    为什么我们写的代码都是 if else 程序员想必都经历过这样的场景 刚开始自己写的代码很简洁 逻辑清晰 函数精简 没有一个 if else 可随着代码逻辑不断完善和业务的瞬息万变 比如需要对入参进行类型和值进行判断 这里要判断下对象是否为
  • 3、backbone中的model实例

    关于backbone 最基础的一个东西就是model 这个东西就像是后端开发中的数据库映射那个model一样 也是数据对象的模型 并且应该是和后端的model有相同的属性 仅是需要通过前端来操作的属性 下面就从实例来一步一步的带大家来了解b
  • 文心一言、讯飞星火与GPT-4/3.5在回答中文历史问题的表现

    最近 随着备受关注的文心一言正式免费向全社会开放 再次引起了社会层面对国产大模型的兴趣 以文心一言为代表的国产大模型性能究竟如何 如果将它们相互比较 并且和GPT系列模型等国际前沿水平的LLM进行比较 会得到什么样的结果呢 笔者对此非常好奇
  • Python所有方向的学习路线图

    在放这个路线图之前 我先做一个简单的介绍 避免新手小白有什么不理解的 这个学习路线上面写的是某个方向建议学习和掌握的知识带你 这样学习下来之后会更加容易掌握 知识体系会比较全面 比自己单纯的自学效果好很多 不至于看到什么就学什么 容易走弯路
  • 二,ES6中新增const关键字的使用方法

    之前用var声明变量 变量想怎么改就怎么改 这里const关键字也是声明变量的 不过声明的是常量 常量就是固定的一个值 不能改变 例如 const name 唐僧 name 老沙 报错 因为它要更改常量name 只在块级作用于起作用 和le
  • Windows10 java环境变量的配置详细教程(Windows10 和Windows11)

    java环境变量的配置详细教程 1 首先要区分一下Windows10 2021年之前的版本和Windows10 2021年之后的版本 Windows10 2021年之后的版本和Windows11 系统在配置java上差不多 故不作区分 1
  • Intellij IDEA svn的使用记录

    这里的忽略一直灰色的 可以进入 这里的版本控制里进行忽略选择 或者 这里进行添加 这里有三个选择 按照顺序 1 忽略指定的文件 2 忽略文件夹下所有文件 3 忽略符合匹配规则的文件 到Commit Changes 这里有几个选项需要了解的
  • Vue实例挂载的过程

    一 思考与分析 我们都听过知其然知其所以然这句话 那么不知道是否思考过new Vue 这个过程中究竟做了些什么 过程中是如何完成数据的绑定 又是如何将数据渲染到视图的等等 首先找到vue的构造函数 源码位置 src core instanc
  • 因为强行关机, 而导致的fedora23 不能重新启动, 卡在开机logo那里的 修复 解决方案...

    其实 fedora23的U盘live 也很好用 很流畅 主要还是 要用一个比较好的 快的 U盘 这样live U盘在4GB 3 75GiB 的内存中还是较快的 原来的U盘live系统用得很卡 可能是因为 U盘太烂的原因 要方便的使用live
  • SAXParserFactoryImpl cast SAXParserFactory异常

    Caused by java lang ClassCastException com sun org apache xerces internal jaxp SAXParserFactoryImpl cannot be cast to ja
  • web攻击日志分析之新手指

    0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象 比如针对你的一个站点的URL进行SQL注入测试等等 这时候需要你从日志当中分析到底是个什么情况 如果非常严重的话 可能需要调查取证谁来做的这个事情 攻击流程是什么样子的