返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >使用日志进行调查 - SQL 注入攻击示例
  • 933
分享到

使用日志进行调查 - SQL 注入攻击示例

sql服务器php 2023-09-04 14:09:15 933人浏览 八月长安
摘要

日志文件是服务器提供的非常有价值的信息。几乎所有服务器、服务和应用程序都提供某种日志记录。日志文件记录在服务或应用程序运行期间发生的事件和操作。 日志文件为我们提供了服务器行为的精确视图以及关键信息,例如何时、如何以及由谁访问服务器。此类信

日志文件是服务器提供的非常有价值的信息。几乎所有服务器、服务和应用程序都提供某种日志记录。日志文件记录在服务或应用程序运行期间发生的事件和操作。

日志文件为我们提供了服务器行为的精确视图以及关键信息,例如何时如何以及由谁访问服务器。此类信息可以帮助我们监控性能、排除故障和调试应用程序,并帮助取证调查人员展开可能导致恶意活动的事件链。

让我们以后端 WEB 服务器为例。通常,Apache Http 服务器提供两个主要的日志文件—— access.logerror.logaccess.log记录所有对文件的请求。如果访问者请求www.example.com/main.PHP,则会将以下条目添加到日志文件中:

88.54.124.17 - - [16/Apr/2016:07:44:08 +0100] "GET /main.php HTTP/1.1" 200 203 "-" "Mozilla/5.0 (windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

以上日志显示,IP地址为88.54.124.178的访问者在2016年4月16日07:44请求了main.php文件,请求成功

此信息可能不太有趣,但如果日志文件显示 IP为88.54.124.178的访问者在 2016 年4 月 16 日 07:44请求了dump_database.php文件并且请求成功了怎么办?在没有该日志文件的情况下,您可能永远不知道有人发现并运行了您网站上的秘密或受限脚本并转储数据库

确定日志文件是一项重要资产后,让我们看一个日常示例,说明日志文件如何帮助识别网站何时、如何以及由谁被黑客入侵。

调查

假设我们管理的一个网站被破坏了。我们还假设该站点是一个简单且最新的 WordPress 网站,运行在一个完全打补丁的 ubuntu 服务器上。

 

在寻求帮助后,取证小组将服务器下线,以便能够继续调查。

服务器被隔离以保留系统的当前状态及其日志,阻止对攻击者的远程访问(如果安装了后门),以及阻止与网络上的任何其他机器交互。

要识别 Web 服务器上的恶意活动,您通常会创建服务器的合法副本,然后继续进行调查。但是,由于没有计划对攻击者采取法律行动,在这种情况下,取证团队可以处理原始数据。

在调查中寻找的证据

为了开始调查,调查人员需要确定要寻找的证据。通常,攻击的证据包括对隐藏或异常文件的直接访问、在有或没有身份验证的情况下访问管理区域、远程代码执行、SQL 注入、文件包含、跨站点脚本 (XSS)以及其他可能表明的异常行为漏洞扫描或侦察。

让我们假设在我们的示例中,Web 服务器access.log可用。

root@secureserver:/var/log/apache2# less access.log

access.log往往是一个相当大的文件,通常包含数千个记录的请求。

84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/index.php HTTP/1.1" 200 3804 "-" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/assets/js/skel.min.js HTTP/1.1" 200 3532 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic01.jpg HTTP/1.1" 200 9501 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic03.jpg HTTP/1.1" 200 5593 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

检查每一行是不切实际的,所以我们需要过滤掉很可能不感兴趣的数据。这通常包括图像和 CSS 样式表等资源。一些调查人员也更喜欢去除 javascript 文件。

然而,在这种情况下,由于网站正在运行 WordPress Web 应用程序,我们将使用稍微不同的方法。我们不会排除某些数据,而是过滤access.log以获取 WordPress 特定的特征。

root@secureserver:~#cat /var/log/apache2/access.log | grep -E "wp-admin|wp-login|POST /"

上面的命令过滤access.log并只显示字符串包含wp-admin的记录,这是 WordPress 的默认管理文件夹wp-login是 WordPress 登录文件 ( wp-login.php ) 的一部分,最后是, POST, 它将显示使用 POST 方法发送到服务器的 HTTP 请求,这些请求很可能是登录表单提交。

输出返回许多结果。在筛选它们之后,我们将专注于以下单个记录:

