跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

索福思UTM利用分析——清除上次WebAdmin会话记录

精选回复

发布于

0x00 前言

对于索福思UTM设备,在网管理页面中,上次WebAdmin会话会记录用户每次登录的信息,本文仅在技术研究的角度介绍清除指定上次WebAdmin会话记录的方法,记录研究细节。

0x01 简介

本文将要介绍以下内容:

研究过程

实现方法

0x02 Last WebAdmin Sessions简介

在网管理页面中,选中管理后会显示上次WebAdmin会话记录,如下图

2-1.png

记录包括以下内容:

用户:登录用户名

开始:登录时间

状态:退出时间

互联网协议(Internet Protocol)地址:登录互联网协议(互联网协议)

变更日志:修改的配置

对于变更日志,点击秀,会显示修改的配置,如下图

2-2.png

默认配置下,上次WebAdmin会话会显示最近的20条记录

0x03 研究过程

1.尝试修改/var/confd/var/storage/cfg

在上篇文章《Sophos UTM利用分析——导出配置文件》 提到,/var/confd/var/storage/cfg存储索福思UTM的配置信息,所以猜测通过修改/var/confd/var/storage/cfg文件可以实现上次WebAdmin会话记录的清除

/var/confd/var/storage/cfg的文件格式为Perl语言可存储文件,这里使用可存储编辑来编辑文件

向索福思UTM上传文件storaleedit-1.5。pl,执行命令:/storaleedit-1.5。pl CFG

结果如下图

3-1.png

解析出的文件结构同使用SophosUTM _ ConfigParser.py导出的结果一致

查看配置信息,命令如下:

cd lastchange

cd REF_AaaGroGroup1

限位开关(限位开关)

将所有属性置空,命令如下:

$cur-{'user'}=' ',$cur-{'time'}=' ',$cur-{'sid'}=' ',$cur-{'srcip'}=' '

保存文件,命令如下:

x

然而,修改稳频发电机(发生器)(恒定频率发生器的缩写)文件后不会影响上次WebAdmin会话记录

2.反编译web管理页面的源码

网管理页面的程序文件路径:/var/sec/ch root-httpd/var/web admin/web admin。plx

使用SophosUTM _ plxDecrypter.py反编译/var/sec/ch root-httpd/var/web admin/web admin。plx

定位到关键文件:导出-web管理。plx \ wfe \ ASG \模块\ ASG _仪表板。下午

定位到关键内容:my $ userlog=$ sys-userlog _ read(max=20,facility='webadmin,acc-agent,ACC _ SSO ')| |[];

如下图

3-2.png

从输出结果中定位到关键函数:用户日志_读取

3.定位关键函数userlog_read

谷歌搜索$sys-userlog_read,找到一份参考文档:https://小区。索福思。com/UTM-防火墙/astaroorg/f/ASG-V8-000-beta-closed/69661/7-920-bug-open-failed-SMTP-relay-log in-is-showing-up-on-last-web admin-logins

文档中有关于用户日志_读取的一些描述,如下图

3-3.png

从描述得出,用户日志_读取同复写的副本命令存在关联

4.反编译cc命令对应的进程

复写的副本命令对应的文件为/var/confd/confd.plx,使用SophosUTM _ plxDecrypter.py反编译/var/confd/confd.plx

5.获得函数userlog_read细节

搜索用户日志_读取相关内容,命令如下:

grep-iR ' user log _ read '/home/kali/1/decrypt/Export-confd。plx

输出结果如下图

3-4.png

从输出结果中定位关键文件:导出-confd。plx/Info/web admin/log。下午

定位到函数定义:

子用户日志_读取{

my ($self,% args)=@ _;

$args{max}=$args{sid}?1:$ args { max } | | 20;

$ args { facility }={ map {($ _=1)} split/,/,$args{facility} }

if $ args { facility };

我的$会话

$sessions=_consult_db($self,%args)

除非$ self-get(qw(reporting user log _ from _ logs));

$sessions=_iterate_files($self,%args)

除非ref $ sessions eq '数组

对于每个我的$sd (@$sessions) {

$ SD-{ state }=(-e ' $ config:session _ dir/$ SD-{ sid } '?活动':'结束)

如果!$ SD-{ state } | | $ SD-{ state } eq ' active ';

}

返回$会话

}

6.函数userlog_read代码分析

代码涉及两个操作,分别为读取数据库和读取文件,详情如下:

(1)数据库操作

关键代码:

