
步骤: 1、获取iframe节点 2、获取iframe中的变量 示例 ahtmlbhtml var y='1';在ahtml中获取y,则可以通过以下方式documentframes['x']y //先获取frame,在获取y
因为所有的哈希函数都接收类型为 Byte() 的输入,因此可能需要将初始数据转换成一个字节数组才能够为它产生哈希值。欲为一个字符串值建立一个哈希值,请依下列步骤进行:1、使用Using语句导入System、SystemSecurity、SystemSecurityCryptographic与SystemText命名空间,这样一来,您才不需要于程序代码中编写一长串的完整名称:using SystemDrawing;using SystemText;using SystemWindowsForms;using SystemSecurityCryptography;2、声明一个字符串变量来持有您的初始数据,并声明两个字节数组(未定义大小)来持有初始字节与所产生出的哈希值:string sSourceData;byte[] tmpSource;byte[] tmpHash;3、使用 GetBytes() 方法(它是SystemTextASCIIEncoding类的一部分)将您的初始字符串转换至一个字节数组中:sSourceData = "MySourceData";// 根据初始数据来建立一个字节数组tmpSource = ASCIIEncodingASCIIGetBytes(sSourceData);4、通过调用MD5CryptoServiceProvider类的实例的ComputeHash方法来为您的初始数据计算出MD5哈希值。请注意,欲计算出另外一个哈希值,您必须建立该类的另外一个实例。// 根据初始数据计算出哈希值tmpHash = new MD5CryptoServiceProvider()ComputeHash(tmpSource);5、tmpHash字节数组现在会获取您初始数据的哈希值(128位值=16字节)。将此显示或储存成一个十六进制字符串通常会非常有用,下列程序代码即是进行此项处理:lblHashResultText = sSourceData + "\n" + ByteArrayToString(tmpHash) + "\n";private string ByteArrayToString(byte[] arrInput){StringBuilder sOutput = new StringBuilder(arrInputLength);for (int i = 0; i < arrInputLength; i++)return sOutputToString();}6、通过上述程序代码,您便能够为初始数据产生出哈希值并以一个十六进制字符串来表示。接下来,我们要继续说明如何比较两个哈希值。为初始数据建立哈希值的目的之一,就是要提供一种方式来检查数据是否被更改过,或是不通过实际的值来比较两个值。不论是哪一种情况,您都需要比较两个哈希值。然而,如果两个哈希值皆已储存成十六进制字符串,则比较哈希值的 *** 作将会更加简易。当然,也有可能两个哈希值都是以字节数组的形式存在。后续步骤的程序代码将延续先前步骤的程序代码,以便示范如何比较两个字节数组。7、请在建立一个十六进制字符串的地方,紧接着根据新的初始数据建立一个新的哈希值:sSourceData = "NotMySourceData";tmpSource = ASCIIEncodingASCIIGetBytes(sSourceData);byte[] tmpNewHash;bool bEqual = false;tmpNewHash = new MD5CryptoServiceProvider()ComputeHash(tmpSource);8、比较两个字节数组最直接了当的方式就是通过循环依序处理数组,以便一一比较两数组中的每一个元素。如果有任何元素不相同,或是两数组的大小不相同,则表示两值并不相等:if(tmpNewHashLength == tmpHashLength){int i = 0;while((i < tmpNewHashLength) & & (tmpNewHash[i] == tmpHash[i])){i += 1;} if(i == tmpNewHashLength){bEqual = true;}}if (bEqual){lblHashResultText += "这两个哈希值是相同的";}else{lblHashResultText += "这两个哈希值并不相同";}9、保存与运行您的项目,以便查看根据第一个哈希值所建立的十六进制字符串,并确认新的哈希值是否与初始的相同。
攻击机:kali 2020(192168107129)
DC:Windows Server 2012 R2(192168107137)
msf已成功通过msf获取到DC的shell
刚获取的shell为普通用户权限,需要进行提权,然后获取hash
直接使用getsystem失败,使用ps命令查看当前进程及运行用户权限
可以看到所运行的进程皆为普通用户权限
这里为了方便,直接使用msf提供的模块,用于快速识别系统中可能被利用的漏洞:
具体原理参考: BypassUAC------使用EVENTVWREXE和注册表劫持实现“无文件”UAC绕过
成功绕过UAC获取shell:
通过进程注入获取system权限,并获取hash
原理:
哈希传递攻击是基于NTLM认证的一种攻击方式。哈希传递攻击的利用前提是我们获得了某个用户的密码哈希值,但是解不开明文。这时我们可以利用NTLM认证的一种缺陷,利用用户的密码哈希值来进行NTLM认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击登录内网中的其他机器。
哈希传递攻击适用情况:
在工作组环境中:
在域环境中:
Metasploit下面有3个psexec模块都可以进行Hash传递利用
第一个模块(auxiliary/admin/smb/psexec_command):
缺点:只能运行单条命令,不支持网段格式批量验证
优点:奇怪的是其他普通用户的hash也可以执行系统命令,这个模块可能不属于hash传递的范畴?这个坑以后再来解,我太菜了,望大佬指点~
设置命令的时候可以配合exploit/multi/script/web_delivery从而获取meterpreter
在上面进行Hash传递的时候,只要后面的NTLM Hash是正确的,前面填写什么都是可以顺利登陆成功的。
第二个模块(exploit/windows/smb/psexec):
利用条件:
优点:该模块支持网段格式批量验证,成功后可直接获取meterpreter且为system权限,在实战中优先使用
第三个模块(exploit/windows/smb/psexec_psh):
使用powershell作为payload。这个模块也支持网段批量验证,这里就不再赘述了
当我们获得了内网中一台主机的NTLM哈希值,我们可以利用mimikatz对这个主机进行哈希传递攻击,执行命令成功后将会反d回cmd窗口
mimikatz中pth功能的原理:
windows会在lsass中缓存hash值,并使用它们来ntlm认证,我们在lsass中添加包含目标账号hash的合法数据结构,就可以使用类似dir这些命令进行认证
目标主机:192168107140
domain:SWS-PC
执行后会d出cmd,执行以下命令即可远程连接:
创建计划任务反dshell:
理论上来说是可行的,win7复现的时候,任务一直在运行,就是没结束,我也是醉了
当然这里使用powershell远程加载也是可以的,但由于环境因素无法复现
前提条件:获取到的beacon为system权限,user中带有号的用户
在得到一个beacon的基础上,先在该网段portscan,探测存活主机后
选择View-->Target-->Login-->psexec,可批量选择主机pth
个人觉得还是Msf好用,成功率更高一些
项目地址: >
定义一个singleton对象,其中包括这个Hashtable的对象,这个singleton向外提供读写Hashtable对象的接口,也就是作为一个wrapper facade。这样,多线程可以共享这个singleton对象来访问hashtable。
注意:singleton对象必须使用双检查校验模式,或者使用微软C#特有的singleton模式,以确保线程安全!
以上就是关于Js 怎么获取 / 改变子级 iframe的 hash 值全部的内容,包括:Js 怎么获取 / 改变子级 iframe的 hash 值、C#中如何产生与比较哈希值、Windows之hash利用小结等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)