目录
Snort IDS(入侵检测系统)是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,Snort是开源的入侵检测系统,并具有很好的扩展性和可移植性。
环境:centos
#apache
yum install httpd httpd-devel
#启动ahache
systemctl start httpd
#设置开机自启
systemctal enable httpd
#防火墙设置开启80端口
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
#查看80端口
yum install lsof
lsof -i:80
yum install wget (若是自带wget就不必安装了)
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
#安装mysql-com/mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
#安装完成后会在/etc/yum.repos.d/目录下新增mysql-community.repo 、mysql-community-source.repo 两个 yum 源文件。
#进入/etc/yum.repos.d/安装mysql
yum install mysql-server
#检查是否安装成功
rpm -qa | grep mysql
#启动mysql服务
systemctl start mysqld.service
systemctl enable mysqld.service
#mysql 安全设置
mysql_secure_installation
yum install php
yum install php-mysql
yum install -y php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap
##安装php后重启apache使其生效
systemctl restart httpd.service
#测试php,在网站根目录/var/www/html/下新建 index.php 文件
写入: <?php phpinfo(); ?>
访问ip/index.php ,出现phpinfo界面说明安装完成

安装依赖
yum install gcc flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet libdnet-devel tcpdump
yum -y install epel-release
yum -y install nghttp2
安装daq和snort
记得下载到对应的目录下,别下乱了
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz

下载好后进入目录解压编译
对daq进行编译
tar -xvzf daq-2.0.7.tar.gz
cd daq-2.0.7
./configure
make
make install
回到上级目录下载LuaJIT库,并编译
cd ..
wget https://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gz
#解压
tar -xvzf LuaJIT-2.1.0-beta3.tar.gz
#进入src目录
cd LuaJIT-2.1.0-beta3/src
make
#接着到src上层目录进行make install
cd ..
make install
下载 openssl依赖
yum install openssl
yum install openssl-devel
对snort进行编译
tar -xvzf snort-2.9.18.1.tar.gz
cd snort-2.9.18.1
./configure --enable-sourcefire
make
make install
查看安装的信息
snort -V

