Linux常用工具
說完Windows,哪能不提Linux~
工具多多,不容錯過的乾貨哦~
01
日誌工具
1
logdissect
logdissect用於分析日誌檔案和其他資料的 CLI 實用程式和 Python API。它可以解析、融合、過濾和匯出資料(日誌檔案或json格式)
2
安裝
安裝有兩種方法,透過github和PyPI
github
需要:python, python-setuptools
(and/or python3, python3-setuptools)
wget -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
使用效果:
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 下面預設已經安裝。
下載地址:!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
執行環境:程式碼執行在python2環境下,python 2.4以上版本。必須以root賬戶執行
2
使用方法
cd Fastir_Collector_Linuxpython fastIR_collector_linux.py
命令執行後,會生成output目錄,收集的所有資料會打包放在該目錄下。
使用sz命令下載該壓縮包到本地環境。(yum install -y lszrz,可安裝rz與sz)
也可以使用ftp或sftp傳輸
引數:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2657065/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux常用工具的安裝Linux
- linux 下一些常用工具的安裝Linux
- 前端常用工具前端
- lodash常用工具
- 常用工具大全
- 常用工具集
- linux網路開發者定位問題常用工具和命令總結Linux
- 常用工具彙總
- java 常用工具類Java
- 常用工具記錄
- Java常用工具介紹Java
- 常用工具備忘錄
- js 常用工具方法彙總JS
- 網站設計常用工具網站
- Java常用工具類方法整理Java
- 十五、PyTorch常用工具模組PyTorch
- Java Web開發常用工具JavaWeb
- java 常用工具類 (值得收藏)Java
- JavaScript常用工具方法封裝(1)JavaScript封裝
- Android常用工具類的封裝Android封裝
- PWA 應用列表及常用工具
- JS開發常用工具函式JS函式
- 全網最全Flutter常用工具類Flutter
- pwn常用工具快捷鍵學習
- js封裝 Ajax ——常用工具函式JS封裝函式
- SSH客戶端常用工具SecureCRT操作客戶端Securecrt
- MySQL常用工具選擇和建議MySql
- JavaScript 和 CSS 常用工具方法封裝JavaScriptCSS封裝
- 命令列常用工具的替代品命令列
- 產品經理PM常用工具列表
- Golang IDE有哪些?常用工具推薦!GolangIDE
- 整理自媒體人5個常用工具
- CSS 和 JavaScript 常用工具方法封裝教程!CSSJavaScript封裝
- 專案管理常用工具有哪些個呢?專案管理
- DevSecOps自動化安全測試常用工具dev
- 安卓逆向(二) —— 常用工具及環境安卓
- 推薦一個js常用工具函式庫JS函式
- 嚴選 | Elasticsearch史上最全最常用工具清單Elasticsearch