sub _consult_db {

我的($self,$ args)=@ _;

我的$ facility _ selection=

$ facility _ selection=' WHERE facility in(' .

联接( ',',映射{ '?'} keys %{$args-{facility}}).') '

if $ args-{ facility };

我的%sql=(

sessions='SELECT sid,facility,srcip,username,time,endtime,state '。'来自confd_sessions .$设施_选择。"按DESC时间限制订购?",

会话='选择希德,设施、服务地址、用户名、时间、结束时间、状态'。FROM confd_sessions其中sid=?

nodes=' SELECT * FROM confd _ nodes WHERE sid=$ 1 ORDER BY time desc ',

objects=' SELECT * FROM confd _ objects WHERE sid=$ 1 ORDER BY time desc ',

);

#准备数据库访问。

my $ db=as taro:ADBS-new(dbName=' reporting ')或返回

while (my ($key,$query)=each %sql) {

$db-registerSQL($key,$query)或返回

}

#列出Confd会话。

我的$ sessh

if ($args-{sid}) {

$sessh=$db-getHandle('session ')或返回

$sessh-execute($args-{sid})或返回

} elsif( $args-{facility} ) {

$sessh=$db-getHandle('sessions ')或返回

$ sessh-execute(keys % { $ args-{ facility } },$args-{max})或返回

}否则{

$sessh=$db-getHandle('sessions ')或返回

$sessh-execute($args-{max})或返回

}

my $ sessions=$ sessh-fetchall _ array ref({ });

my $nodeh=$db-getHandle('nodes ')或返回

my $objh=$db-getHandle('objects ')或返回

对于每个我的$sd (@$sessions) {

#调整会话数据。

$ SD-{ time }=~ tr/-/:-/;

$sd-{endtime}=~ tr/- /:-/如果定义了$ SD-{结束时间};

$sd-{user}=删除$ SD-{用户名};#用户是结构化查询语言中的保留字

$sd-{user} .='(SUM)' if $ SD-{ facility } eq ' ACC _ SSO ';

$ SD-{ user }=utils:Sanitize:Sanitize($ SD-{ user })if $ SD-{ user };

#获取节点更改。

$nodeh-execute($sd-{sid})或返回

foreach my $ node(@ { $ nodeh-fetchall _ array ref({ })}){

$ node-{ time }=~ tr/-/:-/;

$ node-{ node _ descr }=Message:get _ phrase(

n ',$node,{ NAT TRS=[' node ']});

$ SD-{ main } { $ node-{ node } } | |=[];

push @ { $ SD-{ main } { $ node-{ node } } },$ node;

}

#获取对象更改。

$objh-execute($sd-{sid})或返回

foreach my $ object(@ { $ objh-fetchall _ array ref({ })}){

my $ attrs=$ object-{ attrs } | |[];

$ object-{ attributes }=[];

while (@$attrs) {

我的$ name=shift @ $ attrs

$ object-{ ' attr _ $ name ' }=shift @ $ attrs;

$ object-{ ' old attr _ $ name ' }=shift @ $ attrs;

$ object-{ ' descr _ $ name ' }=Message:get _ phrase(

a ',$object,{ attr=$ name });

push @{$object-{attributes}},$ name

}

删除$ object-{ attrs };

if (@{$object-{attributes}}) {

$ object-{ attributes }=[sort @ { $ object-{ attributes } }];

}否则{

删除$ object-{ attributes };

}

$ object-{ time }=~ tr/-/:-/;

$object-{ obj _ descr }=Message:get _ phrase(' O ',$ object,{ });

$ SD-{ objects } { $ object-{ ref } } | |=[];

push @ { $ SD-{ objects } { $ object-{ ref } } },$ object;

}

}

$ d B-断开连接;

返回$会话

}

代码分析:

从数据库报告中分别执行以下操作实现数据读取:

会话:从confd _会话中选择sid、设施、地址、用户名、时间、结束时间、状态.

节点:SELECT * FROM confd _ nodes

objects:SELECT * FROM confd _ objects;

经过测试分析,confd _ sessions存储会议信息

读取会议信息的煤矿管理局命令:

psql报告-U postgres -c '从confd _会话中选择希德,设施、srcip、用户名、时间、结束时间、状态;'

(2)文件操作

关键代码:

sub _ iterate _ files {

我的($self,$ args)=@ _;

#选择要处理的第一个文件

my $ filename='/var/log/confd。日志';

if (defined $args-{time}) {

我的@然后

if($ args-{ time }=~ /^(\d{4}):(\d\d):(\d\d)/){

@then=(0,0,12,$3,$2-1,$ 1-1900);

}否则{

@ then=当地时间($ args-{ time });

}

my $then=POSIX:strftime('%F ',@ then);

my $now=POSIX:strftime('%F ',当地时间);

$filename=POSIX:strftime(

/var/log/confd/% Y/% m/confd-% Y-% m-% d . log。' gz ',

@然后,

)如果$那么ne $现在

}

#处理第一个文件

my $ sessions=[];

my $ sdata={ };

_parse_file($self,$filename,$sessions,$sdata,$ args);

#如果需要,处理存档的日志文件

if(@ $ sessions $ args-{ max } not $ args-{ time }){

my $iter=File:Next:files({

file_filter=sub { /\ .日志\。gz$/},

sort _ File=\ File:Next:sort _ reverse

},'/var/log/confd ');

while (@$sessions $args-{max}) {

$ filename=$ ITER-();

最后一个,除非定义了$文件名

我的@ new _ sessions

_parse_file($self,$filename,\@new_sessions,$sdata,$ args);

推送@ $会话,@ new _ sessions

}

}

#限制要报告的会话数量

splice @ $ sessions,$ args-{ max } if @ @ $ sessions=$ args-{ max };

return[@ { $ sdata } { @ $ sessions }];

}

代码分析:

读取文件/var/log/confd.log,/var/log/confd.log只能保存现在时间到之前一段时间的日志,更早时间的日志会保存在/var/log/confd/% Y/% m/confd-% Y-% m-% d . log。gz,例如2022年5月16日的日志对应位置为/var/log/confd/2022/05/confd-2022-05-16。日志。地面零点

经过测试分析,/var/log/confd.log存储会议信息

7.编辑文件中存储的Session信息

查看登录成功的信息:

cat /var/log/confd.log| grep成功

返回结果示例:

2022:05:23-00:19:33 test confd[41177]:I Role:authenticate:185()=id=' 3106 ' severity=' info ' sys=' System ' sub=' confd ' name=' authentic ation successful ' user=' admin ' src IP=' 192。168 .1 .2 ' SID=' 8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 744

从结果中获得(同突发球形扰动)电离层的突然骚扰为8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 745 e 04 AC fab 3d 0179620109 a 41 ab

筛选出指定(同突发球形扰动)电离层的突然骚扰的信息:

cat/var/log/confd。log | grep 8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 745 e 04 AC fab 3d 0179620109 a 41 ab

返回结果示例:

2022:05:23-00:19:33 test confd[41177]:I Role:authenticate:185()=id=' 3106 ' severity=' info ' sys=' System ' sub=' confd ' name=' authentic ation successful ' user=' admin ' src IP=' 192。168 .1 .2 ' SID=' 8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 744

2022:05:23-00:50:24 test confd[5198]:I Session:termin ate:292()=id=' 3100 ' severity=' info ' sys=' System ' sub=' confd ' name=' closing Session ' user=' admin ' srcip=' 192。168 .1 .2 ' sid=' 8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 7450

从中提取出:

认证成功:2022:05:23-00:19:33

用户:管理员

srcip: 192

闭幕会议:2022:05:23-00:50:24

将以上信息同网管理页面管理的上次WebAdmin会话进行比对,发现数据保持一致

删除以上信息:

sed-I '/8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 745 e 04 AC fab 3d d 0179620109 a 41 ab/d '/var/log/confd。原木

刷新网管理页面管理,发现该方法无法清除上次WebAdmin会话记录

8.编辑数据库中存储的Session信息

查询指定(同突发球形扰动)电离层的突然骚扰的信息:

psql reporting-U postgres-c '从confd_sessions中选择sid、设施、srcip、用户名、时间、结束时间、状态其中sid=' 8 ad 7 bbf 2781 b 006d 99176 EEA 9050694811 e 745 e 04 AC fab 3d 0179620109 a 41 ab ';'

删除指定(同突发球形扰动)电离层的突然骚扰的信息:

psql reporting-U postgres-c '从confd _ sessions中删除,其中sid=' F7 CCE 7739 e 98229816 be 6b 186 ada 2e 2942064 CBF 0093 e 329 e 98939 Fe 65 d8d 3 e 3 ';'

刷新网管理页面管理,发现该方法能够清除上次WebAdmin会话记录(包括变更日志)

0x04 实现方法

综合以上内容,得出清除上次WebAdmin会话记录的方法:清除数据库报告中对应的记录

具体方法如下:

1.确认Last WebAdmin Sessions记录对应的sid

读取文件/var/log/confd.log,查询命令:

cat /var/log/confd.log| grep成功

从返回结果中确认会议记录的(同突发球形扰动)电离层的突然骚扰

2.删除sid对应的Session记录

命令示例:

psql reporting-U postgres-c '从confd _ sessions中删除,其中sid=' F7 CCE 7739 e 98229816 be 6b 186 ada 2e 2942064 CBF 0093 e 329 e 98939 Fe 65 d8d 3 e 3 ';'

0x05 小结

本文介绍了清除最后一个WebAdmin会话记录的细节。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。