Chinaunix

标题: awk或者sed对不规则行怎么提取字符? [打印本页]

作者: bobkey    时间: 2006-04-28 18:39
标题: awk或者sed对不规则行怎么提取字符?
下面的字符是一个html中的字符,但每行都不规则,我知道要取的字符前面有个“BC3232”是固定的,但不能用awk,用cut也不行,因为这个是字符串,其他的更不行,有雷同的字符,请各位高手帮忙测试一下。

  1. <tr class=bg_odd valign=top><TD>&nbsp;80</td><TD>&nbsp;TCP<br>&nbsp;TCP<br>&nbsp;TCP<br>&nbsp;TCP<br>&nbsp;TCP<br>&nbsp;TCP<br></tD><TD>&nbsp; www </td><td><a href=#img_109001 onclick=javascript:expandIt('109001');>&nbsp;<img src=../images/low.gif border=0>&nbsp;<font color=#1C8019>远端WWW服务提供了对WebDAV的支持</font><font color=#FF0000>[低]</font></a><br><a href=#img_109004 onclick=javascript:expandIt('109004');>&nbsp;<img src=../images/low.gif border=0>&nbsp;<font color=#1C8019>远程主机安装了IIS5 .printer ISAPI扩展</font><font color=#FF0000>[低]</font></a><br><a href=#img_109019 onclick=javascript:expandIt('109019');>&nbsp;<img src=../images/low.gif border=0>&nbsp;<font color=#1C8019>远程IIS主机安装了.HTR ISAPI扩展</font><font color=#FF0000>[低]</font></a><br><a href=#img_109100 onclick=javascript:expandIt('109100');>&nbsp;<img src=../images/low.gif border=0>&nbsp;<font color=#1C8019>IIS错误判断HTTP请求来自本机</font><font color=#FF0000>[低]</font></a><br><a href=#img_109101 onclick=javascript:expandIt('109101');>&nbsp;<img src=../images/high.gif border=0>&nbsp;<font color=#BC3232>IIS 5.0/WebDAV远程缓冲区溢出(MS03-007)</font><font color=#FF0000>[高]</font></a><br><a href=#img_109110 onclick=javascript:expandIt('109110');>&nbsp;<img src=../images/low.gif border=0>&nbsp;<font color=#1C8019>远程IIS主机安装了.IDA或.IDQ ISAPI扩展</font><font color=#FF0000>[低]</font></a>&nbsp;</td><td> open&nbsp;</td></tr>
复制代码
han

最终要达到的效果如下

IIS 5.0/WebDAV远程缓冲区溢出(MS03-007)[高]
Microsoft MSDTC COM+远程代码执行漏洞(MS05-051/KB902400)[高]
微软DCOM接口缓冲区溢出漏洞(MS03-026/MS03-039)[高]
Messenger服务远程堆溢出漏洞(MS03-043/KB828035)[高]
Microsoft Windows MSDTC内存破坏漏洞(MS05-051/KB902400)[高]
Microsoft Task Scheduler远程任意代码执行漏洞(精确扫描MS04-022/KB841873)[高]
作者: zongyaotang    时间: 2006-04-28 22:06
标题: 回复 1楼 bobkey 的帖子
先设法在<font color=#BC3232前和</font>前后插入一个空行,
用awk 提取行首是该标记的连续行,
之后也许就容易处理了。
作者: zongyaotang    时间: 2006-04-29 04:52
标题: 回复 1楼 bobkey 的帖子
看这样能否满足要求?假设ggg是要处理的文件。

sed -e "s/<font color=/\\
\\
&/g" -e "s/<\/font>/&\\
\\
/g" ggg | grep "<font" | sed -e "s/<[^>]*//g"
作者: waker    时间: 2006-04-29 09:01
LANG=C sed   '/BC3232>[^<]*/s//\n&\n/' ur-file \
|sed -n 's/BC3232>//p'
原理和zongyaotang是一致的
作者: bobkey    时间: 2006-04-29 12:09
我测试了不成功,能否把sed写成一行,我不理解其中的意思。
作者: waker    时间: 2006-04-29 12:16
http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
作者: 技安    时间: 2006-04-29 14:09
sed -e 's/<[^32>]*>//g' -e 's/<[^>]*>/\\n/g'
作者: xxjoyjn    时间: 2006-04-29 15:00
上述几个方法好像都测试不成功
作者: 技安    时间: 2006-04-29 15:51
sed -e 's/<[^32]*>//g' -e 's/<.*>//g' -e 's/\&nbsp\;//g'
作者: bobkey    时间: 2006-04-29 18:16
原帖由 技安 于 2006-4-29 15:51 发表
sed -e 's/<[^32]*>//g' -e 's/<.*>//g' -e 's/\&nbsp\;//g'

