渗透测试工程师——安全服务工程师面试问题

渗透测试/安全服务面试问题

基础篇

Top10

OWASP TOP 10 是根据开放 Web 应⽤程序安全项⽬公开共享的 10 个最关键的 Web 应⽤程序安全漏洞列表。

失效的访问控制
加密机制失效
注入
不安全设计
安全配置错误
自带缺陷和过时的组件
身份识别和验证错误
软件和数据完整性故障
安全日志和监控故障
服务端请求伪造SSRF

常见端口和服务

FTP 
20  
服务器真正传输所用的端口,用于下载和上传
    
FTP
21  
用于ftp的登陆认证

SSH、SFTp   
22  
加密的远程登陆、文件传输

Telent  
23  
远程登陆(在本地主机上用此端口与远程服务器的22/3389端口进行连接)

SMtp    
25  
用于发送邮件

DNS
53
域名解析

HTTp
80
网页浏览

POP3
110
sun公司的RPC服务所有端口

Network News Transfer Protocol
119
NEWs新闻组传输协议,承载USENET通信

SMTP
161
Simple Network Management Protocol,简单网络管理协议

SNMP Trap
160、162
SNmp陷阱

HTTPS
443
加密的网页浏览端口

CIFS
445
公共internet文件系统

sql server
1433
sql server服务端口

oracle
1521
oracle数据库端口

NFS
2049
通过网络,让不同的机器、不同的操作系统实现文件共享

Mysql
3306
mysql数据库端口

win2003远程登陆
3389
win 2000(2003)server
远程桌面的服务端口
本地服务器开放此端口去连接服务器

QQ
4000
腾讯客户端开发此端口

redis
6379
redis数据库端口

weblogic
7001
一个基于java架构的中间件,weblogic是用于开发、集成、部署和管路大型分布式web应用、网络应用和数据库应用的java应用服务器

Wingate
8010
wingate代理开放此端口

tomcat
8080
www代理开发此端口

常见端口渗透方式描述

  FTP							21				匿名登陆、爆破
  ssh							22				爆破
  Telnet						23				爆破、嗅探
  sql server					1433			弱口令、注入、爆破
  Oracle						1521			弱口令、注入、爆破
  mysql							3306			弱口令、注入、爆破
  WebLogic						7001			java反序列化、弱口令
  Redis							6379			未授权访问、弱口令
  Jboss							8080			反序列化、弱口令
  Zabbix						8069			sql注入、远程代码执行

http返回状态码

信息响应 (100–199)
成功响应 (200–299)
重定向消息 (300–399)
客户端错误响应 (400–499)
服务端错误响应 (500–599)

http状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

