nginx_log_check

脚本作者:al0ne

项目地址:

https://github.com/al0ne/nginx_log_check

Nginx日志安全分析脚本

功能

  • 统计Top 20 地址
  • SQL注入分析
  • 扫描器告警分析
  • 漏洞利用检测
  • 敏感路径访问
  • 文件包含攻击
  • Webshell
  • 寻找响应长度的url Top 20
  • 寻找罕见的脚本文件访问
  • 寻找302跳转的脚本文件

Usage

设置报告保存地址 outfile
设置日志分析目录 access_dir
设置日志名称 access_log
./nginx_check.sh

#git https://github.com/al0ne/nginx_log_check/blob/master/nginx_check.sh
#!/usr/bin/env bashecho ""
echo " ========================================================= "
echo " \                 Nginx日志安全分析脚本 V1.0            / "
echo " ========================================================= "
echo " # 支持Nginx日志分析,攻击告警分析等                    "
echo " # author:al0ne                    "
echo " # https://github.com/al0ne                    "
echo -e "\n"#此脚本是参考nmgxy/klionsec修改而来,重新添加了一些特征,只用来临时救急,还是推荐到ELK或者Splunk中分析#功能
###统计Top 20 地址
###SQL注入分析
###SQL注入 FROM查询统计
###扫描器/常用黑客工具
###漏洞利用检测
###敏感路径访问
###文件包含攻击
###HTTP Tunnel
###Webshell
###寻找响应长度的url Top 20
###寻找罕见的脚本文件访问
###寻找302跳转的脚本文件#如果存在多个access文件或者有多个access.x.gz 建议先zcat access*.gz >> access.log文件中
#设置分析结果存储目录,结尾不能加/
outfile=/tmp/logs
#如果目录以存在则清空,未存在则新建目录
if [ -d $outfile ]; thenrm -rf $outfile/*
elsemkdir -p $outfile
fi
#设置nginx日志目录,结尾必须加/
access_dir=/var/log/nginx/
#设置文件名,如果文件名为access那么匹配的是access*文件
access_log=access
#判断日志文件是否存在
num=$(ls ${access_dir}${access_log}* | wc -l) >/dev/null 2>&1
if [ $num -eq 0 ]; thenecho '日志文件不存在'exit 1
fi
echo -e "\n"# 验证操作系统是debian系还是centos
OS='None'
if [ -e "/etc/os-release" ]; thensource /etc/os-releasecase ${ID} in"debian" | "ubuntu" | "devuan")OS='Debian';;"centos" | "rhel fedora" | "rhel")OS='Centos';;*) ;;esac
fiif [ $OS = 'None' ]; thenif command -v apt-get >/dev/null 2>&1; thenOS='Debian'elif command -v yum >/dev/null 2>&1; thenOS='Centos'elseecho -e "\n不支持这个系统\n"echo -e "已退出"exit 1fi
fi# 检测ag软件有没有安装
if ag -V >/dev/null 2>&1; thenecho -e "\e[00;32msilversearcher-ag已安装 \e[00m"
elseif [ $OS = 'Centos' ]; thenyum -y install the_silver_searcher >/dev/null 2>&1elseapt-get -y install silversearcher-ag >/dev/null 2>&1fifi
#如果检测别的日志请手动替换偏移,例如awk的$7代表url,$9代表状态码,$10代表长度,本脚本是以nginx日志为基础echo "分析结果日志:${outfile}"
echo "Nginx日志目录:${access_dir}"
echo "Nginx文件名:${access_log}"
echo -e "\n"echo -e "\e[00;31m[+]TOP 20 IP 地址\e[00m"
ag -a -o --nofilename '\d+\.\d+\.\d+\.\d+' ${access_dir}${access_log}* | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/top20.log
echo -e "\n"echo -e "\e[00;31m[+]SQL注入攻击分析\e[00m"
#在SQL注入中排除掉了一些扫描css/js/png图片类等无用告警,并且重点筛选状态码200或者500的告警
ag -a "xp_cmdshell|%20xor|%20and|%20AND|%20or|%20OR|select%20|%20and%201=1|%20and%201=2|%20from|%27exec|information_schema.tables|load_file|benchmark|substring|table_name|table_schema|%20where%20|%20union%20|%20UNION%20|concat\(|concat_ws\(|%20group%20|0x5f|0x7e|0x7c|0x27|%20limit|\bcurrent_user\b|%20LIMIT|version%28|version\(|database%28|database\(|user%28|user\(|%20extractvalue|%updatexml|rand\(0\)\*2|%20group%20by%20x|%20NULL%2C|sqlmap" ${access_dir}${access_log}* | ag -v '/\w+\.(?:js|css|html|jpg|jpeg|png|htm|swf)(?:\?| )' | awk '($9==200)||($9==500) {print $0}' >${outfile}/sql.log
awk '{print "SQL注入攻击" NR"次"}' ${outfile}/sql.log | tail -n1
echo "SQL注入 TOP 20 IP地址"
ag -o '(?<=:)\d+\.\d+\.\d+\.\d+' ${outfile}/sql.log | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/sql_top20.log
# 重点关注from查询,是否存在脱裤行为,排除扫描行为
echo "SQL注入 FROM 查询"
cat ${outfile}/sql.log | ag '\bfrom\b' | ag -v 'information_schema' >${outfile}/sql_from_query.log
awk '{print "SQL注入FROM查询" NR"次"}' ${outfile}/sql_from_query.log | tail -n1
echo -e "\n"echo -e "\e[00;31m[+]扫描器scan & 黑客工具\e[00m"
ag -a "acunetix|by_wvs|nikto|netsparker|HP404|nsfocus|WebCruiser|owasp|nmap|nessus|HEAD /|AppScan|burpsuite|w3af|ZAP|openVAS|.+avij|.+angolin|360webscan|webscan|XSS@HERE|XSS%40HERE|NOSEC.JSky|wwwscan|wscan|antSword|WebVulnScan|WebInspect|ltx71|masscan|python-requests|Python-urllib|WinHttpRequest" ${access_dir}${access_log}* | ag -v '/\w+\.(?:js|css|jpg|jpeg|png|swf)(?:\?| )' | awk '($9==200)||($9==500) {print $0}' >${outfile}/scan.log
awk '{print "共检测到扫描攻击" NR"次"}' ${outfile}/scan.log | tail -n1
echo "扫描工具流量 TOP 20"
ag -o '(?<=:)\d+\.\d+\.\d+\.\d+' ${outfile}/scan.log | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/scan_top20.log
echo -e "\n"echo -e "\e[00;31m[+]敏感路径访问\e[00m"
ag -a "/_cat/|/_config/|include=|phpinfo|info\.php|/web-console|JMXInvokerServlet|/manager/html|axis2-admin|axis2-web|phpMyAdmin|phpmyadmin|/admin-console|/jmx-console|/console/|\.tar.gz|\.tar|\.tar.xz|\.xz|\.zip|\.rar|\.mdb|\.inc|\.sql|/\.config\b|\.bak|/.svn/|/\.git/|\.hg|\.DS_Store|\.htaccess|nginx\.conf|\.bash_history|/CVS/|\.bak|wwwroot|备份|/Web.config|/web.config|/1.txt|/test.txt" ${access_dir}${access_log}* | awk '($9==200)||($9==500) {print $0}' >${outfile}/dir.log
awk '{print "共检测到针对敏感文件扫描" NR"次"}' ${outfile}/dir.log | tail -n1
echo "敏感文件访问流量 TOP 20"
ag -o '(?<=:)\d+\.\d+\.\d+\.\d+' ${outfile}/dir.log | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/dir_top20.log
echo -e "\n"echo -e "\e[00;31m[+]漏洞利用检测\e[00m"
ag -a "%00|/win.ini|/my.ini|\.\./\.\./|/etc/shadow|%0D%0A|file:/|gopher:/|dict:/|WindowsPowerShell|/wls-wsat/|call_user_func_array|uddiexplorer|@DEFAULT_MEMBER_ACCESS|@java\.lang\.Runtime|OgnlContext|/bin/bash|cmd\.exe|wget\s|curl\s|s=/index/\think" ${access_dir}${access_log}* | awk '($9==200)||($9==500) {print $0}' >${outfile}/exploit.log
awk '{print "漏洞利用探测" NR"次"}' ${outfile}/exploit.log | tail -n1
echo "漏洞利用检测 TOP 20"
ag -o '(?<=:)\d+\.\d+\.\d+\.\d+' ${outfile}/exploit.log | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/exploit_top20.log
echo -e "\n"echo -e "\e[00;31m[+]webshell\e[00m"
ag -a "=whoami|dbname=|exec=|cmd=|\br57\b|\bc99\b|\bc100\b|\bb374k\b|adminer.php|eval\(|assert\(|%eval|%execute|tunnel\.[asp|php|jsp|aspx]{3,4}|makewebtaski|ma\.[asp|php|jsp|aspx]{3,4}|\bup\.[asp|php|jsp|aspx]{3,4}|cmd\.[asp|php|jsp|aspx]{3,4}|201\d\.[asp|php|jsp|aspx]{3,4}|xiaoma\.[asp|php|jsp|aspx]{3,4}|shell\.[asp|php|jsp|aspx]{3,4}|404\.[asp|php|jsp|aspx]{3,4}|tom\.[asp|php|jsp|aspx]{3,4}|k8cmd\.[asp|php|jsp|aspx]{3,4}|ver[0-9]{3,4}\.[asp|php|jsp|aspx]{3,4}|\.aar|[asp|php|jsp|aspx]{3,4}spy\.|o=vLogin|aioshell|admine|ghost\.[asp|php|jsp|aspx]{3,4}|r00ts|90sec|t00ls|editor\.aspx|wso\.[asp|aspx]{3,4}" ${access_dir}${access_log}* | awk '($9==200)||($9==500) {print $0}' >${outfile}/webshell.log
awk '{print "共检测到webshell行为" NR "次"}' ${outfile}/webshell.log | tail -n1
echo "Webshell TOP 20"
ag -o '(?<=:)\d+\.\d+\.\d+\.\d+' ${outfile}/webshell.log | sort | uniq -c | sort -nr | head -n 20 | tee -a ${outfile}/webshell_top20.log
echo -e "\n"echo -e "\e[00;31m[+]HTTP Tunnel\e[00m"
#Regeorg代理特征
ag -a "cmd=disconnect|cmd=read|cmd=forward|cmd=connect|127.0.0.1" ${access_dir}${access_log}* | awk '($9==200)||($9==500) {print $0}' | tee -a ${outfile}/tunnel.log
awk '{print "共检测到隧道行为" NR "次"}' ${outfile}/tunnel.log | tail -n1
echo -e "\n"echo -e "\e[00;31m[+]Top 20 url响应长度\e[00m"
# 查找url响应长度最长的url排序,目的是有没有下载服务器的一些打包文件
len=$(cat ${access_dir}${access_log}* | awk '{print $10}' | sort -nr | head -n 20)
echo $len | awk 'BEGIN{ RS=" " }{ print $0 }' | xargs -i{} ag -a --nocolor '\d+\s{}\s' ${access_dir}${access_log}* | awk '{print $7,$10}' | sort | uniq | sort -k 2 -nr | tee -a ${outfile}/url_rsp_len.log
echo -e "\n"echo -e "\e[00;31m[+]罕见的脚本文件访问\e[00m"
echo "访问量特别特别少的脚本文件极有可能是webshell"
cat ${access_dir}${access_log}* | awk '($9==200)||($9==500) {print $7}' | sort | uniq -c | sort -n | ag -v '\?' | ag '\.php|\.jsp|\.asp|\.aspx' | head -n 20 | tee -a ${outfile}/rare_url.log
echo -e "\n"echo -e "\e[00;31m[+]302跳转\e[00m"
echo "此目的是寻找一些登录成功的脚本文件"
cat ${access_dir}${access_log}* | awk '($9==302)||($9==301) {print $7}' | sort | uniq -c | sort -n | ag -v '\?' | ag '\.php|\.jsp|\.asp|\.aspx' | head -n 20 | tee -a ${outfile}/302_goto.log

参考链接 :
Nginx日志安全分析脚本 :https://github.com/al0ne/nginx_log_check

Nginx日志安全分析脚本相关推荐

  1. 基于python的Nginx日志管理分析系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用 pandas + sklearn 对 Nginx 的日志数据进行统计分析,并利用 fla ...

  2. nginx日志定期归档脚本

    #!/bin/bash #nginx下域名access日志切割归档脚本 YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)#=========== ...

  3. nginx日志格式分析及修改

    修改nginx日志打印格式 一. 打开终端,登录服务器并输入服务器密码 //ssh 用户名@服务器ip ssh root@192.168.0.132 二. 切换到nginx目录 cd /var/log ...

  4. nginx日志格式分析

    先随便截取一个nginx标准日志: 62.173.145.171 - - [12/Jan/2020:17:23:54 +0800] "GET /vvx/000000000000.cfg HT ...

  5. nginx日志分析脚本

    #!/usr/bin/env bashecho "" echo " =================================================== ...

  6. 烂泥:利用awstats分析nginx日志

    昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割nginx日志>这篇文章. 今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本 ...

  7. 利用awstats分析nginx日志

    今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本和第三方软件awstats进行分析,在此我们选择的是通过第三方软件awstats进行分析. 要使用awstats分析ngi ...

  8. nginx 带宽_Nginx日志如何分析 GoAccess

    " 如何进行Nginx日志的分析呢?如获得topN 来源IP.URL,以及PV.UV等. " 认识下GoAccess GoAccess[1]支持对所有Web日志格式实现快速实时的分 ...

  9. linux nginx 日志查看,查看nginx日志_Linux系统怎么分析Nginx日志

    摘要 腾兴网为您分享:Linux系统怎么分析Nginx日志,追书神器,有信,虚拟机,天气预报等软件知识,以及云软件,东方财富股票软件,扑飞,名片扫描王,微信加人软件安卓,微主题,每日金股,电脑硬盘检测 ...

最新文章

  1. centos7 firewall 防火墙 命令
  2. Linux定时任务Crontab执行PHP脚本
  3. 半导体二极管和晶体三极管
  4. centos删除php_Linux CentOS完全卸载PHP
  5. 数据竞赛利器 —— xgboost 学习清单
  6. 技术专家:为什么我们最终选择Apache Pulsar替代Kafka?
  7. JavaScript简介---JS基础
  8. 敏捷开发生态系统系列之一:序言及需求管理生态(客户价值导向-可工作软件-响应变化)...
  9. jmap查询JVM堆内存
  10. nyoj------20吝啬的国度
  11. supersocke接收不到数据_豪横吗?易查分除了上传电子表格,复制粘贴也能上传数据啦!...
  12. dell服务器r730老自动重启_Dell R730服务器安装windows server 2008 R2蓝屏问题
  13. cms完整视频教程+源码 孔浩老师 全131讲
  14. 我的世界java怎么自制皮肤_我的世界皮肤制作教程
  15. 科普:不给手游平台源码的公司能不能选?
  16. 血泪安装caffe教程
  17. et99php,加密锁/加密狗ET199(包含网络锁功能)
  18. 基于python的人工智能的案例-Python在人工智能中的实例
  19. 沪江快速手机打字软件下载
  20. nas主流服务器,NAS以及服务器

热门文章

  1. 白话Word2Vec
  2. LightGBM图解理论+视频+安装方法+python代码
  3. 全球AI挑战-场景分类的比赛源码(多模型融合)
  4. 乱码ictclas java_中科院分词系统(NLPIR)JAVA简易教程
  5. 小说中人称转换作用_小说创作的最重要的几个要数!
  6. python程序设计课后答案第二版_智慧职教APPPython程序设计(深圳信息职业技术学院)课后答案...
  7. oracle 11g Flashback Data Archive(闪回数据归档)
  8. python Flask配置笔记
  9. c语言lnk1104无法打开exe,error LNK1104: 无法打开文件“C:\Users\Administrator\Desktop\....\\xxxx.exe”...
  10. java项目实现服务器监控,Java实现服务器状态监控