上篇已经讲过client端的CODE
这部分code主要用来接收client端发送来的日志,从数据库中读取reglar然后去匹配.
如果出现匹配则判断为XSS***.
server端的SOCKET接收用了coro相关的模块.
配置文件仿照前一篇博客读取即可.
#!/usr/bin/perl
use warnings;
use strict;
use AnyEvent;
use AnyEvent::DBI::MySQL;
use Config::Tiny;
use FindBin;
use utf8;
use Coro;
use Coro::Socket;
use Coro::Handle;
use lib "$FindBin::Bin/../module";
my $server_config_file = "$FindBin::Bin/../etc/config.ini";
my $config             = Config::Tiny->new;
my $server_config      = $config->read($server_config_file);
my $server_log_info    = $server_config->{'server_config_info'};
my $username           = $server_log_info->{'username'};
my $password  = $server_log_info->{'password'};
my $port      = $server_log_info->{'server_port'};
my $host      = $server_log_info->{'host'};
my $database  = $server_log_info->{'database'};
my $server_ip = $server_log_info->{'server_ip'};
$|++;
print "Start listening Port:$port", "\n";
my $s = Coro::Socket->new(
LocalAddr => $server_ip,    # 创建一个侦听socket
LocalPort => $port,
Listen    => 5,
Proto     => 'tcp'
) or die $@;
my @coro;
while (1) {
my ( $fh, $peername ) = $s->accept;
next unless $peername;
&doit($fh);
}
sub doit {
my $dbh = AnyEvent::DBI::MySQL->connect( "dbi:mysql:database=$database",
"$username", "$password" );
my $fh = shift;
push @coro, async {
$fh->autoflush(1);
while ( my $line = $fh->readline() ) {
log_regex_do( $line, $dbh )
}
$fh->close;
}
}
sub log_regex_do {
my ( $log, $dbh, $cv ) = @_;
my ( $log_type, $url, $source, $local, $date, $option, $offer, $user ) =
$log =~
/t:(.*)\|me:(.*)\|so:(.*)\|lo:(.*)\|date:(.*)\|opt:(.*)\|of:(.*)\|u:(.*)$/;
my $log_class = type_result( $log_type, $dbh, $cv );
if ( defined bool( $local, $user, $dbh ) ) {
my ($log_result) = log_result( $url, $dbh );
if ($log_result) {
get_result_db(
$log_type, $log_result, $url,   $source, $user,
$date,     $option,     $offer, $dbh
);
}
}
}
sub type_result {
my ( $method, $dbh ) = @_;
my $cvs = AnyEvent->condvar;
my $type;
$dbh->do("set names utf8");
$dbh->selectall_hashref(
"select * from w3a_log_monitor_type",
'id',
sub {
my ($ary_ref) = @_;
for my $id ( keys %$ary_ref ) {
$type = $ary_ref->{$id}->{'id'}
if ( $method eq $ary_ref->{$id}->{'log_type_name'} );
}
$cvs->send;
}
);
$cvs->recv;
return $type;
}
sub bool {
my ( $local, $user, $dbh ) = @_;
my $cv = AnyEvent->condvar;
my $count;
# $dbh->do("set names utf8");
$dbh->selectcol_arrayref(
"select * from w3a_log_monitor where task_name='$user' and task_url='$local'",
sub {
my ($ref_ary) = @_;
$count = @$ref_ary;
$cv->send;
}
);
$cv->recv;
return $count;
}
sub get_result_db {
my (
$type,          $method_id,    $method_url,
$method_source, $method_user,  $method_date,
$method_option, $method_offer, $dbh
) = @_;
my $cv  = AnyEvent->condvar;
my $sth = $dbh->prepare( "
insert into w3a_log_monitor_attack (
method_name,
method_url,
attack_source,
attack_user,
attack_date,
attack_option,
attack_offer,
log_type
)values(?,?,?,?,?,?,?,?)
" );
$sth->bind_param( 1, $method_id );
$sth->bind_param( 2, $method_url );
$sth->bind_param( 3, $method_source );
$sth->bind_param( 4, $method_user );
$sth->bind_param( 5, $method_date );
$sth->bind_param( 6, $method_option );
$sth->bind_param( 7, $method_offer );
$sth->bind_param( 8, $type );
$sth->execute(
sub {
my ($rv) = @_;
$cv->send;
}
);
$cv->recv;
}
sub log_result {
my ( $method, $dbh ) = @_;
my $cv      = AnyEvent->condvar;
my $sum_dbh = $dbh;
my @target_id;
$dbh->do("set names utf8");
$dbh->selectall_hashref(
"select * from w3a_log_method",
'id',
sub {
my ($ary_ref) = @_;
for my $id ( keys %$ary_ref ) {
$cv->begin;
my $switch = $ary_ref->{$id}->{'method_switch'};
unless ( $switch == 0 ) {
if ( $method =~ /$ary_ref->{$id}->{'method_regex'}/i ) {
print "Match regular is: ",
$ary_ref->{$id}->{'method_regex'}, "\n";
push @target_id, $ary_ref->{$id}->{'id'};
}
}
$cv->end;
}
}
);
$cv->recv;
attack_update( $_, $dbh ) for @target_id;
return @target_id;
}
sub attack_update {
my ( $id, $dbh ) = @_;
my $cv = AnyEvent->condvar;
$dbh->selectcol_arrayref(
"select attack_sum from w3a_log_method where id='$id' ",
sub {
my ($ref_ary) = @_;
my $sum = $ref_ary->[0] + 1;
$dbh->do(
"update w3a_log_method set attack_sum='$sum' where id='$id'");
$cv->send;
}
);
$cv->recv;
}

使用方法如下:

1.服务端监控

2.客户端监控

3.进行XSS模拟

4.查看服务端状态

XSS之前的数据库查询状态

XSS之后的数据库查询状态

转载于:https://blog.51cto.com/mcshell/1362689

perl anyevent socket监控web日志server相关推荐

  1. perl anyevent socket监控web日志client

    此脚本为client端的code,主要实现读取日志中的一些关键词进行过滤,以下介绍几个模块的用途: File::Tail  用于读取日志,功能类似于linux中tail ,只读取最新的日志 AnyEv ...

  2. 强大的Web日志分析工具_AWSTATS 应用实例

    释义: AWStats在Sourceforge发展很快的一个基于Perl的WEB日志分析工具. 相对于另外一个非常优秀的开放源代码的日志分析工具Webalizer,AWStats的优势在于: 1.界面 ...

  3. 课时 12:可观测性-监控与日志(莫源)

    本文主要分为四个部分: 在 K8s 中监控和日志的背景信息: 在 K8s 中监控方案的演进,以及常见的监控方案的提供: 日志采集的一些细节以及常见的日志的开源系统: 课程总结,介绍一下阿里云容器服务上 ...

  4. 从零开始入门 K8s | 可观测性:监控与日志

    作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...

  5. k8s里面的项目怎么暴露端口让用户访问_从零开始入门 K8s | 可观测性:监控与日志...

    作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...

  6. 《hadoop进阶》web日志系统 KPI指标的分析与实现

    推广一下个人的微信公众号[搜索与推荐Wiki] 转载请注明出处: 转载自  Thinkgamer的CSDN博客:blog.csdn.net/gamer_gyt 代码下载地址:点击查看 1:Web日志分 ...

  7. zabbix监控Web界面

    目录 zabbix监控web界面功能说明 zabbix监控配置流程 web界面模块说明 第三方邮箱网页配置告警 本地邮箱告警 结合grafana zabbix监控web界面功能说明 zabbix监控配 ...

  8. GoAccess - 可视化 Web 日志分析工具

    GoAccess - 可视化 Web 日志分析工具. 官方地址: https://www.goaccess.cc/ 一 语法 goaccess [filename] [ options ... ] [ ...

  9. Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志

    Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志 1. 查看集群资源状况 2. 监控集群资源利用率 3. 管理K8s组件日志 4. 管理K8s应用日志 1. 查看集群资源 ...

最新文章

  1. 体外反搏做_体外反搏治疗的原理
  2. 【数论】排列组合学习笔记
  3. Kong APIGW — 安装与配置
  4. mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
  5. 配合Opencv2.4.9,CMake3.12.1和VS2010在win10下构建项目踩坑记录
  6. 泛型类型(Generic Type)
  7. lua table remove元素的问题
  8. linux做蓝牙接收器,简单自制蓝牙接收器
  9. 股票证券交易系统架构分析与设计
  10. 计算机学院早操规定,宜宾学院早操管理规定
  11. 使用python计算与你投缘与无缘的生肖
  12. 大饼“U”形底?ETR开始
  13. 【51单片机】霹雳灯实验代码
  14. kaggle TMDB Box Office Prediction
  15. 苹果xr配置_5000元以内苹果手机推荐:11、XS、XSMax怎么选?
  16. 看《我的工科女友》感受
  17. 思科证书申请 CCNA CCNP CCIE
  18. 什么是auto?auto的作用?
  19. MATLAB时间序列2(ARIMA,季节性序列及其预报)------2019/8/14
  20. 《计算机图形学编程(使用OpenGL和C++)》

热门文章

  1. mysql 5.7 ssd_6T!阿里云MySQL 5.7 存储空间再刷新高
  2. 单片机全局有必要封装_C语言开发单片机为什么大多数都采用全局变量的形式?...
  3. matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件
  4. python里it n_Python3 round(x [,n]) 函数
  5. 3d打印主要的切片参数类型_3D打印机切片参数详情说明
  6. C语言编杂志程序,c语言程序错误修改
  7. 在MySQL查询山东省男生信息_MySQL-查询
  8. ecshop category.php?id=4,categoryall.php
  9. 元数据解决分表不可 mysql_MySQL InnoDB技术内幕:内存管理、事务和锁
  10. apache log4j入门