groupadd snort
useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
IDS 模式运行时会创建一些目录,其中配置文件储存在 /etc/snort 中,规则储存在 /etc/snort/rules中,编译规则储存在 /usr/local/lib/snort_dynamicrules 中,日志粗存在 /var/log/snort 中
#创建snort目录
mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /etc/snort/rules/iplists
mkdir /etc/snort/preproc_rules
mkdir /usr/local/lib/snort_dynamicrules
mkdir /etc/snort/so_rules
#创建储存规则文件
touch /etc/snort/rules/iplists/black_list.rules
touch /etc/snort/rules/iplists/white_list.rules
touch /etc/snort/rules/local.rules
touch /etc/snort/sid-msg.map
#创建日志目录
mkdir /var/log/snort
mkdir /var/log/snort/archived_logs
#修改文件权限
chmod -R 5775 /etc/snort
chmod -R 5775 /var/log/snort
chmod -R 5775 /var/log/snort/archived_logs
chmod -R 5775 /etc/snort/so_rules
chmod -R 5775 /usr/local/lib/snort_dynamicrules
#修改文件属主
chown -R snort:snort /etc/snort
chown -R snort:snort /var/log/snort
chown -R snort:snort /usr/local/lib/snort_dynamicrules
#将配置文件从源文件复制到/etc/snort/中
cd /snort-2.9.18.1/etc/ # (进入snort安装目录,每个人可能不同)
cp *.conf* /etc/snort
cp *.map /etc/snort
cp *.dtd /etc/snort
cd /root/snort-2.9.18.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor
cp * /usr/local/lib/snort_dynamicpreprocessor/
我们使用官方给的免费的社区规则,如果有需要的话可以选择官方的其他套餐
(社区套餐免费;注册即可领注册套餐;付费套餐)
https://www.snort.org/downloads/community/community-rules.tar.gz
解压,添加
tar -xvzf community-rules.tar.gz
cp community-rules/* /etc/snort/rules/
vim /etc/snort/snort.conf
# 在45行附近 ipvar HOME_NET <any>修改为本机的内部网络
ipvar HOME_NET <ip>.1/24
通过 / 进行查询关键字即可找到位置

# 在104行附近 配置规则文件路径
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/prepproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists

#在515行 output unified2:....... 之后添加
output unified2: filename snort.u2, limit 128

#546行,取消注释local.rules文件,后面的 include 文件均注释掉
include $RULE_PATH/local.rules

保存,退出
检查规则是否配置完成
snort -T -c /etc/snort/snort.conf
配置成功

进入local.rules编写自定义规则
vim /etc/snort/rules/local.rules
此条规则的sid为1,任意ip的任意端口访问 192.168.171.130的80端口时
提示 "A test guys"
alert tcp any any -> 192.168.171.130 80 (msg:"A test guys";sid:1)
激活 snort 控制台检测流量,此处需要看一下自己的网卡,我的是ens32
snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens32
启动后尝试对目标进行访问

查看snort监听这边,已经成功匹配记录下来

规则选项
msg - 在报警和包日志中打印一个消息。
logto - 把包记录到用户指定的文件中而不是记录到标准输出。
ttl - 检查ip头的ttl的值。
tos 检查IP头中TOS字段的值。
id - 检查ip头的分片id值。
ipoption 查看IP选项字段的特定编码。
fragbits 检查IP头的分段位。
dsize - 检查包的净荷尺寸的值 。
flags -检查tcp flags的值。
seq - 检查tcp顺序号的值。
ack - 检查tcp应答(acknowledgement)的值。
window 测试TCP窗口域的特殊值。
itype - 检查icmp type的值。
icode - 检查icmp code的值。
icmp_id - 检查ICMP ECHO ID的值。
icmp_seq - 检查ICMP ECHO 顺序号的值。
content - 在包的净荷中搜索指定的样式。
content-list 在数据包载荷中搜索一个模式集合。
offset - content选项的修饰符,设定开始搜索的位置 。
depth - content选项的修饰符,设定搜索的最大深度。
nocase - 指定对content字符串大小写不敏感。
session - 记录指定会话的应用层信息的内容。
rpc - 监视特定应用/进程调用的RPC服务。
resp - 主动反应(切断连接等)。
react - 响应动作(阻塞web站点)。
reference - 外部攻击参考ids。
sid - snort规则id。
rev - 规则版本号。
classtype - 规则类别标识。
priority - 规则优先级标识号。
uricontent - 在数据包的URI部分搜索一个内容。
tag - 规则的高级记录行为。
ip_proto - IP头的协议字段值。
sameip - 判定源IP和目的IP是否相等。
stateless - 忽略刘状态的有效性。
regex - 通配符模式匹配。
distance - < distance - 强迫关系模式匹配所跳过的距离。
within - 强迫关系模式匹配所在的范围。
byte_test - 数字模式匹配。
byte_jump - 数字模式测试和偏移量调整
查找匹配净荷中的内容,并触发响应,选项数据可以包含混合文本和二进制数据,二进制数据放在两个管道符号"||"之间,表示为字节码,需要通过十六进制的方式进行表示
alert tcp any any -> any 139 (content:"|5c 00|p|00|I|00|P|00|E|00 5c|";)
alcet tcp any any -> any 80 (content:!"GET";)
在请求中通过POST提交,包含字符 pass

提交时通过wireshark抓包,抓取载荷中

编写规则
tcp流中如果载荷中出现 ”70 61 73 73“ 则提示 msg 字符串中的内容

设置完后保存,重新刷新页面,snort这里并没有记录

当我们通过burp 提交带有pass字符时

snort这里进行报警

SQL注入测试
写一条又臭又长的规则,里面是sql关键字
nocase:与content配套使用,申明content大小写字符串不敏感
distance:与content配套使用,本次匹配内容与上次匹配payload内容的间距,同时确保不一样的content匹配内容存在匹配的顺序,distance生效的content为距离distance最近的左侧content

匹配上

PS:此篇笔记是根据师傅 Thgilil 文章中的内容一步步记录的,第一次接触这个东西,感谢师傅的文章让我学到很多
Thgilil 师傅的主页地址:Thgilil的博客_CSDN博客-渗透测试,环境搭建,蓝队领域博主
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona
我正在尝试用Ruby(Rails)编写一个正则表达式,以便用户名的字符仅包含数字和字母(也没有空格)。我有这个正则表达式,/^[a-zA-Z0-9]+$/,但它似乎没有用,我在Rails中收到一个错误,说“The如果正则表达式使用多行anchor(^或$),这可能会带来安全风险。您是要使用\A和\z,还是忘记添加:multiline=>true选项?"我的user.rb模型中此实现的完整代码是:classUser我做错了什么以及如何修复此正则表达式,使其仅对数字和字母有效而不对空格有效?谢谢。 最佳答案 简短回答:使用/\A[a-z
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes
为了减少我的小Rails应用程序中的代码重复,我一直致力于将我的模型之间的通用代码放入它自己的单独模块中,到目前为止一切顺利。模型的东西相当简单,我只需要在开头包含模块,例如:classIso这工作正常,但是现在,我将有一些Controller和View代码,这些代码也将在这些模型之间通用,到目前为止,我有这个用于我的可发送内容:#Thisisamodulethatisusedforpages/formsthatarecanbe"sent"#eitherviafax,email,orprinted.moduleSendablemoduleModeldefself.included(kl
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。Ruby是一种美丽的语言,但有一个我讨厌写很多次的关键词“结束”。有什么方法可以写出简洁的代码而不用每次都写“end”吗?