84.55.41.57 - - [17/Apr/2016:06:52:07 +0100] "GET /wordpress/wp-admin/ HTTP/1.1" 200 12349 "http://www.example.com/wordpress/wp-login.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

我们看到 IP 84.55.41.57成功访问了 WordPress 管理界面。让我们看看拥有这个 IP 地址的用户还做了什么。我们将grep再次使用该 IP过滤access.log 。

root@secureserver:~#cat /var/log/apache2/access.log | grep 84.55.41.57

这导致了以下有趣的记录。

84.55.41.57 - - [17/Apr/2016:06:57:24 +0100] "GET /wordpress/wp-login.php HTTP/1.1" 200 1568 "-"84.55.41.57 - - [17/Apr/2016:06:57:31 +0100] "POST /wordpress/wp-login.php HTTP/1.1" 302 1150 "http://www.example.com/wordpress/wp-login.php"84.55.41.57 - - [17/Apr/2016:06:57:31 +0100] "GET /wordpress/wp-admin/ HTTP/1.1" 200 12905 "http://www.example.com/wordpress/wp-login.php"84.55.41.57 - - [17/Apr/2016:07:00:32 +0100] "POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1" 200 454 "http://www.example.com/wordpress/wp-admin/"84.55.41.57 - - [17/Apr/2016:07:00:58 +0100] "GET /wordpress/wp-admin/theme-editor.php HTTP/1.1" 200 20795 "http://www.example.com/wordpress/wp-admin/"84.55.41.57 - - [17/Apr/2016:07:03:17 +0100] "GET /wordpress/wp-admin/theme-editor.php?file=404.php&theme=twentysixteen HTTP/1.1" 200 8092 "http://www.example.com/wordpress/wp-admin/theme-editor.php"84.55.41.57 - - [17/Apr/2016:07:11:48 +0100] "GET /wordpress/wp-admin/plugin-install.php HTTP/1.1" 200 12459 "http://www.example.com/wordpress/wp-admin/plugin-install.php?tab=upload"84.55.41.57 - - [17/Apr/2016:07:16:06 +0100] "GET /wordpress/wp-admin/update.php?action=install-plugin&plugin=file-manager&_wpnonce=3c6c8a7fca HTTP/1.1" 200 5698 "http://www.example.com/wordpress/wp-admin/plugin-install.php?tab=search&s=file+permission"84.55.41.57 - - [17/Apr/2016:07:18:19 +0100] "GET /wordpress/wp-admin/plugins.php?action=activate&plugin=file-manager%2Ffile-manager.php&_wpnonce=bf932ee530 HTTP/1.1" 302 451 "http://www.example.com/wordpress/wp-admin/update.php?action=install-plugin&plugin=file-manager&_wpnonce=3c6c8a7fca"84.55.41.57 - - [17/Apr/2016:07:21:46 +0100] "GET /wordpress/wp-admin/admin-ajax.php?action=connector&cmd=upload&target=l1_d3AtY29udGVudA&name%5B%5D=r57.php&FILES=&_=1460873968131 HTTP/1.1" 200 731 "http://www.example.com/wordpress/wp-admin/admin.php?page=file-manager_settings"84.55.41.57 - - [17/Apr/2016:07:22:53 +0100] "GET /wordpress/wp-content/r57.php HTTP/1.1" 200 9036 "-"84.55.41.57 - - [17/Apr/2016:07:32:24 +0100] "POST /wordpress/wp-content/r57.php?14 HTTP/1.1" 200 8030 "http://www.example.com/wordpress/wp-content/r57.php?14"84.55.41.57 - - [17/Apr/2016:07:29:21 +0100] "GET /wordpress/wp-content/r57.php?29 HTTP/1.1" 200 8391 "http://www.example.com/wordpress/wp-content/r57.php?28"84.55.41.57 - - [17/Apr/2016:07:57:31 +0100] "POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1" 200 949 "http://www.myw ebsite.com/wordpre ss/wp-admin/admin.php?page=file-manager_settings"

让我们进一步分析这些记录。攻击者访问了登录页面。

84.55.41.57 - GET /wordpress/wp-login.php 200

攻击者提交了登录表单(使用 POST 方法的 HTTP 请求)并被重定向(302 HTTP 状态码)。

