一、网页邮箱添加

首先在昨天的网页上简单添加一个邮件列表,所以在昨天的服务器上新增email1.txt和email2.txt两个文件,返回的HTML如图。
Pro: 信息安全综合训练Lab4 - 图1
Pro: 信息安全综合训练Lab4 - 图2
在服务器代码中使用正则添加邮件列表路由/email1和/email2
Pro: 信息安全综合训练Lab4 - 图3
Pro: 信息安全综合训练Lab4 - 图4


二、Shell提取邮箱 collect.sh

Shell提取邮箱的思路,通过curl读取网页,egrep正则匹配邮件列表,正则匹配链接,再爬取提取到的链接。代码细节如下。
首先提取邮箱和提取链接的正则为:
邮箱正则: [a-zA-Z0-9_-.]+@[a-zA-Z0-9_-.]+(.[a-zA-Z0-9]+)+
链接正则: href=.*>”|cut -d”\”” -f2
我们在bash脚本中写定了要爬取的网站,而通过命令行参数传入爬取的第一个页面。
Pro: 信息安全综合训练Lab4 - 图5
www是一个数组变量,用来记录爬取的链接,count记录链接总个数。Line储存HTML代码行数,方便下面用for循环对每行进行提取。
Pro: 信息安全综合训练Lab4 - 图6
每行提取邮箱和检测链接,如果读取到邮箱则和已经保存的邮箱比较看是否重复,链接也和已存在的链接进行比较,不存在则添加。
Pro: 信息安全综合训练Lab4 - 图7
K用来记录已经爬取的链接数,while循环控制爬取完所有的链接。
Pro: 信息安全综合训练Lab4 - 图8
由于提取的邮箱有很多空行,所以最后一段脚本是对邮箱进行清洗去除空行。
脚本运行情况如下。
Pro: 信息安全综合训练Lab4 - 图9
可以在服务器后台看到有两个请求信息。
Pro: 信息安全综合训练Lab4 - 图10
查看邮箱列表,两个页面邮箱已经全部录入。
Pro: 信息安全综合训练Lab4 - 图11
所以邮箱提取页面完成,过程细节和坑多已略过。


三、sendEmail邮件发送 send.sh

这一步骤采用sendEmail命令行工具进行邮箱发送。SendEmail是通过借用外部SMTP服务器来进行垃圾邮件发送的。我们这里注册了一个163邮箱,开启POP/SMTP等功能,设置授权码。垃圾邮件发送脚本如下。
Pro: 信息安全综合训练Lab4 - 图12
发送邮件内容需要实现根据时间进行不同问候功能,所以前面一段是用来判断时间修改问候语。然后读取邮件列表通过sendEmail程序进行邮件发送。
发送情况如下:
Pro: 信息安全综合训练Lab4 - 图13
Pro: 信息安全综合训练Lab4 - 图14
这里为了测试,手动修改了emailist.txt文件邮箱列表,避免发送太多邮箱被封。


四、cron定时任务

这里有个大坑,昨天花费了大量的时间去才爬过去,熬到12点过才搞定。Ubuntu已经自动开启了cron服务,我们可以直接使用crontab指令进行任务设定。直接使用crontab -e即可进行编辑,添加以下代码即可。
Pro: 信息安全综合训练Lab4 - 图15
这里我设置的是每天凌晨运行邮箱收集脚本进行邮箱列表的更新。每隔一分钟运行垃圾邮件发送脚本。保存后重启cron服务即可。
测试效果如下:
Pro: 信息安全综合训练Lab4 - 图16
Pro: 信息安全综合训练Lab4 - 图17
可以看到邮箱差不多一分钟收到一封邮件。测试完成。
这么简单的操作却花费了大量的时间,昨天同样的操作我们设置的cron并没有生效。以为是cron的配置问题,因为我们手动执行脚本并没有错误,也有执行权限。试了无数的cron配置,毫无作用。最后才发现,只要将我们send.sh和collect.sh脚本中所有文件操作都采用全路径方式,cron定时任务就可以实现了。如图。
Pro: 信息安全综合训练Lab4 - 图18
我想可能cron并没有直接执行改程序,而是将程序拷贝到某个地方进行执行,所以会出现脚本相对路径出错的情况。