http状态返回代码 代码   说明
100   (继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 
101   (切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。

http状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。

http状态返回代码 代码   说明
200   (成功)  服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201   (已创建)  请求成功并且服务器创建了新的资源。
202   (已接受)  服务器已接受请求,但尚未处理。
203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。
204   (无内容)  服务器成功处理了请求,但没有返回任何内容。
205   (重置内容)服务器成功处理了请求,但没有返回任何内容。
206   (部分内容)  服务器成功处理了部分 GET 请求。

http状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。

http状态返回代码 代码   说明
300   (多种选择)  针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301   (永久移动)  请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303   (查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304   (未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305   (使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

http状态返回代码 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

http状态返回代码 代码   说明
400   (错误请求)服务器不理解请求的语法。
401   (未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403   (禁止)服务器拒绝请求。
404   (未找到)服务器找不到请求的网页。
405   (方法禁用)禁用请求中指定的方法。
406   (不接受)无法使用请求的内容特性响应请求的网页。
407   (需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408   (请求超时)  服务器等候请求时发生超时。
409   (冲突)  服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410   (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。
411   (需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412   (未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413   (请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414   (请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
415   (不支持的媒体类型)请求的格式不受请求页面的支持。
416   (请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码。
417   (未满足期望值)服务器未满足"期望"请求标头字段的要求。

http状态返回代码 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

http状态返回代码 代码   说明
500   (服务器内部错误)  服务器遇到错误,无法完成请求。
501   (尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502   (错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503   (服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505   (HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。 

一些常见的http状态返回代码为:

200 - 服务器成功返回网页
404 - 请求的网页不存在
503 - 服务不可用

判断目标操作系统

大小写检测:windows大小写不敏感,反之linux的大小写非常敏感
ping检测:根据ttl值,windows一般情况下>100,反之linux<100

正反代理区别

正向代理即是客户端代理,代理客户端、服务端不知道实际发起请求的客户端
反向代理即是服务端代理,代理服务端、客户端不知道实际提供服务的服务端

正反shell区别

正向:攻击者连接被攻击者机器,可用于攻击者处于内网,被攻击者处于公网的情况
反向:被攻击者主动连接攻击者,可用于攻击者处于内网,被攻击者处于公网的情况

序列化/反序列化概念

序列化:把对象转化为可传输的字节序列过程称为序列化
反序列化:把字节序列还原为对象的过程称为反序列化

信息收集具体收集什么信息

1.服务器的相关信息
    真实ip,服务器操作系统及其版本,数据库类型及其版本,开发端口及其对应服务
2.网站相关信息
    cms(内容管理系统)、web容器/框架、cdn、指纹、旁站、c段信息
3.域名相关信息
    子域名,whios查询(查询域名的ip以及所有者等信息的传输协议),公司名称,注册人或者机构信息、公司或个人联系方式(邮箱,手机号码等信息),备案号
4.具体站点信息
    漏洞扫描,目录爆破,robots.txt

如何识别CDN

	使用ping命令看回显
	使用nslookup查询域名解析,看域名解析情况
	使用超级ping工具,像Tools、all-toll.cn

如何绕过cdn寻找真实ip

1.查询历史dns记录
    查看ip和域名绑定的历史记录,利用站长工具,微步在线等网站可能会找到使用cdn之前的真实ip,网站在刚建站的时候不会使用cdn
2.查询子域名
    收集子域名信息,如果子域名对应的ip不存在cdn,就可以利用这些ip来辅助查找目标网站的真实ip
3.查询主域名
    有些网站为了方便维护只让www域名使用cdn,把目标域名前面的www.去掉ping一下可能就是网站的真实ip
4.通过邮件服务器查找
    一般邮件系统都在内部,没有经过cdn的解析,通过用户注册、找回密码以及rss邮件订阅等功能接受目标发生的邮件,查找源码(或者信息头)就有可能得到目标网站的真实ip
5.使用国外主机解析域名
    国内很多cdn厂商只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问可能就能获取真实ip
6.网站漏洞查找 ssrf
    利用网站自身存在的漏洞,很多情况下会泄露服务器的真实IP地址
7.利用ssl证书寻找真实ip
    真实颁发机构ca必须将他们发布的每个ssl/tls证书发布到公共日志中,ssl/tls证书通常报包含域名、子域名和电子邮件地址。使用censys等工具搜索目标网站信息
8.F5 LTM解码法
    当服务器使用f5 ltm做负载均衡时,通过对set-cookie关键字的解码真实ip也可获取,例如:
    set-cookie:
    BIGipServerpool_8.29_8030=487098378.24095.0000,先把第一小节的十进制数即487098378取出来,然后将其转为十六进制数1d08880a,接着从后至前,以此取四位数出来,也就是0a.88.08.1d,最后依次把他们转为十进制数10.136.8.29,也就是最后的ip。
9.网络空间搜索引擎
    根据网站特征或者响应内容特征等查找目标网站信息,当然也可以直接通过域名查找
10.fuckcdn

怎么验证找到的ip是否为真实ip

使用端口扫描工具扫描开了哪些端口,然后结合开放的端口直接访问找到的ip,看看响应的页面是不是和访问域名返回一样。

如何建立隐藏用户

net user test$ 123456/add [建立隐藏用户]
net localgroup administrators test$ /add[将隐藏用户加入管理组]

判断网站的cms有什么意义

查找已曝光的漏洞
如果开源,还能下载相应的源码进行代码审计。
根据cms特征关联词同cms框架站点,进行敏感备份文件扫描,有可能获得站点备份文件。

常见的FOFA打点查询语句

	漏洞方面:body=“Index of/”(列目录漏洞)
	框架:body=“icon-spring-boot-admin.svg"(Spring Boot Admin)
	子域名:host="x.cn"
	后台挖掘:title="后台” && body=“password" && host="x.cn"

漏洞篇

sql注入的原理和产生原因

sql注入原理:
    通过某种方式将恶意的代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法
漏洞产生原理(实现条件):
    用户对sql查询语句参数可控
    对于传输来的语句没有过滤
    原本程序要执行的sql语句,拼接了用户输入的恶意数据

sql注入的类型

1.联合查询
2.堆叠注入
3.宽字节注入
4.cookie注入
5.xff头注入
6.ua注入
7.referer注入
8.base64注入
9.二次注入
10.万能密码:1' or 1=1 -- qwe
11.文件读写

盲注类型:
    1.基于时间的盲注:sleep() benchmark()
    2.基于布尔的注入
    3.基于报错的注入:updatexm()、extractvalue()、floor()、exp()

预防sql注入的方法和原理?

1.预编译(数据库不会将参数的内容视为sql命令执行,而是作为一个字段的属性值来处理)
2.PDO预处理(本地和mysql服务端使用字符集对输入进行转义)
3.正则表达式过滤(如果用户输入了非法信息则利用正则表达式过滤)

如何区分内网中SQL注入攻击事件和正常业务请求?

可以通过请求体中的payload进行判断,正常业务请求的SQL语句通体较长且无敏感的函数使用,SQL注入攻击事件请求体中的payload通常较短且语句中有敏感函数如sleep、updataxml等等。

sql注入有哪些绕过方式

1.大小写绕过
2.双写绕过
3.编码绕过注入
4.内联注释绕过注入

sql注入有哪些危害

1.获取数据库数据
    数据库中存放的用户的隐私信息的泄露,脱取数据库中的数据内容(脱库),可获取网站管理账号,密码悄无声息的进行对网站后台进行操作等。
2.网页篡改
    通过操作数据库对特定网页进行篡改,严重影响正常业务进行与受害者信誉。
3.网页挂马
    将恶意文件或者木马下载链接写入数据库中,修改数据库字段,进行挂马攻击。
4.篡改数据库数据
    攻击数据库服务器,篡改或者添加普通用户或者管理员账号。
5.获取服务器权限
    列取目录、读取、写入shell文件获取webshell,远程控制服务器,安装后门,经由数据库服务器提供的操作系统支持,让攻击者得以修改或控制操作系统。

XSS的原理和类型

原理:攻击者在web页面中注入恶意的script代码,当用户浏览该网页时,嵌入的script代码会被执行,从而达到攻击的目的。
类型:反射型xss  存储型xss   dom型xss

XSS的绕过方法

1.大小转换
2.引号的使用
3.使用/代替空格
4.双写绕过
6.使用制表符 换行符 回车符
7.使用img源

XSS的危害

窃取cookie
捉取屏幕截图
获取键盘记录
重定向
植入广告,恶意链接
网页钓鱼
网页挂马
结合网页挂马或者其他工具(Metasploit)获取服务器或者操作系统权限

XSS的防范

1.对用户的输入进行过滤
    比如说添加黑白名单规,例如说对& “ ‘ / javascript impot 等敏感字符进行转义
2.使用httpOnly Cookie
    如果cookie中设置了httponly属性,那么通过js脚本将无法获取到cookie信息,这样能有效的防止xss攻击,窃取cookie内容
3.设置x-xss-protection属性
    该属性被所有的主流浏览器默认开启,x-xss-protection,即xss保护属性,是设置在响应头中目的是用来防范xss攻击。再检查到xss攻击时,停止渲染页面。
4.开启csp网页安全策略
    csp是网页安全策略(Content Security Policy)的缩写,开启策略后可以起到以下作用:禁止加载外域代码,防止复杂的攻击逻辑;禁止外域提交,网站被攻击后,用户的数据不会泄露到外域;禁止内联脚本执行(规则较严格,目前发现github在使用);禁止未授权脚本的执行(Google Map 移动版在使用。)合理使用上报及时发现xss,利于尽快修复问题。
5.尽量不要使用onload=“onload('{{data}}')”、onClick=“go(’{{action}}’)”
    这种拼接内联事件的写法。在javascript中通过.addEventlistener()时间绑定会更安全。
6.使用模板本引擎
    开启模板引擎自带的html转移功能。
    例如: 在 ejs 中,尽量使用 而不是 ; 在 doT.js 中,尽量使用 {{! data } 而不是 {{= data }; 在 FreeMarker 中,确保引擎版本高于 2.3.24。

CSRF漏洞原理

web应用程序在用户进行敏感操作时,如修改账号密码、添加账号,转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
受害者A登陆网站,攻击者B构造有效链接诱导受害者A访问,网站在线期间会将该请求当做正常业务执行。(比如修改密码,向某用户转账等业务)

CSRF漏洞类型

GET类型
POST类型
比如在一个页面中构造好一个表单,将这个页面隐藏在一个不可见的iframe窗口中,然后使用js自动提交这个表单,在整个过程中,对于用户来说是不可见的,当用户访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。

CSRF漏洞危害

盗用其他用户或者管理员的账号
获取个人隐私或者机密条件
联合其他漏洞组合拳
比如拿到管理员账号之后,我们在某个页面利用xss漏洞进行网页挂马,普通用户访问后就会下载木马程序,进而联合msf或者cs等工具gershell。再比如说把管理员账号密码进行还原,真正管理员登陆的时候也会收到网页挂马的影响,结合工具可以进一步拿下管理员主机权限。

CSRF漏洞防范规范

1.验证码验证
    验证码是被认为是对抗CSRF攻击最简洁而有效的防御方法
    CSRF攻击的过程,往往是在用户不知道的情况下构造了网络请求。而验证码,则强制用户必须与应用进行交互,才能完成最终请求。因此在通常情况下,对用户执行敏感操作时进行验证,就能够很好地遏制CSRF够攻击。
    但是验证码并非万能的。很多时候,出于用户体验考虑,网站并不能给所有的操作都加上验证码,因此,验证码只能作为CSRF防御的一种辅助手段,而不能作为最主要的解决方案。
2.请求地址中加上token值
    CSRF攻击之所以能成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie来通过安全验证。
    要抵御 CSRF关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。
    可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
3.验证 HTTP头的Referer 字段
    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,头信息里会包含Referer。
    比如我在www.google.com 里有一个www.baidu.com 链接,那么点击这个链接,它的头信息里就会有:
                Referer=http://www.google.com
    通过验证Referer,可以判断请求的合法性,如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
4.HTTP 头中自定义属性并验证
    这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。缺陷是要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,就意味着可能要重写整个网站,这代价无疑是不能接受的。

SSRF漏洞原理?

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

当攻击者想要访问服务器B上的服务,但是由于存在防火墙或者服务器B是属于内网主机等原因导致攻击者无法直接访问。如果服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,达到攻击内网的目的。

SSRF漏洞经常存在的位置?

分享:通过URL地址分享网页内容
转码服务
在线翻译
图片加载与下载:通过URL地址加载或下载图片
图片、文章收藏功能
未公开的api实现以及其他调用URL的功能

SSRF漏洞绕过手法?

利用@绕过限制白名单域名
利用@,当网站限制只能访问 http://www.xxx.com类型的域名时,可以采用http基本身份认证的方式绕过,如:http://www.xxx.com@www.xxc.com

绕过限制白名单内网IP

采用短网址绕过

利用特殊域名,xip.io可以指向任意域名(原理是DNS解析),即      127.0.0.1.xip.io,可以解析为127.0.0.1

采用进制转换,127.0.0.1      八进制:0177.0.0.1;十六进制:0x7f.0.0.1;十进制:2130706433

利用[::],http://[::]:80/ 会解析为 http://127.0.0.1

添加端口号,http://127.0.0.1:8080

利用句号,如127。0。0。1 会解析为      127.0.0.1

采用302跳转

绕过限制请求http协议

SSRF漏洞的危害?

对外网、服务器所在内网、本地进行端口扫描
向内部任意主机的任意端口发送payload来攻击内网服务
DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
攻击内网的web应用,如直接SQL注入、XSS攻击等
利用file、gopher、dict协议读取本地文件、执行命令等
可以无视网站CDN

SSRF漏洞的防范方法?

禁止跳转
过滤返回的信息
如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
统一错误信息
避免用户可以根据错误信息来判断远程服务器的端口状态。
限制请求的端口
比如80,443,8080,8090。
禁止除HTTP和HTTPS外的协议
比如说仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://请求等引起的问题。
对请求地址设置白名单或者限制内网IP

XXE漏洞的原理?

XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击

如何构建XXE攻击?

1.直接通过DTD外部实体声明
2.通过DTD文档引入外部DTD文档,再引入外部实体声明        
3.通过DTD外部实体声明引入外部实体声明

XXE漏洞的危害?

任意文件读取
系统命令执行
执行远程代码
DOS拒绝服务攻击
内网端口探测
攻击内网网站
钓鱼

XXE漏洞的防范?

禁用外部实体的引入
比如PHP语言中使用libxml_disable_entity_loader(true);等方式。
过滤如SYSTEM等敏感关键字,防止非正常、攻击性的外部实体引入操作。

文件上传漏洞的原理?

Web页面中文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力。

**绕过上传限制,上传可执行代码文件**

 PHP:如果系统中存在可以上传文件的功能点,就可以上传后门脚本文件,通过一些方法绕过上传限制,如果能访问后门的的话,系统存在文件上传漏洞,可以借助后门执行命令

Java:上传 jsp 代码

Asp/Aspx

Python:因为脚本需要译后生成 pyc 字节码文件,所以不存在文件上传

文件上传漏洞的绕过手法?

1.前端JS禁用绕过
在前端页面禁用JS,当然也有可能影响正常页面显示却没用

2.简单修改后缀名绕过
如果只是前端页面限制上传的文件后缀名,那么我们就可以利用burp suite等工具修改文件后缀名绕过。

3.抓包修改MIME类型
常见图片MIME类型: image/gif, image/png, image/jpeg, image/bmp, image/webp, image/x-icon, image/vnd.microsoft.icon
服务端代码是通过Content-Type的值来判断文件的类型,这样我们可以直接对文件的Content-Type值进行修改来绕过。

4.后缀名大小写绕过
如果源代码没有对文件后缀名进行大小写转换,那么只要更改文件名后缀大小写即可绕过黑名单

5.图片马绕过
使用edjpgcom等工具或者命令将图片和WebShell制作成一个图片马
GIF89a图片头文件欺骗
比如GIF89a,在webshell前面加上GIF89a,后台认为是图片,上传后再执行木马,更有效的做法是结合其他绕过方法更有针对性的绕过。

6.%00,0x00截断   
比如修改文件名为  1.php%00.jpg,如果php 版本<5.3.4   在url中%00表示ascll码的0 ,而ascii码的0,表示字符串结束,所以当url中出现%00时就会认为读取已结束,最后会被解析为  1.php,从而实现绕过

7.  .htaccess文件绕过 
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
比如说在htaccess文件中有如下内容
AddType application/x-httpd-php .png   那我们随后上传png后缀图片马即可绕过

8. .user.ini.绕过
.user.ini文件里的意思是:所有的php文件都自动包含指定的文件,比如说某网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。 再比如,你只是想隐藏个后门,这个方式是最方便的。

9.条件竞争绕过
一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否包含webshell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者可以利用这个短的时间差完成条件竞争的上传漏洞攻击。比如上传一个php文件里面这样写
<?php 
    fputs(fopen('../shell.php','w'),'');
?>

10.  ::$DATA绕过
在php代码中没有对::$DATA进行过滤,在windows中会将文件名::$DATA之后的数据当成文件流处理,保持::$DATA之前的文件名
假设上传的文件为test9.php::$DATA.jpg,如果成功上传到服务器就会去掉::$DATA.jpg变成test9.php进行保存
但是php代码中还通过strrchr函数获取文件后缀.jpg,并以该后缀作为上传之后的文件后缀
所以test9.php::$DATA.jpg上传到服务器后缀仍然是.jpg

11.  +空格+点绕过
某些情况下,源代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过

12.后缀名双写绕过
黑名单过滤,将黑名单里的后缀名替换为空且只替换一次,因此可以用双写绕过,比如1.pphphp,后端源代码过滤掉红色标注部分,剩余1.php。

13.特殊可解析后缀绕过
源代码有黑名单限制,那么我们就可以修改文件后缀名为根据后端的脚本语言能够解析的文件后缀,比如源代码是用php语言写的话,1.php1会被解析为1.php。PhP除了可以解析php后缀 还可以解析php1,php2,php3,php4 ,phtml等。Asp可解析 asa,cer,cdx。Aspx可解析 ashx,asmx,ascx。Jsp可解析jspx、jspf
然而这种绕过方法可能会让我们绕过成功,但服务器默认配置却可能不允许这些后缀的文件执行

文件上传漏洞的危害?

上传webshell,控制服务器、远程命令执行
上传系统病毒、木马文件进行挖矿、僵尸网络
进行提权操作
修改web页面,实现钓鱼、挂马等操作。
进行内网渗透。   

文件上传功能的监测点有哪些?

客户端的JS检测(主要检测文件名后缀)
服务端检测(MINE类型检测、文件后缀名、文件格式头)

文件上传功能的防范措施有哪些?

1.文件上传的目录设置为不可执行
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2.严格判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3.使用随机数修改文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4.单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

5.内容检测
有效防范图片马和文件二次渲染

6.安全加固中间件
及时更新并加固中间件,可以有效避免因为中间件的漏洞而导致的文件上传漏洞,比如某些中间件以前的版本很多都具有文件解析漏洞

7.采用WAF等安全防护设备 
采用WAF等安全防护设备可以有效的防御常见漏洞

常见的未授权访问漏洞有哪些?

Active MQ 未授权访问
Atlassian Crowd 未授权访问
CouchDB 未授权访问
Docker 未授权访问
Dubbo 未授权访问
Druid 未授权访问
Elasticsearch 未授权访问
FTP 未授权访问
Hadoop 未授权访问
JBoss 未授权访问
Jenkins 未授权访问
Jupyter Notebook 未授权访问
Kibana 未授权访问
Kubernetes Api Server 未授权访问
LDAP 未授权访问
MongoDB 未授权访问
Memcached 未授权访问
NFS 未授权访问
Rsync 未授权访问
Redis 未授权访问
RabbitMQ 未授权访问
Solr 未授权访问
Spring Boot Actuator 未授权访问
Spark 未授权访问
VNC 未授权访问
Weblogic 未授权访问
ZooKeeper 未授权访问
Zabbix 未授权访问

简述反序列化漏洞

序列化是指程序将对象转化为字节序列从而便于存储运输的一种方式,反序列化则与其相反,即将字节序列转化为对象供程序使用。程序在进行反序列化时会调用一些函数,比如常见的PHP 反序列化函数 unserialize()以及一些常见的魔术方法,比如构造函数_construct(),析构函数destruct() ,_wakeup(),toString(0) ,sleep0等等。如果这些函数在传递参数时没有进行严格的过滤措施,那么攻击者就可以构造恶意代码并将其序列化后传入函数中,从而导致反序列化漏洞

常见的逻辑漏洞有哪些?

验证码相关的,例如重复利用,验证码无效等,越权漏洞等等
代码执行、命令执行、文件读取的函数有哪些?
代码执行eval、call_user_func、call_user_func_array等
文件读取fopen()、readfile()、fread()、file()、show_source()等
命令执行system()、exec()、shell_exec()、passthru()、pcntl_exec()等

常见的中间件和对应漏洞有哪些?

•IIS:PUT漏洞、短文件名猜解、远程代码执行、解析漏洞
•Apache:解析漏洞、目录遍历
•Nginx:文件解析、目录遍历、CRLF注入、目录穿越
•Tomcat:远程代码执行、war后门文件部署
•JBoss:反序列化漏洞、war后门文件部署
•WebLogic:反序列化漏洞、SSRF任意文件上传、war后门文件部署
•ApacheShiro反序列化漏洞:ShirorememberMe(Shiro-550)、            ShiroPaddingOracleAttack(Shiro-721)

fastjson漏洞利用原理?

在请求包里面中发送恶意的 json 格式 payload,漏洞在处理 json 对象的时候, 没有对@type 字段进行过滤,从而导致攻击者可以传入恶意的 TemplatesImpl 类,而 这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes 生成 java 实例,这就达到 fastjson 通过字段传入一个类,再通过这个类被生成时执行构造函数。

Shiro漏洞原理

Apache Shiro框架提供了记住我的功能(RemeberMe),用户登录成功后会生成经过加密并编码的cookie。

cookie的key为RemeberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的

在服务端接收cookie值时,按以下步骤解析:

检索RemeberMe cookie的值
Base 64解码
使用AES解密(加密密钥硬编码)
进行反序列化操作(未作过滤处理)
在调用反序列化的时候未进行任何过滤,导致可以触发远程代码执行漏洞

Apache Shiro框架提供了记住我的功能(RemeberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞

如何发现shiro漏洞?

登陆失败时候会返回 rememberMe=deleteMe 字段或者使用 shiroScan 被动扫描去发现

哪些漏洞会被高频利用于打点?

a.ApacheShiro相关漏洞
b.Fastjson漏洞 
c.Log4j
d.上传漏洞
e.边界网络设备资产+弱口令
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值