84.55.41.57 - POST /wordpress/wp-login.php 302

攻击者被重定向到wp-admin(WordPress 仪表板),这意味着身份验证成功。

84.55.41.57 - GET /wordpress/wp-admin/ 200

攻击者导航到主题编辑器。

84.55.41.57 - GET /wordpress/wp-admin/theme-editor.php 200

攻击者试图编辑文件 4 ​​04.php,这是一种非常常见的用于将恶意代码注入文件的策略。由于缺乏写权限,攻击者很可能未能这样做。

84.55.41.57 - GET /wordpress/wp-admin/theme-editor.php?file=404.php&theme= twentysixteen 200

攻击者访问了插件安装程序。

84.55.41.57 - GET /wordpress/wp-admin/plugin-install.php 200

攻击者安装并激活了文件管理器插件。

84.55.41.57 - GET /wordpress/wp-admin/update.php?action=install-plugin&plugin= file-manager &_wpnonce=3c6c8a7fca 20084.55.41.57 - GET /wordpress/wp-admin/plugins.php?action=activate&plugin=file-manager%2Ffile-manager.php&_wpnonce=bf932ee530 200

攻击者使用文件管理器插件上传r57.php,这是一个 PHP web shell脚本。

84.55.41.57 - GET /wordpress/wp-admin/admin-ajax.php?action=connector& cmd= upload&target=l1_d3AtY29udGVudA&name%5B%5D=r57.php&FILES=&_=1460873968131 200

日志表明攻击者运行了r57 shell 脚本。查询字符串?1(攻击者运行phpinfo();)和?28(攻击者获得了服务列表)指示通过 shell 脚本的不同部分的导航。他们似乎没有发现任何有趣的东西。

84.55.41.57 - GET /wordpress/wp-content/r57.php 20084.55.41.57 - POST /wordpress/wp-content/r57.php?1 20084.55.41.57 - GET /wordpress/wp-content/r57.php?28 200

攻击者的最后一个动作是通过文件管理器插件编辑主题的索引文件,并将其内容替换为HACKED!

84.55.41.57 - POST /wordpress/wp-admin/admin-ajax.php 200 - http://www.example.com/wordpress/wp-admin/admin.php?page=file-manager_settings

基于上述信息,我们现在有了攻击者导致网站被破坏的行为的时间表。然而,难题中缺少一块。攻击者最初是如何获得登录凭据的,或者他们是否绕过了身份验证?

假设我们确定管理员密码没有泄露或暴力破解,让我们回去看看是否能找到有关此事的任何信息。

当前的access.log没有包含任何可能发生的事情的线索。但是,我们可以调查的不仅仅是一个access.log文件。Apache HTTP Server 日志轮换算法归档旧的日志文件。列出/var/log/apache2/目录会显示四个额外的日志文件。

首先,我们需要过滤日志以查看 IP 84.55.41.57是否采取了任何操作。其中一个日志被包含大量 sql 命令的记录轰炸,这些命令清楚地表明对似乎是与 SQL 服务器一起使用的自定义插件的SQL 注入攻击。

84.55.41.57- - [14/Apr/2016:08:22:13 0100] "GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=1 AND (SELECT 6810 FROM(SELECT COUNT(*),CONCAT(0x7171787671,(SELECT (ELT(6810=6810,1))),0x71707a7871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.net CLR 3.5.30729)"84.55.41.57- - [14/Apr/2016:08:22:13 0100] "GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=(SELECT 7505 FROM(SELECT COUNT(*),CONCAT(0x7171787671,(SELECT (ELT(7505=7505,1))),0x71707a7871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"84.55.41.57- - [14/Apr/2016:08:22:13 0100] "GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=(SELECT CONCAT(0x7171787671,(SELECT (ELT(1399=1399,1))),0x71707a7871)) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"84.55.41.57- - [14/Apr/2016:08:22:27 0100] "GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=1 UNION ALL SELECT CONCAT(0x7171787671,0x537653544175467a724f,0x71707a7871),NULL,NULL-- HTTP/1.1" 200 182 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"

假设这个插件是通过复制粘贴系统管理员在网上找到的一些代码创建的。该脚本旨在根据给定的 ID 检查用户的有效性。该插件在主网页上公开了一个表单,该表单正在向/wordpress/wp-content/plugins/custom_plugin/check_user.php发送 AJAX GET 请求。

