当前位置:编程学习 > 网站相关 >>

ossim显示不了srcpip解决

 

一、  问题描述

打开Security Events

 

 

事件源ip和目的ip获取不到

 

打开具体事件

Source address 和 destination address 为0.0.0.0

 

事件详情中能找到源ip

 

二、  分析

查看显示源ip的web源码

url显示是base_qry_main.php,先打开它

ossim:/usr/share/ossim/www/forensics# vi base_qry_main.php

在此页面内查找HostReportMenu、base_qry_main.php等关键字无果

转而用find来找

ossim:/usr/share/ossim/www/forensics# find /usr/share/ossim/ -name "*" -exec grep '\”HostReportMenu' {} \; -print

执行后发现文件较多于是再过滤一下

ossim:/usr/share/ossim/www/forensics# for file in `find /usr/share/ossim/ -name "*" -exec grep '\”HostReportMenu' {} \; -print | grep '/usr/share/ossim/www/'`; do grep 'base_qry_main.php' ${file}; echo ${file}; done;

最后发现在/usr/share/ossim/www/forensics/base_qry_sqlcalls.php中。

 

打开此文件

srcip显示的是$current_sip的值,向上查找此变量

在第346行

$current_sip由$current_sip32通过函数baseLong2IP获得,$current_sip32为$myrow[]数组中某元素,看情况应该是从数据库中读取的记录集取得的行。继续往上查找myrow怎么获取。

第299行,myrow通过result的baseFetchRow方法获取,向上查找result

第180行,发现是执行的$sql然后获取到result。ok,我们把这个sql显示出来,加一句

echo $sql;

刷新日志显示的页面,查看sql内容

SELECT SQL_CALC_FOUND_ROWS acid_event.* FROM acid_event FORCE INDEX (timestamp) WHERE 1 ORDER BY timestamp DESC

表名是acid_event

进数据库看看

第一条的ip_src有值,通过timestamp找到我们关注的那条日志,发现ip_src是0,难怪web页面显示的是0.0.0.0,但为啥数据库中都是0。

这样的话,抓包看看是哪个程序在事件发生的时候写库。

Tcpdump监听,登录10.135.15.201

ossim:/usr/share/ossim/www/forensics# tcpdump -i lo -s 0 port 3306 -w /tmp/a.pcap

抓到之后查找操作acid_event表的语句

查看对应时间语句中插入的srcip仍然是0

查看srcport 33464对应的进程

ossim-server在写库

vi打开看是乱码,file一看是elf,有点杯具,要查看怎么写库的只能reverse了。从服务器上down下来ossim-server,先ultraedit打开看看

按ascii查找发现有操作acid_event的部分字串,应该就是它,不过一想要逆向那得搞到啥时候,就有点放弃了。

后来一想不对啊,ossim是开源的,开浏览器去官网下载源码。

 

到官网www.ossim.net找源码,发现源码

http://www.assembla.com/code/os-sim/git-2/nodes?rev=master

git clone git://git.assembla.com/os-sim.2.git

下载源码到本地

找一下哪些函数有操作acid_event

打开sim-organizer.c

#vi src/sim-organizer.c

发现2077行的sim_organizer_snort_event_update_acid_event会插入acid_event,和之前server中sql字串,抓包的sql一致,此函数接收的event参数(SimEvent *)最后会赋值给sql,

那么我们需要找到调用此函数的地方。

find一下,发现是sim-organizer.c自身会调用2894和2934行

向上寻找在哪个函数内,发现是sim_organizer_snort,传递event

find一下,寻找sim_organizer_snort的调用者,在306行

在函数sim_organizer_run内

查看event怎么得到

201行,定义

223行,通过sim_container_pop_event获得

find一下,ossim.container,发现在main.c中赋值

打开src/main.c,发现程序使用g_thread_create创建多个线程来跑应用,其中创建了一个线程

线程函数sim_thread_organizer,调用sim_organizer_run,这和上面我们发现event来源所在的函数一致。

继续看ossim.container怎么得到的。

通过sim_container_new函数得到,传递ossim.config参数,分析一下

simCmdArgs,是从ossim-server启动时,传递的参数.config传递的是使用-c选项后面的字串

ossim-server –c用来指定config.xml的位置

最后分析发现ossim.config是从/etc/ossim/server/config.xml中获取ossim的配置信息。

接下来看sim_container_new函数的作用,在src/sim-container.c中,经过分析发现,

ossim.container是获取各组件监听服务的配置和数据等信息。

接下来继续分析sim_container_pop_event函数,src/sim-conntainer.c,7120行

从队列中取出最近一个事件,查看container->_priv->events怎么得到

178行

补充:Web开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,