一、撞库攻击

最近经常听到撞库攻击的有关新闻,撞库就是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。作为一个小白,我先从破解口令散列值的尝试入手。

二、Hash函数的特点

哈希函数:把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。数学表述为:h = H(M) ,其中H( )--单向散列函数,M--任意长度明文,h--固定长度散列值。

程序实现如下:(来自百度百科)

// 说明:Hash函数(即散列函数)在程序设计中的应用目标 ------ 把一个对象通过某种转换机制对应到一个
//size_t类型(即unsigned long)的整型值。
// 而应用Hash函数的领域主要是 hash表(应用非常广)、密码等领域。
// 实现说明:
// ⑴、这里使用了函数对象以及泛型技术,使得对所有类型的对象(关键字)都适用。
// ⑵、常用类型有对应的偏特化,比如string、char*、各种整形等。
// ⑶、版本可扩展,如果你对某种类型有特殊的需要,可以在后面实现专门化。
// ⑷、以下实现一般放在头文件中,任何包含它的都可使用hash函数对象。
//------------------------------------实现------------------------------------------------
#include <string>
using std::string;
inlinesize_thash_str(const char* s)
{
unsigned long res = 0;
for (; *s; ++s)
res = 5 * res + *s;
returnsize_t(res);
}
template <class Key>
struct hash
{
size_toperator () (const Key& k) const;
};
// 一般的对象,比如:vector< queue<string> >;的对象,需要强制转化
template < class Key >
size_thash<Key>::operator () (const Key& k) const
{
size_tres = 0;
size_tlen = sizeof(Key);
const char* p = reinterpret_cast<const char*>(&k);
while (len--)
{
res = (res<<1)^*p++;
}
return res;
}
// 偏特化
template<>
size_thash< string >::operator () (const string& str) const
{
return hash_str(str.c_str());
}
typedef char* PChar;
template<>
size_thash<PChar>::operator () (const PChar& s) const
{
return hash_str(s);
}
typedef const char* PCChar;
template<>
size_thash<PCChar>::operator () (const PCChar& s) const
{
return hash_str(s);
}
template<> size_t hash<char>::operator () (const char& x) const { return x; }
template<> size_t hash<unsigned char>::operator () (const unsigned char& x) const { return x; }
template<> size_t hash<signed char>::operator () (const signed char& x) const { return x; }
template<> size_t hash<short>::operator () (const short& x) const { return x; }
template<> size_t hash<unsigned short>::operator () (const unsigned short& x) const { return x; }
template<> size_t hash<int>::operator () (const int& x) const { return x; }
template<> size_t hash<unsigned int>::operator () (const unsigned int& x) const { return x; }
template<> size_t hash<long>::operator () (const long& x) const { return x; }
template<> size_t hash<unsigned long>::operator () (const unsigned long& x) const { return x; }
// 使用说明:
//
// ⑴、使用时首先由于是泛型,所以要加上关键字类型。
//
// ⑵、其次要有一个函数对象,可以临时、局部、全局的,只要在作用域就可以。
//
// ⑶、应用函数对象作用于对应类型的对象。
//----------------------- hash函数使用举例 -------------------------
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> vstr⑵;
vstr[0] = "sjw";
vstr[1] = "suninf";
hash<string> strhash; // 局部函数对象
cout << " Hash value: " << strhash(vstr[0]) << endl;
cout << " Hash value: " << strhash(vstr[1]) << endl;
cout << " Hash value: " << hash< vector<string> >() (vstr) << endl;
cout << " Hash value: " << hash<int>() (100) << endl; // hash<int>() 临时函数对象
return 0;
}

哈希函数最大的特点就是单向性(one-way),由明文计算散列值是极其容易的,但从散列值推得明文在计算上不可行。而hash函数的抵抗强碰撞性和抵抗弱碰撞性,是目前的两个突破点。

破解口令散列值即从这里进行尝试。

三、基于彩虹表的散列值破解攻击

1.首先来个题外话,根据口令设置中对字符的要求设定可用字符集和字符数量,假设目前只支持英文字母大小写和阿拉伯数字0123456789,先基于使用字符生成用户口令词典。

使用crunch工具,它的基本语法是 crunch [minimum length] [maximum length] [character set] [options]

-o:这个选项允许你指定输出列表的文件名称和位置

-b:这个选项允许你指定每个文件的最大字节数。大小可以以 KB/MB/GB 来指定,并且必须和-o START触发器一起使用。

-t:这个选项允许你指定所使用的模式。

-l:在使用-t选项时,这个选项允许你将一些字符标识为占位符(@,%,^)

现在要做的是:执行命令来在桌面上创建密码列表,它最少8 个字母,最大 10 个字符,并且使用字符集ABCDEFGabcdefg0123456789。

crunch 8 10 ABCDEFGabcdefg0123456789 –o /root/Desktop/ generatedCrunch.txt

使用如下指令:crunch 4 5 ABCDEFGabcdefg0123456789 –o /root/Desktop/ generatedCrunch.txt

可使用nano打开文件

也可直接打开。

就这样,我们使用了Crunch 来生成密码字典列表。

2.使用彩虹表 rainbowcrack