当我们分析check_user.php时,很明显该脚本编写得很糟糕并且容易受到 SQL 注入攻击。

 //Include the WordPress headerinclude('/wordpress/wp-header.php'); global $wpdb; // Use the GET parameter ‘userid’ as user input$id=$_GET['userid']; // Make a query to the database with the value the user supplied in the SQL statement $users = $wpdb->get_results( "SELECT * FROM users WHERE user_id=$id"); ?>

access.log中的记录数量和模式表明攻击者使用 SQL 注入利用工具来利用 SQL 注入漏洞。攻击日志可能看起来像胡言乱语,但它们是 SQL 查询,通常旨在通过 SQL 注入漏洞提取数据。作为枚举过程的一部分,该利用工具尝试各种 SQL 注入技术来查找数据库名称、表名称和列。

我们不会深入研究 SQL 注入攻击,或者如何修复 SQL 注入漏洞(例如,使用准备好的语句),因为这超出了本文的范围。但是,日志中的记录将类似于以下内容:

/wordpress/wp-content/plugins/my_custom_plugin/check_user.php?userid=-6859 UNION ALL SELECT (SELECT CONCAT(0x7171787671,IFNULL(CAST(ID AS CHAR),0x20),0x616474686c76,IFNULL(CAST(display_name AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_activation_key AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_email AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_login AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_nicename AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_pass AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_reGIStered AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_status AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_url AS CHAR),0x20),0x71707a7871) FROM wp.wp_users LIMIT 0,1),NULL,NULL--

上面的 SQL 代码非常强烈地表明 WordPress 数据库已被入侵,并且该 SQL 数据库中的所有敏感信息都可能被盗。

分析

通过这次调查,我们现在可以创建导致这次攻击的事件链。

 

一些问题仍然存在,例如谁是袭击的幕后黑手。此时,只能知道攻击者的IP地址。除非攻击者留下与真人身份相关的具体证据,否则尝试将大多数攻击归因于非常困难并且可能不可行。请记住,攻击者经常利用代理和匿名网络(例如 Tor)来进行大多数攻击,以掩盖他们的真实位置。

最重要的是,导致 SQL 注入攻击的不安全代码存在于自定义 WordPress 插件中。如果该站点在部署到生产环境之前已经过安全漏洞测试,那么攻击者就不可能利用导致污损的安全漏洞。

上述虚构示例中的攻击者非常马虎,留下了大量的证据和痕迹,这使得调查非常容易。但是请记住,情况并非总是如此,尤其是在处理更复杂的攻击时。

经常问的问题

您需要哪些日志文件来调查 Web 应用程序攻击?

您如何开始对 Web 应用程序攻击进行调查?

您可以使用哪些工具来调查 Web 应用程序攻击?

如何保护自己免受 Web 应用程序攻击?

来源地址:https://blog.csdn.net/allway2/article/details/126067570

--结束END--

本文标题: 使用日志进行调查 - SQL 注入攻击示例