代码

download.sh

  1. #!/bin/bash
  2. #邮件正则:[a-zA-Z0-9\_\-\.]+@[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9]+)+
  3. #记录网址链接及其个数
  4. base="http://127.0.0.1:8000"
  5. www[0]=$1
  6. count=0
  7. #抓取第一个页面
  8. touch emailist.txt
  9. curl $base${www[0]} -o data.txt
  10. line=`cat data.txt|wc -l`
  11. for i in `seq 1 $line`
  12. do
  13. tmp=`cat data.txt | sed -n "$i"p|egrep "[a-zA-Z0-9\_\-\.]+@[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9]+)+"|cut -d">" -f2|cut -d"<" -f1`
  14. inaddr=`cat emailist.txt|grep "$tmp"`
  15. #如果邮箱不存在则加入邮件列表
  16. if [ ! "$inaddr" ]
  17. then
  18. echo $tmp >> emailist.txt
  19. fi
  20. #检测链接
  21. link=`cat data.txt |egrep "href=.*>"|cut -d"\"" -f2`
  22. #如果链接不存在则加入数组
  23. for((j=0;j<${#www[*]};j=j+1))
  24. do
  25. if [ ${www[$j]} == $link ]
  26. then
  27. break
  28. fi
  29. done
  30. if [ $j == ${#www[*]} ]
  31. then
  32. let count++
  33. www[$count]=$link
  34. fi
  35. done
  36. k=1
  37. while (( k <= $count ))
  38. do
  39. echo $k
  40. curl $base${www[$k]} -o data.txt
  41. line=`cat data.txt|wc -l`
  42. for i in `seq 1 $line`
  43. do
  44. tmp=`cat data.txt | sed -n "$i"p|egrep "[a-zA-Z0-9\_\-\.]+@[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9]+)+"|cut -d">" -f2|cut -d"<" -f1`
  45. inaddr=`cat emailist.txt|grep "$tmp"`
  46. if [ ! "$inaddr" ]
  47. then
  48. echo $tmp >> emailist.txt
  49. fi
  50. link=`cat data.txt |egrep "href=.*>"|cut -d"\"" -f2`
  51. for((j=0;j<${#www[*]};j=j+1))
  52. do
  53. if [ ${www[$j]} == $link ]
  54. then
  55. break
  56. fi
  57. done
  58. if [ $j == ${#www[*]} ]
  59. then
  60. let count++
  61. www[$count]=$link
  62. fi
  63. done
  64. let k++
  65. done
  66. grep -v "^$" emailist.txt >> tmp.txt
  67. rm emailist.txt
  68. cp tmp.txt emailist.txt
  69. rm tmp.txt

send.sh

  1. #!/bin/bash
  2. time=`date +%H`
  3. if [ $time -gt 19 ]
  4. then
  5. greet="Evening"
  6. elif [ $time -gt 12 ]
  7. then
  8. greet="Afternoon"
  9. else
  10. greet="Morning"
  11. fi
  12. row=`cat /home/rainturtle/mail/emailist.txt | wc -l`
  13. for((i=1;i<=$row;i=i+1))
  14. do
  15. target=`cat /home/rainturtle/mail/emailist.txt | sed -n "$i"p`
  16. echo "$target"
  17. /usr/local/bin/sendEmail -f rainturtle@163.com -t $target -s smtp.163.com -u "Good $greet" -o message-content-type=html -o message-charset=utf-8 -xu rainturtle@163.com -xp rainturtle456 -m "<h2>Dear Sir/Madam</h2><br><h3>Good $greet!</h3><h3> Hope you have a good day~~~</h3>" -o tls=no
  18. done