这个任务我必须完成,所以把附件传上来了,我现在要达到这个要求:
1。第一次的高风险数全部列出来
2。如果进行了第二此扫描则要和第一次进行对比,分析哪些是新漏洞

大家看下附件吧,看怎么把高风险的内容全部筛选出来。

[ 本帖最后由 bobkey 于 2006-4-30 09:34 编辑 ]

10.244.84.132.rar

16.85 KB, 下载次数: 43

需要处理的html原文件


作者: ha_    时间: 2006-04-29 20:57
用sed编辑htm的源文件?
作者: 技安    时间: 2006-04-30 01:26
[aluns]/home/tmp>grep 3232 a.html | sed -e 's/<[^32]*>//g' -e 's/<.*>//g' -e 's/\&nbsp\;//g'
IIS 5.0/WebDAV远程缓冲区溢出(MS03-007)
135Messenger服务远程堆溢出漏洞(MS03-043/KB828035)
1025Microsoft Windows MSDTC内存破坏漏洞(MS05-051/KB902400)
1029Microsoft Task Scheduler远程任意代码执行漏洞(精确扫描MS04-022/KB841873)

-----------------------

grep 3232 a.html | sed -e 's/<[^32]*>//g;s/<.*>//g;s/\&nbsp\;//g'


这样不行吗?