本文链接: https://lsjlt.com/news/393668.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用日志进行调查 - SQL 注入攻击示例
    日志文件是服务器提供的非常有价值的信息。几乎所有服务器、服务和应用程序都提供某种日志记录。日志文件记录在服务或应用程序运行期间发生的事件和操作。 日志文件为我们提供了服务器行为的精确视图以及关键信息,例如何时、如何以及由谁访问服务器。此类信...
    99+
    2023-09-04
    sql 服务器 php
  • 常用的攻击手段SQL注入的示例分析
    这篇文章主要介绍常用的攻击手段SQL注入的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述1. 攻击原理SQL注入是较常见的网络攻击方式之一,主要针对WEB应用,利用程序员编写代码的疏忽,对于连接数据库...
    99+
    2023-06-27
  • 如何使用keras做SQL注入攻击判断
    小编给大家分享一下如何使用keras做SQL注入攻击判断,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过深度学习框架keras...
    99+
    2024-04-02
  • php中慢查询日志和错误日志的使用示例
    这篇“php中慢查询日志和错误日志的使用示例”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php中慢查询日志和错误日志的使用示例”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章...
    99+
    2023-06-06
  • 如何使用exp进行SQL报错注入
    这篇文章主要为大家展示了“如何使用exp进行SQL报错注入”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用exp进行SQL报错注入”这篇文章吧。0x01 前言概述小编又在MySQ...
    99+
    2023-06-17
  • 使用shell脚本对Nginx日志进行切分的示例代码
    本文介绍了使用shell脚本对Nginx日志进行切分的示例代码,分享给大家,具体如下: 1.日志格式 默认的日志格式: main log_format main '$remote_addr - $rem...
    99+
    2022-06-04
    切分 示例 脚本
  • PHP中如何使用预处理语句防止SQL注入攻击?
    php 中使用预处理语句可以有效防御 sql 注入攻击。预处理语句通过允许在执行查询之前定义查询参数,从而阻止攻击者插入恶意字符串。它具有更高的安全性、更好的性能和易于使用的优点。 P...
    99+
    2024-05-06
    mysql 防止sql注入 php脚本
  • 使用Kali Linux Metasploit 对WEB应用进行攻击 以DVWA为例
    目录 说明环境准备步骤确认攻击机所在网络信息确认所在网络存活主机信息网页访问DVWA打开Command Execution 打开Metasploit使用web_delivery模块运行...
    99+
    2023-09-09
    kali DVWA metasploit
  • 如何使用MySQL进行日志分析和性能调优?
    如何使用MySQL进行日志分析和性能调优?导语:MySQL是一种常见且强大的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。本文将介绍如何使用MySQL的日志功能进行分析,并提供一些性能调优的方法和示例代码。一、MySQL的日志功能...
    99+
    2023-10-22
    MySQL 性能调优 日志分析
  • 如何在Linux系统中使用Python日志进行调试?
    在Linux系统中,Python日志是一种非常重要的调试工具,能够帮助程序员快速定位程序中的问题。Python的logging模块提供了强大的日志功能,使得开发者可以在程序中灵活地记录各种信息,包括错误、警告、调试信息等等。在本文中,我们将...
    99+
    2023-08-23
    日志 npm linux
  • 使用 Symfony 组件在 PHP 中进行依赖注入的示例
    在本文中,我们将查看一些使用 Symfony DependencyInjection 组件的示例。 我们将学习依赖注入的基础知识,它允许干净和模块化的代码,我们将看到如何在带有 Symfony 组件的 ...
    99+
    2024-02-27
  • SQL中怎么使用convert函数进行日期查询
    SQL中怎么使用convert函数进行日期查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。曾经遇到这样的情况,在数据库的Meeting表...
    99+
    2024-04-02
  • PyMongo进行MongoDB查询和插入操作的高效使用示例
    目录插入到集合中插入多个文档查找一个查找所有不允许在同一对象中同时指定0和1值高级查询使用正则表达式过滤插入到集合中 要将记录(在MongoDB中称为文档)插入到集合中,使用insert_one()方法。insert_o...
    99+
    2023-11-16
    PyMongo 进行 MongoDB 查询和插入操作 PyMongo MongoDB
  • SpringBoot使用注解进行分页的实现示例
    目录依赖安装添加公共返回实体类普通实体类 AjaxResult分页实体类 PageResult注解处理分页注解 Pagination使用AOP进行分页使用注解编写Controller...
    99+
    2024-04-02
  • 【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
    文章目录 分析慢SQL的步骤慢查询日志(定位慢sql)基本介绍慢查询日志是什么?特别说明 查看慢查询日志是否开以及如何开启设置慢SQL的时间阈值查看阈值设置阈值 查询慢查询日志文件...
    99+
    2023-09-18
    mysql sql adb
  • 中文分词入门:使用IK分词器进行文本分词(附Java代码示例)
    1. 介绍 中文分词是将连续的中文文本切分成一个个独立的词语的过程,是中文文本处理的基础。IK分词器是一个高效准确的中文分词工具,采用了"正向最大匹配"算法,并提供了丰富的功能和可定制选项。 2. I...
    99+
    2023-09-14
    中文分词 java python
  • Java使用DateUtils对日期进行数学运算经典应用示例【附DateUtils相关包文件下载】
    本文实例讲述了Java使用DateUtils对日期进行数学运算的方法。分享给大家供大家参考,具体如下:最近在写数据上传的程序,需要对Date进行一些数学运算,个人感觉在java中,日期的数学运算还是比较常用的,所以把Date的数学运算都玩了...
    99+
    2023-05-30
    java dateutils 日期
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作