使用rtgen工具生成彩虹表,具体操作如下图所示:

指令和选项整理详细内容参照官方文档:http://project-rainbowcrack.com/documentation.htm

彩虹表生成完毕需要2-7个小时,最后生成.rt文件。

为简化实验数据量,仅用数字生成散列值,1-4位:

花费时间约2.5小时。文件大小为536.9MB。

为了方便使用彩虹表,可以进行排序:

再次尝试:

基于彩虹表进行散列值的破解:

可知该散列值破解结果为2342.

使用6666生成散列值:

e9510081ac30ffa83f10b68cde1cac07

运行之后:

Yes!!!

密码攻击之基于字典和彩虹表的密码攻击相关推荐

  1. 为什么MD5不可逆, 彩虹表是怎么攻击的

    为什么MD5是不可逆的? 先说大白话版本的,因为MD5算法里面有很多不可逆的运算.比如移位,假设:10010001 左移两位后是:01000100,你有什么办法把它移回来吗?移出去的已经找不回了哦. ...

  2. java arp 攻击_基于Jpcap的Java ARP断网攻击

    这是大二学习计算机网络的时候写的一个小程序,可实现局域网内断网攻击.这也作为学习网络层.数据链路层(在OSI模型中ARP协议属于链路层:而在TCP/IP模型中,ARP协议属于网络层)的其中一个小实验吧 ...

  3. 高效的密码攻击方法:彩虹表

    为了保护账号安全,几乎所有网站都不会保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中,每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的哈希串比对 ...

  4. 高效的彩虹表密码攻击法

    背景 为了保护账号安全,几乎所有网站都不会明文保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中.每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的 ...

  5. 彩虹表破解开机密码、MD5算法等的原理

    http://www.91ri.org/7593.html  自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...

  6. 彩虹表(rainbow table)

    1 彩虹表引入 在看微众银行开源的WeIdentity规范中的可验证凭证Credential数据结构时,看到有关于防止彩虹表方式反向破解哈希的问题,如下图所示. 在执行选择性披露用户的信息时,是将cl ...

  7. 单表代替和多表代替密码体系

    一.实验目的及要求 1. 掌握单表代替和多表代替密码体系 2. 从单表代替或多表代替密码中选取一个密码系统(除凯撒密码),编写程序实现该密码系统 二.实验设备(环境)及要求 PC机, VC++等 三. ...

  8. aircrack_hashcat非字典高速破解目标无线密码

    目录 aircrack & hashcat 非字典高速破解目标无线密码 aircrack & hashcat 非字典高速破解目标无线密码 0x01 挂载好外置无线网卡 ​ 把用于抓包的 ...

  9. JS实现单表代换密码加密

    单表代换加密算法是比较经典的加密算法,事先准备好字母代换的相应对照表,即可实现加密解密,这里我们用JS进行实现. 明文字母与密文字母对应关系: 明文 a b c d e f g h i j k l m ...

  10. 基于Memcached的DRDos的研究与攻击复现

    [声明]本文仅作学习研究之用,欢迎一起探讨,请勿发动恶意攻击,否则后果自负! 核弹级DDoS攻击肆掠全球 进入3月,春天到了,万物复苏,又到了动物交配的季节!咦!不对不对,我要说什么来着..O(∩_∩ ...

最新文章

  1. 查看linux中的TCP连接数
  2. SpringBoot之部署以及Maven打包切换环境
  3. 第2本书:CCIE Practical Studies, Volume II-第5天
  4. 最难学编程语言排汗榜
  5. 29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?
  6. 攀升电脑九周年:“9”要追新,捍卫热爱
  7. add_argument函数action参数的store_true==》在运行程序添加参数时直接输入变量名,可以省略对应的默认值True或者False
  8. SVN代码回滚命令之---merge的使用
  9. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
  10. php视频转数据流,图像转数据流-aspphp | 鬼仔's Blog鬼仔's Blog
  11. pandas重置索引的几种方法探究
  12. 项目组【网站】的项目
  13. 【笔记】scp如何复制文件到带空格路径的server目录
  14. 游戏开发电子书(PDF)下载分享
  15. 城市管理观念要革新 智慧安防是前提条件忽视不得
  16. nginx 通过域名代理tcp端口
  17. SitePoint播客#81:Doom,Gloom和Rainbow Tweets
  18. 牛客练习赛68 B.牛牛的算术
  19. 我对嵌入式软件的理解
  20. 【工程应用七】接着折腾模板匹配算法 (Optimization选项 + no_pregeneration模拟 + 3D亚像素插值)...

热门文章

  1. Windows xp多国语言包
  2. 土豆聊天poeato Chat注册账号时提示网络刺错误怎么解决
  3. 为什么在微信的阴影下QQ依然是中国第二大App?
  4. 老罗Android开发视频教程(Android入门介绍)九集集合
  5. eclipserunas里没有选项_在电脑浏览器里阅读某一微信公众号所有文章
  6. 超详细Eclipse安装教程
  7. 甘特图 知乎_哪一款甘特图软件最好用?
  8. python安装包的路径
  9. redhat7 安装telnet服务
  10. Java 视频资源分享(干货)