[ 本帖最后由 技安 于 2006-4-30 01:28 编辑 ]
作者: bobkey    时间: 2006-04-30 09:30
原帖由 技安 于 2006-4-30 01:26 发表
[aluns]/home/tmp>grep 3232 a.html | sed -e 's/<[^32]*>//g' -e 's/<.*>//g' -e 's/\&nbsp\;//g'
IIS 5.0/WebDAV远程缓冲区溢出(MS03-007)
135Messenger服务远程堆溢出漏洞(MS03-043/KB82 ...

谢谢回复,测试了你的语句,不行。结果如下


远端WWW服务提供了对WebDAV的支持[低]远程主机安装了IIS5 .printer ISAPI扩展[低]远程IIS主机安装了.HTR ISAPI扩展[低]IIS错误判断HTTP请求来自本机[低]IIS 5.0/WebDAV远程缓冲区溢出(MS03-007)[高]远程IIS主机安装了.IDA或.IDQ ISAPI扩展[低]
135Microsoft MSDTC COM+远程代码执行漏洞(MS05-051/KB902400)[高]DCE/RPC服务枚举漏洞[低]微软DCOM接口缓冲区溢出漏洞(MS03-026/MS03-039)[高]Messenger服务远程堆溢出漏洞(MS03-043/KB828035)[高]
1025Microsoft Windows MSDTC内存破坏漏洞(MS05-051/KB902400)[高]
1029Microsoft Task Scheduler远程任意代码执行漏洞(精确扫描MS04-022/KB841873)[高]


可以看出基本功能是完成了,但问题是html字符中,它没有断行,多行合并成一行,造成格式混乱。所以要想整齐的话,要在BC3232字符的前面插入一个断行符号。
作者: woodie    时间: 2006-04-30 11:19
有GNU grep吗?
  1. grep -Po '(?<=3232>)[^<>]*MS\d+-\d+[^<>]*'
复制代码

在GNU grep 2.5.1下测试成功。
作者: waker    时间: 2006-04-30 11:32
to woodie
以他的例子看
(?<=3232>)[^<>]*MS\d+-\d+[^<>]*
写成
(?<=3232>)[^<]*
是不是就够了?
作者: 寂寞烈火    时间: 2006-04-30 11:34
用perl吧~ ,不过,我忘了怎么写perl的cmdline乐~,
作者: woodie    时间: 2006-04-30 11:43
原帖由 waker 于 2006-4-30 11:32 发表
to woodie
以他的例子看
(?<=3232>)[^<>]*MS\d+-\d+[^<>]*
写成
(?<=3232>)[^<]*
是不是就够了?

就楼主给出的文件,你说的是对的。同意!
作者: woodie    时间: 2006-04-30 11:46
原帖由 寂寞烈火 于 2006-4-30 11:34 发表
用perl吧~ ,不过,我忘了怎么写perl的cmdline乐~,

用perl也得考虑一行多个匹配的情况,除非重新定义行分隔符。不见得比grep -Po更简单。^_^
作者: waker    时间: 2006-04-30 11:58
再to woodie
麻烦你顺手把后面的“[高]"也给他弄出来吧,斩草除根算了
作者: woodie    时间: 2006-04-30 12:09
原帖由 waker 于 2006-4-30 11:58 发表
再to woodie
麻烦你顺手把后面的“[高]"也给他弄出来吧,斩草除根算了

既然知道一定是“[高]”,楼主要的话就手工加好了。
作者: bobkey    时间: 2006-04-30 13:52
原帖由 woodie 于 2006-4-30 12:09 发表

既然知道一定是“[高]”,楼主要的话就手工加好了。


呵呵,如果是一个文件,我根本费不着这么大的劲去提取字符,只要打开html直接复制就可以了

现在是成千上万个文件需要批量自动处理,所以……
作者: zongyaotang    时间: 2006-04-30 15:41
标题: 回复 21楼 bobkey 的帖子
要看这里的批量文件是否由程序生成的,否则这里讨论的做法不一定能完全正确地处理。
作者: bobkey    时间: 2006-04-30 17:24
原帖由 zongyaotang 于 2006-4-30 15:41 发表
要看这里的批量文件是否由程序生成的,否则这里讨论的做法不一定能完全正确地处理。


确实是程序生成的,所以它们格式肯定统一。
作者: woodie    时间: 2006-04-30 17:26
原帖由 bobkey 于 2006-4-30 13:52 发表


呵呵,如果是一个文件,我根本费不着这么大的劲去提取字符,只要打开html直接复制就可以了

现在是成千上万个文件需要批量自动处理,所以……

楼主真的是很挑剔!^_^
试问取得的内容有哪一个不是高危的漏洞呢?既然都是高危,加不加“[高]”字样有何区别呢?实在要加的话:
sed 's/$/[高]/'
这样很难么?


其实楼主的特征描述(指字体颜色)并未抓住核心的东西。楼上zongyaotang兄弟的顾虑是有道理的,网站的排版稍一改变,我们的代码可能就会失效了。
但愿下面这段perl能让楼主满意:
  1. perl -0e '$_=<>;
  2.   @a=grep /\[高\]/, split(/<br>/i);
  3.   @b=map {
  4.     ($x=$_) =~ s/.*>([^<>]*MS\d+-\d+[^<>]*(?:<[^<>]*>)*\[高\]).*/\1/s;
  5.     $x =~ s/<[^<>]*>//g; $x =~ s/^(&nbsp;)+//g;$x =~ s/&nbsp;/ /g;
  6.     $x;} @a;
  7.   print map $_."\n", @b;'
复制代码

[ 本帖最后由 woodie 于 2006-4-30 17:46 编辑 ]
作者: bobkey    时间: 2006-05-08 10:00
回复楼上,首先感谢你的帮助,
1.但要取的字符除了[高],还有[中][低],可以看第一页我上传的html文件。
2.颜色确实是唯一字符
3.排版确实是统一的,是用机器生成的。

在5.1期间我经过测试,用如下语句良好完成我需要的功能。
grep "BC3232" aaa.html|sed -e 's/BC3232>/\n/g' |cut -d '<' -f1|sed -e '/^$/d'
作者: woodie    时间: 2006-05-22 22:09
原帖由 bobkey 于 2006-5-8 10:00 发表
回复楼上,首先感谢你的帮助,
1.但要取的字符除了[高],还有[中][低],可以看第一页我上传的html文件。
2.颜色确实是唯一字符
3.排版确实是统一的,是用机器生成的。

在5.1期间我经过测试,用如下语句良好 ...

1.取的不全是[高]吗?那么下面的话难道不是你自己贴上来的吗?
原帖由 bobkey 于 2006-4-29 18:16 发表

这个任务我必须完成,所以把附件传上来了,我现在要达到这个要求:
1。第一次的高风险数全部列出来
2。如果进行了第二此扫描则要和第一次进行对比,分析哪些是新漏洞

大家看下附件吧,看怎么把高风险的内容 ...


2.现在是。
3.页面是机器/程序生成的,但页面的模板则未必,人家随时可能改变模板中的排版而不会事先通知您老人家。^_^

至于你选择哪段代码,那是您的权力,我不干涉。

[ 本帖最后由 woodie 于 2006-5-22 22:11 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2