zoukankan      html  css  js  c++  java
  • Linux常用工具

    说完Windows,哪能不提Linux~

    工具多多,不容错过的干货哦~

    01

    日志工具

    1

    logdissect

        logdissect用于分析日志文件和其他数据的 CLI 实用程序和 Python API。它可以解析、融合、过滤和导出数据(日志文件或json格式)

    2

    安装

    安装有两种方法,通过github和PyPI

    github

    需要:python, python-setuptools 

        (and/or python3, python3-setuptools)

    wget https://github.com/dogoncouch/logdissect/archive/v3.1.1.tar.gztar -xzf v3.1.1.tar.gzcd logdissect-3.1.1sudo make all

    注:笔者在测试时,发现当电脑只存在python2时,需要将logdissect/Makefile文件中以下关于python3的几行注释掉,才能正常安装,否则会报错


     

    PyPI

     需要:pip

    sudo pip install logdissect

    3

    选项介绍

    用法: 

    logdissect.py [-h] [--dhost DHOST] [--grep PATTERN][--last LAST][--process PROCESS][--protocol PROTOCOL][--range RANGE]              [--utc][--rdhost DHOST][--rgrep PATTERN][--rprocess PROCESS] [--rprotocol PROTOCOL][--rshost SHOST][--rsource SOURCE]              [--shost SHOST][--source SOURCE][--linejson LINEJSON] [--outlog OUTLOG][--label LABEL][--sojson SOJSON][--pretty][--version]              [--verbose] [-s] [--list-parsers][-p PARSER][-z]              [-t TZONE][file [file ...]]

    位置参数:

    file    指定输入文件

    选项参数:

    -h, --help    查看帮助信息--version     查看程序版本号--verbose     设置详细的终端输出-s            静默输出--list-parsers查看可用的解析器-p PARSER     选择解析器 (default: syslog)-z, --unzip   包含gzip压缩文件-t TZONE      指定UTC时区偏移量 (例如 '+0500')

     过滤选项:

    --grep PATTERN     匹配目的主机--grep PATTERN     匹配模式--last LAST        匹配前一个时间段 (例如 5m/3h/2d/etc)--process PROCESS  匹配源进程--protocol PROTOCOL匹配协议--range RANGE      匹配事件范围 (YYYYMMDDhhmm-YYYYMMDDhhmm)(年月日时分)--utc              使用UTC进行范围匹配--rdhost DHOST     过滤掉目标主机--rgrep PATTERN    过滤掉模式--rprocess PROCESS 过滤掉源进程--rprotocol PROTOCOL过滤掉协议--rshost SHOST     过滤掉源主机--rsource SOURCE   过滤掉日志源--shost SHOST      匹配源主机--source SOURCE    匹配日志源

    输出选项:

    --linejson LINEJSON   设置逐行JSON输出的输出文件--outlog OUTLOG       设置标准日志输出的输出文件--label LABEL         设置输出日志的标签类型 (fname|fpath)--sojson SOJSON       设置单个对象JSON输出的输出文件--pretty              对sojson输出美化格式

    4

    解析器

    --list-parsers    输出==== 可用解析模块: ====ciscoios:思科ios解析模块emerge:gentoo emerge日志解析模块linejson:logdissect每行对象JSON解析模块sojson:logdissect单个对象JSON解析模块syslog: syslog (标准时间戳)解析模块syslogiso:syslog (ISO时间戳)解析模块syslognohost:syslog (没有主机的标准时间戳)解析模块tcpdump:tcpdump终端输出解析模块webaccess:web访问日志解析模块windowsrsyslog:windows rsyslog代理日志解析模块

    5

    简单用法

    查看过去一小时的登录日志:

    logdissect --last 1h secure


     

    查看过去30分钟systemd和cron进程的日志:

    logdissect --last 30m --process systemd --process CRON messages


     

    结合详细查看指定时间范围的messages和dmesg日志

    logdissect --verbose --range 20190428120000-20190428121000 --label fpath messages dmesg


     

    输出过去30天183.238.151.209的访问记录的文件

    logdissect -s --outlog myaccess.log --grep 183.238.151.209 --last 30d --label fname /var/log/secure


     

    02

    进程工具

    1

    Linux Rootkit (vfs hook) 

        隐藏进程检测工具,一个linux内核模块,是用于检测rootkit的一个小demo。通过读取此内核模块创建的虚拟文件,可检测通过Hook vfs 函数来隐藏的进程。

    下载链接:

    https://security.tencent.com/index.php/opensource/down/16

    2

    安装方法

    unzip process_list.zipcd process_listmakemake install www.gendan5.com

    使用效果:


     

    03

    网络分析工具

    1

    Tcpdump

      Tcpdump作为Linux下一款经典的抓包工具有必要进行讲解。

    注:抓包只是一个数据包捕获过程,最重要的是对结果的分析。分析过程中,需要掌握主流协议的包结构,否则一切都是徒劳。

    2

    基础

    常用选项:

    -i:指定网络接口(如eth0,eth1。网络接口使用ifconfig命令查看)-nn:不对IP地址进行DNS反解析,并且不将端口转换为字符-vv:详细输出数据包信息-w:将捕获的结果存入指定文件,-w后接自定义文件名-r:将存入文件的结果读取出来以便分析

        重要:在抓包过程中,个人强烈建议使用 -n 选项。如果不加-n 选项,tcpdump程序就会对IP地址进行DNS反解析,反解析的过程会耗费相当部分时间。因为这里牵涉到libcap缓冲区,tcpdump捕获的数据包首先会放入缓冲区,然后上层提取。但是上层在尝试做DNS反解析的时间里,缓冲区会由于数据包过多而导致缓冲区溢出,溢出的直接结果就是部分数据包被drop,数据包被drop会对我们的分析过程造成极大影响——实际不丢包,但是数据显示却“丢包”。为了不影响我们的分析结果,个人建议加上-n选项

    限定符:

        过滤器表达式由一个或多个基元组成,原语通常由id(名称或数字)前面加一个或多个限定符),tcpdump提供了3种限定符,分别为type、direction、protocol

    type(类型):

    host    //host 192.168.1.1net     //net 192.168port    //port 80portrange    //portrange 22-801.2.2 direction(数据包方向)srcdstsrc or dstsrc and dst1.2.3 protocal(协议)etheriparprarptcpudpicmp

    3

    基本语法

    过滤主机:

    tcpdump -i ehtN -n host IPADDRtcpdump -n -i eth1 host 192.168.1.1  抓取所有经过eth1,目标或源地址是192.168.1.1的数据包tcpdump -i eth1 -n src host 192.168.1.1  指定源地址tcpdump -i eth1 -n dst host 192.168.1.1  指定目标地址

    过滤端口:

    tcpdump -i eth1 -n port PortNumtcpdump -i eth1 -n port 25 抓取所有经过eth1,目的或源端口是25的网络数据tcpdump -i eth1 -n src port 25    指定源端口

    网络过滤:

    tcpdump -i eth1 -n net 192.168tcpdump -i eth1 -n src net 192.168

    协议过滤:

    tcpdump -i ethN -n Protocoltcpdump -i eth1 -n icmptcpdump -i eth1 -n ip

    常用表达式:

    非:!或者 not

    与:&& 或者 and

    或:|| 或者 or

    tcpdump -i eth1 tcp and port 80 and (dst host 192.168.1.254 or dst host 192.168.1.200)  抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200;端口是80的TCP数据或者tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'  //前面一个的写法括号需要转义,后一种写法是将表达式用引号引起来

    4

    包头过滤

        如何从包头过滤信息了?首先要熟悉IP、TCP等协议的包头结构,此处不做赘述。包头过滤的语法如下:

    'protocol[x:y]':这里表示的是以protocol协议的第x字节起始,取后面的y字节(字节从0开始编号)'proto[x:y] & z = 0'  : proto[x:y]和z的与操作为0'proto[x:y] & z !=0'  : proto[x:y]和z的与操作不为0'proto[x:y] & z = z'  : proto[x:y]和z的与操作为z'proto[x:y] = z'      : proto[x:y]等于z操作符 : >, <, >=, <=, =, !=

    IP协议抓包:

    tcpdump-i -n eth1'((ip[2:2] = 1024) and (src host 192.168.1.1'))  抓取经过eth1网卡、数据包大小为1024并且源IP为192.168.1.1的数据包tcpdump -i -n eth1'((ip[2:2] > 1024) and (src host 192.168.1.1))'抓取经过eth1网卡、数据包字节大于1024并且源IP为192.168.1.1的数据包

    TCP协议抓包:

    抓TCP包:tcpdump -i eth3 -nn -vv tcp and host 218.8.51.194tcpdump: listening on eth3, link-type EN10MB (Ethernet), capture size 65535 bytes17:41:00.159396 IP (tos 0x0, ttl 54, id 2335, offset 0, flags [DF], proto TCP (6), length 60)218.8.51.194.51003 > 182.118.126.96.80: Flags [S], cksum 0xe729 (correct), seq 3087933325, win 14600, options [mss 1460,sackOK,TS val 796071570 ecr 0,nop,wscale 7], length 017:41:00.159427 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)182.118.126.96.80 > 218.8.51.194.51003: Flags [S.], cksum 0xce85 (correct), seq 1946096042, ack 3087933326, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 017:41:00.190017 IP (tos 0x0, ttl 54, id 2336, offset 0, flags [DF], proto TCP (6), length 40)218.8.51.194.51003 > 182.118.126.96.80: Flags [.], cksum 0x47ed (correct), seq 1, ack 1, win 115, length 017:41:00.190354 IP (tos 0x0, ttl 54, id 2337, offset 0, flags [DF], proto TCP (6), length 40)218.8.51.194.51003 > 182.118.126.96.80: Flags [F.], cksum 0x47ec (correct), seq 1, ack 1, win 115, length 017:41:00.190402 IP (tos 0x0, ttl 64, id 57183, offset 0, flags [DF], proto TCP (6), length 40)182.118.126.96.80 > 218.8.51.194.51003: Flags [F.], cksum 0x47eb (correct), seq 1, ack 2, win 115, length 017:41:00.221104 IP (tos 0x0, ttl 54, id 2338, offset 0, flags [DF], proto TCP (6), length 40)218.8.51.194.51003 > 182.118.126.96.80: Flags [.], cksum 0x47eb (correct), seq 2, ack 2, win 115, length 0

    结果分析:

    上面的结果中,2-3行信息为TCP三次握手的过程,offset 表示偏移量

    Flags 后面的标识含义:

    S (SYN)

    F (FIN)

    P (PUSH)

    R (RST)

    W (ECN CWR)

    E (ECN-Echo)

    . (no flags)

    cksum 表示校验和,其中correct表示校验和正确

    抓取目的端口等于80的报文:

    tcpdump -i eth1 -nn -vv '((tcp[2:2] = 80))'  //TCP头部的3-4字节为目的端口

    抓取源端口等于80的报文:

    tcpdump -i eht1 -nn -vv '((tcp[0:2] = 80))'  //TCP头部的1-2字节为源端口

    ** TCP的8种标记,这些标记在TCP头部的14字节——tcp[13]。TCP使用哪个标记,就会将这个标记的值置为1,如SYN包的二进制表示为: 00000010,十进制就是2

     +-+-+-+-+-+-+-+-+

     |C|E|U|A|P|R|S|F|

     |W|C|R|C|S|S|Y|I|

     |R|E|G|K|H|T|N|N|

     +-+-+-+-+-+-+-+-+

    只抓TCP握手过程中的SYN包:

    tcpdump -i eth1 -nn -vv '((tcp[13] = 2))'  这个时候标识位的值为 00000010

    抓标记为SYN、ACK的包:

    tcpdump -i eth3 -nn -vv '((tcp[13] = 18))'  此时标识位的至为 00010010

    其他标识位抓包方法一次类推。这种通过数字计算的或许会比较麻烦,因此tcpdump支持了另一种写法,上面两种写法分别如下:

    tcpdump -i eth3 -n -vv "tcp[tcpflags] & (tcp-syn) != 0"

    tcpdump -i eth3 -nn -vv '((tcp[tcpflags] & tcp-syn != 0) and (tcp[tcpflags] & tcp-ack != 0 ))'

    [root@tw13c150 ~]# tcpdump -i eth3 -n -vv "tcp[tcpflags] & (tcp-ack) != 0" and (host 218.8.51.194)

    tcpdump: listening on eth3, link-type EN10MB (Ethernet), capture size 65535 bytes

    13:46:26.019271 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)

        182.118.126.96.http > 218.8.51.194.58137: Flags [S.], cksum 0xfbc7 (correct), seq 769939001, ack 1488795467, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

    13:46:26.049499 IP (tos 0x0, ttl 56, id 34444, offset 0, flags [DF], proto TCP (6), length 40)

        218.8.51.194.58137 > 182.118.126.96.http: Flags [.], cksum 0x752f (correct), seq 1488795467, ack 769939002, win 115, lengt

    其他协议抓包(DNS、HTTP等)

    HTTP:tcpdump -i eth3 -nn -vv 'tcp[20:2]=0x4745 or tcp[20:2]=0x4854'//tcp[20:2]=0x4745 表示'GET'的'GE',tcp[20:2]=0x4854 表示HTTP的 'HT'DNS:tcpdump -i eth1 udp dst port 53

        最后,如果需要查看数据内容,可使用tcpdump -s 0 -w filename把数据包都保存下来(-s 0是抓取完整数据包,否则默认只抓68字节。),然后用wireshark分析。

    网络丢包分析抓包技巧:

        我们公司的服务器上有很多ping程序,抓包时为了避免其它数据包的影响,我们可以抓特定长度的包。

    以ICMP为例:

    A端指定数据字节为 1024 bytes pingping -c 400 -i 0.01 -s 1024 -f tw04008s2.sandai.net//那么B端抓IP数据包的长度应为1024(数据长度)+8(8字节ICMP首部)+20(字节IP首部)tcpdump -i eth1 "(ip[2:2]=1052) and src host 123.59.127.2" -w loss.cap//这里的 ip[2:2] 指的是过滤从第三字节开始的两个字节数,因此我过滤出的就是3、4字节

        其实捕获数据包不难,但是我们要学会分析、清洗数据,这就需要十分熟悉各类协议,尤其是TCP,IP,HTTP等

    04

    内存服务工具

    1

    Volatility 

    volatility 是一款内存取证和分析工具,可以对 dump 出来的内存进行分析,并提取内存中的文件。支持多平台运行(需要python环境),该工具支持 Windows 和 Linux,Kali 下面默认已经安装。

        下载地址:http://www.volatilityfoundation.org/#!releases/component_71401

    2

    使用方法

    要查看可用选项,请运行“python vol.py -h”或“python vol.py —info”

    root@kali:~/volatility-master# python vol.py -hVolatility Foundation Volatility Framework 2.6.1Usage: Volatility - A memory forensics analysis platform.

    Options:

    -h, --help  //list all available options and their default values.Default values may be set in the configuration file(/etc/volatilityrc)--conf-file=/root/.volatilityrc  //User based configuration file-d, --debug  //Debug volatility--plugins=PLUGINS    //Additional plugin directories to use (colon separated)--info  //Print information about all registered objects--cache-directory=/root/.cache/volatility    //Directory where cache files are stored--cache    //Use caching--tz=TZ    //Sets the (Olson) timezone for displaying timestamps.using pytz (if installed) or tzset-f FILENAME, --filename=FILENAME    //Filename to use when opening an image--profile=WinXPSP2x86    //Name of the profile to load (use --info to see a list of supported profiles)-l LOCATION, --location=LOCATION    //A URN location from which to load an address space-w, --write    //Enable write support--dtb=DTB    //DTB Address--shift=SHIFT    //Mac KASLR shift address--output=text    //Output in this format (support is module specific, see the Module Output Options below)--output-file=OUTPUT_FILE    //Write output in this file-v, --verbose    //Verbose information--physical_shift=PHYSICAL_SHIFT    //Linux kernel physical shift address--virtual_shift=VIRTUAL_SHIFT    //Linux kernel virtual shift address-g KDBG, --kdbg=KDBG  //Specify a KDBG virtual address (Note: for 64-bit Windows 8 and above this is the address of KdCopyDataBlock)--force    //Force utilization of suspect profile-k KPCR, --kpcr=KPCR    //Specify a specific KPCR address--cookie=COOKIE    //Specify the address of nt!ObHeaderCookie (valid for Windows 10 only)

    支持以下插件:

    linux_apihooks  - 检查userland apihookslinux_arp  - 打印ARP表linux_aslr_shift  - 自动检测Linux ASLR转换linux_banner  - 打印Linux横幅信息linux_bash  - 从bash进程内存中恢复bash历史记录linux_bash_env  - 恢复进程的动态环境变量linux_bash_hash  - 从bash进程内存中恢复bash哈希表linux_check_afinfo  - 验证网络协议的操作函数指针linux_check_creds  - 检查是否有任何进程共享凭证结构linux_check_evt_arm  - 检查异常向量表以查找syscall表挂钩linux_check_fop  - 检查rootkit修改的文件操作结构linux_check_idt  - 检查IDT是否已被更改linux_check_inline_kernel  - 检查内联内核挂钩linux_check_modules  - 将模块列表与sysfs信息进行比较(如果有)linux_check_syscall  - 检查系统调用表是否已被更改linux_check_syscall_arm  - 检查系统调用表是否已被更改linux_check_tty  - 检查tty设备的挂钩linux_cpuinfo  - 打印有关每个活动处理器的信息linux_dentry_cache  - 从dentry缓存中收集文件linux_dmesg  - 收集dmesg缓冲区linux_dump_map  - 将选定的内存映射写入磁盘linux_dynamic_env  - 恢复进程的动态环境变量linux_elfs  - 在进程映射中查找ELF二进制文件linux_enumerate_files  - 列出文件系统缓存引用的文件linux_find_file  - 列出并恢复内存中的文件linux_getcwd  - 列出每个进程的当前工作目录linux_hidden_modules  - 刻录内存以查找隐藏的内核模块linux_ifconfig  - 收集活动接口linux_info_regs  - 就像GDB中的'info registers'。它打印出所有的linux_iomem  - 提供类似于/ proc / iomem的输出linux_kernel_opened_files  - 列出从内核中打开的文件linux_keyboard_notifiers  - 解析键盘通知程序调用链linux_ldrmodules  - 将proc映射的输出与libdl中的库列表进行比较linux_library_list  - 列出加载到进程中的库linux_librarydump  - 将进程内存中的共享库转储到磁盘linux_list_raw  - 列出具有混杂套接字的应用程序linux_lsmod  - 收集加载的内核模块linux_lsof  - 列出文件描述符及其路径linux_malfind  - 查找可疑的进程映射linux_memmap  - 转储linux任务的内存映射linux_moddump  - 提取加载的内核模块linux_mount  - 收集已安装的fs /设备linux_mount_cache  - 从kmem_cache收集已安装的fs / deviceslinux_netfilter  - 列出Netfilter挂钩linux_netscan  - 用于网络连接结构linux_netstat  - 列出打开的套接字linux_pidhashtable  - 通过PID哈希表枚举进程linux_pkt_queues  - 将每个进程的数据包队列写入磁盘linux_plthook  - 扫描ELF二进制文件的PLT以挂钩到非NEEDED图像linux_proc_maps  - 收集进程内存映射linux_proc_maps_rb  - 通过映射红黑树收集linux的进程映射linux_procdump  - 将进程的可执行映像转储到磁盘linux_process_hollow  - 检查进程空洞的迹象linux_psaux  - 收集进程以及完整的命令行和开始时间linux_psenv  - 收集进程及其静态环境变量linux_pslist  - 通过遍历task_struct->任务列表来收集活动任务linux_pslist_cache  - 从kmem_cache中收集任务linux_psscan  - 扫描进程的物理内存linux_pstree  - 显示进程之间的父/子关系linux_psxview  - 查找包含各种流程列表的隐藏流程linux_recover_filesystem  - 从内存中恢复整个缓存的文件系统linux_route_cache  - 从内存中恢复路由缓存linux_sk_buff_cache  - 从sk_buff kmem_cache中恢复数据包linux_slabinfo  - 正在运行的机器上的Mimics / proc / slabinfolinux_strings  - 将物理偏移与虚拟地址匹配(可能需要一段时间,非常详细)linux_threads  - 打印进程的线程linux_tmpfs  - 从内存中恢复tmpfs文件系统linux_truecrypt_passphrase  - 恢复缓存的Truecrypt密码linux_vma_cache  - 从vm_area_struct缓存中收集VMAlinux_volshell  - 内存映像中的Shelllinux_yarascan  -  Linux内存映像中的shell

    下面简单介绍以Linux dump出来的内存文件分析

    查看网络连接信息:


     

    查看进程信息


     

    05

    信息收集工具

    1

    FastIR Collector

       FastIR Collector Linux,可以快速完成Linux服务器各项数据的信息收集,无需掌握linux各种复杂的命令与参数。该工具可以收集:系统信息(内核版本、内核模块、网络接口、主机名、发行版本),用户登录信息,网络连接,用户数据,自动进程,磁盘信息,文件系统信息等,并将结果输出为csv文件。FastIRcollector同样也有Windows的版本,可以用来收集Windows系统信息。

    下载地址:git clone https://github.com/SekoiaLab/Fastir_Collector_Linux.git

    运行环境:代码运行在python2环境下,python 2.4以上版本。必须以root账户运行

    2

    使用方法

    cd Fastir_Collector_Linuxpython fastIR_collector_linux.py

    命令执行后,会生成output目录,收集的所有数据会打包放在该目录下。

    使用sz命令下载该压缩包到本地环境。(yum install -y lszrz,可安装rz与sz)

    也可以使用ftp或sftp传输


     

     

    参数:


     
  • 相关阅读:
    通用权限管理设计 之 数据库结构设计
    jQuery LigerUI 插件介绍及使用之ligerDateEditor
    jQuery LigerUI 插件介绍及使用之ligerTree
    jQuery LigerUI V1.01(包括API和全部源码) 发布
    jQuery liger ui ligerGrid 打造通用的分页排序查询表格(提供下载)
    jQuery LigerUI V1.1.5 (包括API和全部源码) 发布
    jQuery LigerUI 使用教程表格篇(1)
    jQuery LigerUI V1.0(包括API和全部源码) 发布
    jQuery LigerUI V1.1.0 (包括API和全部源码) 发布
    nginx keepalived
  • 原文地址:https://www.cnblogs.com/gendan5/p/11526209.html
Copyright © 2011-2022 走看看