1,拿到一个待测网站,你觉得应该先做什么?
信息收集:
服务器相关---:## 系统版本,真实IP,开放端口,使用的中间件
指纹信息---## 有无cdn加速,dns解析记录,是不是cms系统,ssl证书信息
whois信息--- ## 备案信息,邮箱,手机号,姓名
子域名,旁站,C段敏感目录扫描等
漏洞测试
sql注入,xss,csrf,弱口令,文件包含,任意文件上传下载,远程命令执行,敏感信息泄漏,目录遍历等
2,常见的应急排查方式
Linux
1,账户安全 --- 查看有无异常用户
2,历史命令
3,异常进程和端口
4,异常程序
5,开机启动项
6,检查定时任务
7,检查服务
8,检查异常文件
9,检查系统日志
10,检查web日志
Windows
1,账户安全
2,异常进程和端口
3,异常程序
4,检查开机启动项
5,检查定时任务
6,检查服务
7,检查系统日志和web日志 -------------- 分析一些状态码信息
8,排查可疑文件
9,文件修改日期
3,给你一个网站的登录页面你要如何进行渗透测试(登录页面可能存在哪些漏洞)
登录页面
1,弱口令漏洞
2,用户名枚举漏洞
3,SQL注入漏洞
4,短信轰炸
5,任意用户登录
6,任意用户注册
7,任意用户切换
8,任意用户密码修改
9,越权注册
10,任意文件下载
11,源代码敏感信息泄漏
12,反射性xss漏洞
4,如果看到一个告警IP,如何判断是否是真实攻击?
先判断时内网IP,还是外网IP,IP有没有报备过等,看请求头信息分析有没有恶意的攻击代码,看看响应体有
没有回显,如果该IP报备过应该是内部测试导致的误报,如果是没有报备的外网IP,真的存在攻击payload,
那就是攻击行为,应该立即屏蔽该IP,内网IP有类似的情况,也有可能是来自已经被控制电脑的攻击行为,也
应该立即进项排查。
5,shiro反序列化漏洞产生过程
命令 ------------- 序列化 ----AES加密-----base64编码 -------- remeberme cookie值
6,反向shell和正向shell的区别
反向shell :## 被控制端主动与控制端进行连接,控制端打开监听,接受连接 (常用于内网中的主机无法
触网的情况)
正向shell:## 控制端主动与被控制端进项连接,被控制端需要打开监听,等待控制端连接 (平常测试)
7,如何检测webshell
静态检测:匹配特征码,特征值,危险函数来查找webshell,只能查找已知的webshell.如果进行了免杀处理很难检测到
动态检测:动态特征,如添加启动项,修改注册表,添加用户,添加定时任务等等
日志检测:webshell访问运行后会在网站日志中留下访问数据和数据提交的记录
语法检测:根据PHP语言扫描编译的实现形式,进行一个剥离代码注释,分析变量,函数,字符串,语言结构等分析方式来实现对危险函数的捕捉
8、内网代理隧道搭建
ngrok (不安全,可能存在数据泄漏,毕竟服务端用的是人家的)
frp
Stowaway GO语言写的
DNS隧道
ICMP隧道
9,ntml-hash原理
1、client(客户端)发送username到server(服务端)
2、server判断本地账户名是否存在,没有则失败,有的话生成16字节的随机challenge码,查找user对应的NTLM哈希值,使用NTLM哈希加密challenge码,生成一个net-ntlm hash存在内存中,并将将
challenge发送给client(客户端)
3、client接受到challenge以后,将自己的密码转换成NTLM哈希,用生成的哈希加密challenge生成response,发送response给server
4、server对比自己内存中的net-ntlm hash与client发来的response是否一致
5、如果密码匹配,服务器向客户端发送一个接受消息,表示认证成功。
## 注意:challenge每次认证都不一样,是一个随机生成的16字节随机数,response的形势与server生成的net-ntlm hash一个格式
10 ,Windows哈希怎么抓取
lsass.exe 这个进程负责处理登录密码 -------------- 抓取明文数据
sam文件中的数据 ---------------------- 可以读取到哈希
mimikatz 工具
## 需要管理员权限才可以,如果不是需要提权
privilege::debug ## 检查权限
sekurlsa::logonpasswords ## 获取密码
lsadump::sam ## 读取数据库中的NTML哈希值
11.Windows 哈希怎么传递
Pass The Hash 即PTH,就是通过传递Windwos 本地账户或者域用户的hash值,达到控制其他服务器的目的
## hash 传递的原理是在认证过程中,并不是直接使用用户的密码进行认证的,而是使用用户的hash值,因此,攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不需要提供明文密码。在Windows系统中,通常会使用NTLM身份认证,NTLM是口令加密后的hash值。PTH是基于smb的服务(139端口和445端口)
1、client发送账户名user到server
2、server判断本地账户名是否存在,没有则失败,有的话生成challenge,查找user对应的NTLM哈希,使用哈希加密challenge,生成一个net-ntlm hash存在内存中,将challenge发送给client
3、client接受到challenge以后,将自己的密码转换成NTLM哈希,用生成的哈希加密challenge生成response,发送response给server
4、server对比自己内存中的net-ntlm hash与client发来的response是否一致
5、如果密码匹配,服务器向客户端发送一个接受消息,表示认证成功。
## 注意:challenge每次认证都不一样,是一个随机生成的16字节随机数,response的形势与server生成的net-ntlm hash一个格式
12,怎么进行横向移动
## 横向移动指的是我们拿到了一个主机,比如是192.168.1.1 用这个主机攻击 192.168.1.2 称之为横向移动
## 横向移动可以利用Windows的文件共享服务IPC,
IPC文件共享服务 + at / schtasks(计划任务) ,把木马文件或者批处理文件通过IPC文件共享服务发送大目标主机,然后通过at(Windows2012一下版本)或者 schtasks (windows2012以及2012以上版本)在目标主机上创建计划任务,从而运行我们上传的木马文件或者批处理命令。从而达到控制目的。
1 IPC文件共享服务 + at / schtasks(计划任务)
2 IPC + sc 文件共享+ 创建服务也可以达到控制目标主机的目的
3 wmic 远程命令执行
4 msf 执行横向移动攻击,Python脚本(PSEXEC 等一些横向移动攻击工具
13,GET 和POST 的区别
get 会把数据放在URL上,通过字符串查询方式传递(不太安全)
post会把数据放在请求体中(相对安全)
get一般是向后台请求数据
post一般是向后台提交数据
get 数据一般进行URL编码
post支持多种编码传递方式
get数据在浏览器刷新或者退出无影响
post请求再浏览器刷新时会重新发送请求
get请求会缓存在浏览器历史记录
post请求不会记录在历史记录中
GEt请求会被浏览器主动缓存
POst请求不会被主动缓存
get请求传递数据大小有限制,(实际取决于浏览器)
post理论上是没有限制
get会产生一个tcp数据包,浏览器会把http header和data一并发出去,服务器相应200(返回数据)
post 产生两个数据包,浏览器先发送header,服务器相应100(continue),浏览器再发送data,服务器相应200 (返回数据)
14,xss有哪几种昂类型
反射性: 非持久性,由后端进行处理,但不会保存在数据库中
持久性:恶意代码会保存在数据库中,影响较大
DOM型:恶意代码不会由服务端处理,也不会存储在数据库中,只是由前端处理DOM节点
15,如何验证存在xss漏洞
xss漏洞:## 攻击者在网页中嵌入客户端脚本(js恶意代码),当用户使用浏览器加载别嵌入的恶意网页时,恶意代码脚本就会在用户的浏览器执行,就会导致一个跨站脚本攻击
产生原因:## 程序员写代码时没有对输入输出进行严格的过滤和格式校验或过滤过于简单可以容易绕过,攻
击者可以插入恶意代码进行攻击
本质:## 用户输入的HTML,js脚本直接输出运行
第一步:找到输入,找到用户可以操控代码的位置
第二步:找到输出的位置,输入的代码在网页哪个位置进行输出
第三步:构造pyload
16 ,CSRF 和 xss 和 XXE 有什么区别,以及修复方式?
XSS:跨站脚本攻击,用户提交数据中可以构造恶意代码,并且执行,从而实现窃取用户信息的攻击,如获取cookie等
修复方式:
## 对实体字符进行转义。
## 使用http Only 来禁止js脚本操作cookie,
## 对网页页面输入输出进行严格过滤校验
CSRF:跨站请求伪造攻击,利用站点对已经身份认证的用户的信任,即攻击者伪装成站点受信用户进行攻击。
XSS:## 利用用户对站点的信任;
CSRF:## 利用站点对已经身份认证的用户的信任,即攻击者伪装成站点受信用户进行攻击。
漏洞利用条件:
1、## 被害用户已经在站点完成身份认证
2、## 新请求的提交不需要重新身份认证或确认机制
3、## 攻击者必须了解Web APP请求的参数构造
4、## 诱使目标用户触发攻击的指令(社工)
## 需要满足至少以上的条件,才可能说存在CSRF漏洞。
攻击流程:
## 受害者登录a.com,并保留了登录凭证(Cookie)。
## 攻击者引诱受害者访问了b.com。
## b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
## a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
## a.com以受害者的名义执行了act=xx。
## 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
修复方式:
## 筛选出需要防范的CSRF的页面,然后嵌入token,再次输入密码,校验refer
XXE:外部实体注入攻击,当允许引用外部实体时,通过构造恶意内容,导致读取任意文件、执行系统命令、内网探测与攻击等危害的一类漏洞。
修复方式:非必要不要用XML格式,或者XML解析库在调用时严格禁止对外部实体的解析
17,SSRF
SRF(Server-Side Request Forgery:服务器端请求伪造) ## 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
## 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
## 比如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器
产生SSRF漏洞的函数
## SSRF攻击可能存在任何语言编写的应用,接下来将举例php中可能存在SSRF漏洞的函数。
file_get_contents:
## 用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。
sockopen():
## 使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。
curl_exec():
## cURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中,并附加了一个随机数和“.txt”文件扩展名。
当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议
file:/// ## 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// ## 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// ## SSH文件传输协议或安全文件传输协议
ldap:// ## 轻量级目录访问协议
tftp:// ## 简单文件传输协议
gopher:// ## 分布式文档传递服务,可使用gopherus生成payload
18,CSRF ,SSRF 和重放攻击有什么区别?
CSRF 是跨站请求伪造攻击,由客户端发起
SSRF 是服务端请求伪造,由服务端发起
重放攻击是将截获的数据包进行重放,达到身份认证的目的
19,XSS,CSRF,SSRF的区别?
XSS : 跨站脚本攻击
CSFR : 客户端请求伪造攻击
SSRF : 服务器端请求伪造攻击
区别:
XSS ## 是服务器没有对用户输入的数据进行严格的过滤,导致客户端浏览器在渲染时执行了攻击者插入的恶意脚本,总而导致获取用户信息或者cookie信息泄漏等。
CSRF:## 是服务器端没有对用户提交的数据进行随机值校验,而且对http请求包内的refer字段校验不严格导致攻击者可以利用网站对已经进行身份认证用户的信任来利用已经身份认证用户的cookie,伪造用户请求发送至服务端从而达到攻击目的
SSRF:## 是服务端对用户提供的可控URL过于信任,没有对攻击者提供德 URL进行地址限制或者严格的检测,从而导致攻击者可以 跳板攻击内网或其他服务器
20,拿到一个待检测网站,你该如何渗透?
## 先确定黑盒测试还是白盒测试
## 黑盒测试
## 信息收集
服务器相关信息 ---- 真实IP,系统类型,版本,开放的端口
网站指纹识别 ------- CMS,cdn ,ssl证书,dns解析记录
whois信息 ------ 姓名,备案,邮箱,电话等
子域名收集,旁站,C段,hacking
网站目录结构,敏感目录泄漏,爆破后台
## 漏洞测试:
sql注入,文件上传下载,命令执行,XSS,XXE,弱口令,文件包含等
21,JAVA反序列化了解吗?
## Java中的ObjectOutStream 类的writeObject()可以实现序列化,其中用把对象转换为字节流,便于
保存或者传输,
## 而ObjectlnputStream类的readObject()方法用于反序列化,作用就是把字节流还原成对象
## Shiro反序列化主要是Apache Shiro提供了一个remember的功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用
## 而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其base64解码,再进行AES解密,再将其反序列化进行校验
## 而漏洞就是出现在这里,我们都知道AES他是一个硬编码,他是有默认秘钥的,如果程序员没有去修改或者过于简单,难么我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(秘钥我们爆出来了),在进行base64编码,形成我们的新cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码
22,PHP反序列化有了解吗?
serialize() 序列化 unserialize() 反序列化
## 创建实例 触发 __construct()函数
## 序列化时 触发 __sleep()函数
## 反序列化 触发 __wakeup()函数
## 销毁对象 触发 __destruct()函数
无类:## 如果源码会把传入的值进行反序列化,我们需要把数据提前序列化再传入
有类:## 需要用到魔术方法,如创建对象时就会默认触发一些特定函数,比如__construc(),并执行
__construct()中的代码。
23,sqlmap中 --os-shell的利用条件以及原理
利用条件
## root权限
## 知道网站的绝对路径
## GPC 关闭
## secure_file_priv 参数为空或者指定路径
原理:
## 先对目标进行一个基础信息探测,然后上传shell到目标web网站上,利用shell传参进行命令执行,退出删除shell
## 数据库不同,条件也不同,例如SQLserver需要数据库支持外连,数据库权限为SA权限,主要利用XP_CMDshell扩展进行命令执行sql
24,Burp Suite如何爆破密码
## 把数据包放到攻击器里面,用变量对密码请求参数进行替换,然后模拟请求获取不同的相应结果,以此达
到爆破目的。
25,IPS和IDS区别
IPS:入侵防御系统
## IPS系统是电脑网路安全设施,他是防病毒软件和防火墙的补充。IPS系统是一部能够监视网络或网络设备
的网络资料传输行为的计算机网路安全设备,能够及时中断,调整或隔离一些不正常或具有伤害性的网络资料
传输行为。
## IPS对于初始者来说,他是位于防火墙和网络的设备之间的设备。这样,如果检测到攻击,IPS会在这种攻
击扩散到网络的其他地方之前阻止恶意的通信,因此IPS具有检测已知和未知攻击并且具有成功防止攻击的能
力。
26,权限维持的方法
1,匿名用户
net user administrator$ woaijiushi /add && net localgroup administrators administrator$ /add
## 通过在用户后面添加$符号的形式将用户达到隐藏的效果。
## 可以通过注册表或直接用户管理删除隐藏的用户。
2,Shift 后门
## 将 C:\WINDOWS\system32\dllcache\sethc.exe 删除,这个文件夹中放着缓存,如果不删除就会自动变回去。
## 删除 C:\WINDOWS\system32\ 下的 sethc.exe 文件。
## 重命名 C:\WINDOWS\system32\ 下的 cmd.exe 为 sethc.exe 。
## 按下 5下 shift 即可弹出管理权限的 DOS 窗口。
3、创建schtasks 计划任务
## schtasks 是 Windows 自带的命令,使用 schtasks 命令创建计划任务
## 下面这句的意思是创建一个名称是 test 的计划任务,每隔一分钟去运行一次 5555.exe 文件:
schtasks /create /sc MINUTE /mo 1 /tr C:\Users\Administrator\Desktop\mx\5555.exe /tn test
4,激活Guest用户
## Guest 用户在 Windows 上默认是不开启的,可以把他开启并添加到管理员组,但是被管理员发现的话还是很容易删除
# 设置 guest 账户密码
net user guest passwd123 # guest 账户添加到管理员组
net localgroup administrators guest /add ## 把guest用户添加到管理员组
net user guest /active:yes # 激活账户
5,添加服务,添加启动项
27,应急响应流程
1、收集信息:搜集客户信息和中毒信息,备份
2、判断类型:判断是否是安全事件、是何种安全事件(勒索病毒、挖矿、断网、ddos等)
3、深入分析:日志分析、进程分析、启动项分析、样本分析等
4、清理处置:杀掉恶意进程、删除恶意文件、打补丁、修复文件,检查后门
5、产出报告:整理并输出完整的安全事件报告
windows应急
一、查看系统账号安全
1、查看服务器是否有弱口令、可疑账号、隐藏账号、克隆账号、远程管理端口是否对公网开放
2、win+r(eventwmr.msc)查看系统日志,查看管理员登录时间、用户名是否存在异常
二、检查异常端口、进程
1、netstat -ano 检查端口连接情况,是否有远程连接、可疑连接
2、tasklist | findstr "PID"根据pid定位进程
3、使用功能查杀工具
三、启动项检查、计划任务、服务检查
1、检查服务器是否有异常的启动项,msconfig看一下启动项是否有可以的启动
2、检查计划任务,查看计划任务属性,可以发现木马文件的路径
3、见擦汗服务自启动,services.msc注意服务状态和启动类型,检查是否有异常服务
四、检查系统相关信息
1、查看系统版本以及补丁信息 systeminfo
2、查找可疑目录及文件 是否有新建用户目录 分析最近打开分析可疑文件
(%UserProfile%\Recent)
五、自动化查杀
使用360 火绒剑 webshell后门可以使用d盾 河马等
六、日志分析
360星图日志分析工具 ELK分析平台
linux应急
1、检查用户及密码文件,查看是否存在多余帐号或陌生账号,
## 主要看一下帐号后面是否是 nologin,如果没有 nologin 就要注意;
2、查看用户登录情况,用户行为
## 通过 who 命令查看当前登录用户(tty 本地登陆 pts 远程登录)、
#3 通过w 命令查看系统信息,查看某一时刻用户的行为、
## 通过 uptime查看登陆多久、多少用户,负载;
3、 查看history历史命令
4、 令分析可疑端口
## 用 netstat -antlp| more命令分析可疑端口、IP、PID,查看下 pid 所对应的进程文件路径,运行
ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的pid 号);
5、分析可疑进程
## 使用ps命令,分析进程 ps aux | grep pid
6、检查当前系统运行级别,检查运行级别对应目录下有没有可疑文件
## 使用 vi /etc/inittab 查看系统当前运行级别,通过运行级别找到/etc/rc.d/rc[0~6].d对
应目录是否存在可疑文件;
7、查看定时任务
## 看一下crontab定时任务是否存在可疑启用脚本;
8、检查服务,排查可疑服务
## 使用chkconfig --list 查看是否存在可疑服务;
9、分析系统日志和web日志,判断是否存在攻击痕迹
## 通过grep awk命令分析/var/log/secure安全日志里面是否存在攻击痕迹;
10、用工具对系统进行查杀
## chkrootkit、rkhunter、Clamav 病毒后门查杀工具对 Linux 系统文件查杀;
11、如果有 Web 站点,可通过 D 盾、河马查杀工具进行查杀或者手工对代码按脚本木马关键字、关键涵数
(evel、system、shell_exec、exec、passthru system、popen)进行查杀Webshell 后门。
28,了解哪些命令执行漏洞,说一下命令执行漏洞原理
一、原理
## 应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
二、利用条件
## 1、应用调用执行系统命令的函数
## 2、将用户输入作为系统命令的参数拼接到了命令行中
## 3、没有对用户输入进行过滤或过滤不严
三、漏洞分类
1、远程命令执行漏洞
## 远程命令执行漏洞,指用户通过浏览器提交执行操作命令, 由于服务器端,没有针对执行函数做过滤,就执行了恶意命令
2、远程代码执行漏洞
## 代码执行漏洞也叫代码注入漏洞,指用户通过浏览器 提交执行恶意脚本代码,执行恶意构造的脚本代码
四、漏洞的产生原因
1、代码层过滤不严
## 商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用:
system(“/bin/program --arg $arg”);
2、系统的漏洞造成命令注入
## 比如:bash破壳漏洞(CVE-2014-6271)
3、调用的第三方组件存在代码执行漏洞
## 如wordPress中用来处理图片的imageMagick组件
## JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
## ThinkPHP命令执行
29,测试水平越权漏洞的基本思路
越权操作类型:
## 横向越权操作(水平越权)和纵向越权(垂直越权)操作。
## 水平越权是指相同权限下不同的用户互相影响。
## 垂直越权是指使用权限低的用户影响到权限较高的用户。
## 交叉越权是指既可以水平越权又可以垂直越权。基本上只要垂直越权能做,水平越权也能做。、
三)常见越权方法
1.通过修改GET传参来越权
2.修改POST传参进行越权
3.修改cookie传参进行越权
## 注意:但凡看到可能代表身份或者某些信息的传参,都可以去尝试修改看看有没有漏洞。
(四)未授权访问
## 还有一类叫做未授权访问,即不需要权限就能访问。严格意义上而言,这个不属于越权漏洞,但是在日常
测试中常常会遇见。(比如只要输入正确的网址就可以直接访问,例如/admin默认是登录,登录后跳转到
user.php,然后你直接访问user.php,发现你直接有后台权限)
## 网站中的未授权访问通过目录扫描往往就可以发现。
(一)越权漏洞的思路
## 水平越权测试方法主要就是:看能否通过A用户的操作影响到B用户
## 垂直越权的测试思路就是:看低权限用户能否使用高权限用户专属的功能
## 一般而言,低权限用户的漏洞比较难挖,高权限的用户相对好挖(高权限用户功能多,而功能越多越可能有
漏洞)。
二)越权测试的过程
## 登录A用户时,正常更改或者是查看A用户信息,然后抓取数据包,将传参ID修改为其他用户,如果成功
查看或者修改了同权限其他用户的信息就属于水平越权测试。(如果可以影响到高权限用户就是垂直越权)
测试过程中的传参ID参数需要自己检测(常见:uid= id= user= 等)通常使用burp进行爆破传参(传参可
能在GET、POST、COOKIE传参)
(三)常见平行越权
## 不需要输入原密码的修改密码、抓包改用户名或者用户id修改他人密码、修改资料的时候修改用户id、查
看订单的时候,遍历订单id等。
30,有没有了解过红队攻防
## 有了解过,红队,一般是指网络实战攻防演习中的攻击一方。
## 红队一般会针对目标系统、人员、软件、硬件和设备同时执行的多角度、混合、对抗性的模拟攻击;通过实现系统提权、控制业务、获取数据等目标,来发现系统、技术、人员和基础架构中存在的网络安全隐患或薄弱环节。红队是以发现系统薄弱环节,提升系统安全性为目标
## 红队的工作可分为三个阶段:情报收集、建立据点和横向移动