<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    黑客 Shell 神技:掩蓋 Linux 服務器上的操作痕跡

    VSole2022-05-11 22:42:38

    1前言

    使用Shell腳本在Linux服務器上能夠控制、毀壞或者獲取任何東西,通過一些巧妙的攻擊方法黑客可能會獲取巨大的價值,但大多數攻擊也留下蹤跡。當然,這些蹤跡也可通過Shell腳本等方法來隱藏。

    尋找攻擊證據就從攻擊者留下的這些痕跡開始,如文件的修改日期。每一個Linux文件系統中的每個文件都保存著修改日期。系統管理員發現文件的最近修改時間,便提示他們系統受到攻擊,采取行動鎖定系統。然而幸運的是,修改時間不是絕對可靠的記錄,修改時間本身可以被欺騙或修改,通過編寫 Shell腳本,攻擊者可將備份和恢復修改時間的過程自動化。

    2操作步驟

    第一步:查看和操作時間戳

    多數Linux系統中包含一些允許我們快速查看和修改時間戳的工具,其中最具影響的當數“Touch”,它允許我們創建新文件、更新文件 /文件組最后一次被“touched”的時間。

    touch file

    若該文件不存在,運行上面的命令將創建一個名為“file”的新文件;若它已經存在,該命令將會更新修改日期為當前系統時間。我們也可以使用一個通配符,如下面的字符串。

    touch *

    這個命令將更新它運行的文件夾中的每個文件的時間戳。在創建和修改文件之后,有幾種方法可以查看它的詳細信息,第一個使用的為“stat”命令。

    stat file

    運行stat會返回一些關于文件的信息,包含訪問、修改或更新時間戳。針對一批文件可使用ls參數查看各文件的時間戳,使用“ -l”或者“long”,該命令會列出文件詳細信息,包含輸出時間戳。

    ls –l

    現在就可以設置當前時間戳并查看已經設置的時間戳,也可使用touch來定義一個自定義時間戳,可使用“d”標志,用yyyy-mm-dd格式定義日期,緊隨其后設置時間的小時、分鐘及秒,如下:

    touch -d"2001-01-01 20:00:00" file

    通過ls命令來確認修改信息:

    ls -l file

    這種方法適用于修改個別時間戳,對于隱藏服務器上的操作痕跡,這個方法不太奏效,可以使用shell腳本將該過程自動化。

    步驟二:組織Shell腳本

    在開始編寫腳本之前需要考慮清楚需要執行哪些過程。為了在服務器上隱藏痕跡,攻擊者需要將文件夾的原始時間戳寫入一個文件,同時能夠在我們進行任何修改設置之后還能回到原始文件。

    這兩個不同的功能會根據用戶的輸入或者參數的不同而觸發,腳本會根據這些參數執行相應的功能,同時我們需要有一種方法來處理錯誤。根據用戶的輸入將會進行三種可能的操作:

    • 沒有參數——返回錯誤消息;
    • 保存時間戳標記——將時間戳保存到文件中;
    • 恢復時間戳標記——根據保存列表恢復文件的時間戳。

    我們可以使用嵌套語句if/or語句來創建腳本,也可以根據條件將每個函數分配給自己的“if”語句,可選擇在文本編輯器或者nano中開始編寫腳本。

    步驟三:開始腳本

    從命令行啟動nano并創建一個名為“timestamps.sh”的腳本,命令如下:

    nano timestamps.sh

    然后進行下列命令:

    #!/bin/bash

    if [ $# -eq 0 ];then

    echo “Use asave (-s) or restore (-r) parameter.”

    exit 1

    fi

    在nano中按下Ctrl + O保存這個文件,通過chmod命令將它標記為可運行的腳本。

    chmod +x timestamps.sh

    然后運行腳本,測試無參數時返回錯誤信息的功能。如果腳本返回我們的echo語句,我們就可以繼續下一個條件了。

    ./timestamps.sh

    步驟四:將時間戳寫入文件

    定義if語句的條件,“-s”表示執行保存功能:

    if [ $1 ="-s" ] ; then

    fi

    當然,需要檢查計劃保存的時間戳文件是否存在,如果存在,我們可以刪除它(名為timestamps的文件),避免重復或錯誤的輸入,使用下面的命令:

    rm -f timestamps;

    然后使用“ls”命令列出所有文件和它的修改時間,可將其輸出到另一個程序,如sed,以幫助我們稍后清理這個輸入。

    ls –l

    通常會出現下面的顯示結果:

    -rw-r--r-- 1 user user 0 Jan 1 2017 file

    為了保存時間戳,我們只需要年、月、日及文件名,下面命令可以清除“Jan”之前的信息:

    ls -l file | sed 's/^.*Jan/Jan/p'

    這樣顯示的就是我們程序需要的信息,只是需要修改月份格式為數字格式:

    ls -l file | sed 's/^.*Jan/01/p'

    將所有月份都替換為數字:

    ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'

    在一個文件夾中運行我們會看到如下圖所示的結果:

    然后將輸出結果通過“>>”發送到名為“timestamps”的文件中:

    do echo $x | ls -l | sed -n 's/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;' >> timestamps

    此腳本的前兩個操作就完成了,顯示結果如下圖:

    下面可用“-s”標示測試腳本,用cat檢查保存的信息:

    ./timestamps.sh –s

    cat timestamps

    步驟五:恢復文件的時間戳

    在保存好原始時間戳后,需要恢復時間戳讓別人覺察不到文件被修改過,可使用下面命令:

    if $1 = "-r" ; then

    fi

    然后使用下面命令,轉發文本文件的內容,并一行一行運行:

    cat timestamps |while read line

    do

    done

    然后再分配一些變量讓文件數據的使用更簡單:

    MONTH=$(echo $line | cut -f1 -d\ );

    DAY=$(echo $line| cut -f2 -d\ );

    FILENAME=$(echo $line | cut -f4 -d\ );

    YEAR=$(echo $line | cut -f3 -d\ )

    雖然這四個變量在保存的時間戳文件中是一致的,但是如果時間戳是在過去一年中發生的,它只會顯示時間而不是年份。如果需要確定當前年份,我們可以分配為寫腳本的年份,也可以從系統中返回年份,使用cal命令可以查看日歷。

    然后檢索第一行,只讓顯示想要的年份信息:

    CURRENTYEAR=$(cal | head -1 | cut -f6- -d\ | sed 's/ //g')

    定義了所有變量之后可以使用“if else”語句,根據格式化的日期更新文件的時間戳,使用touch語法:

    touch -d "2001-01-01 20:00:00" file

    由于每個時間都包含冒號,因此可使用下面的“ifelse”語句完成操作,整體操作如下圖所示:

    if [ $YEAR == *:* ]; then

    touch -d $CURRENTYEAR-$MONTH-$DAY$YEAR:00 $FILENAME;

    else

    touch -d ""$YEAR-$MONTH-$DAY"" $FILENAME;

    fi

    步驟六:使用腳本

    使用的命令主要有以下幾個:

    • ./timestamps.sh –s 保存文件時間戳
    • touch -d “2050-10-12 10:00:00″ * 修改目錄下的所有文件時間戳
    • ls –a 確認修改的文件
    • ./timestamps.sh –r 恢復文件原始時間戳

    最后可以再次運行“ls -a”來查看文件的時間戳是否和之前備份的時間戳一致,整個的腳本就執行完成了,如下圖所示:

    3總結

    該腳本只是用來清除攻擊服務器之后遺留的一些痕跡。為了隱藏痕跡,黑客在針對服務器實施具體的攻擊時,必須仔細考慮使用的每一個方法,以及入侵服務器之后如何隱藏自己的痕跡。

    通過上面的介紹我們了解到,時間戳也是“會撒謊的”,因此系統管理員必須意識到他們的許多日志和保護措施是可以被操縱的,雖然看起來好像沒有異常。

    時間戳shell
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    通過在系統日志和文件系統時間上留下零痕跡,在 Linux 漏洞利用/滲透測試期間覆蓋您的蹤跡。
    它保存系統日志利用前的狀態并恢復該狀態,包括利用后的文件系統時間,在 shell 中留下零痕跡。???Shell 歷史記錄:不是清除整個歷史記錄文件,而是moonwalk將其恢復為包括調用moonwalk.文件系統時間:通過將文件的訪問/修改時間恢復為使用GET命令的方式來隱藏藍隊。
    它保存系統日志利用前的狀態并恢復該狀態,包括利用后的文件系統時間,在 shell 中留下零痕跡。???Shell 歷史記錄:不是清除整個歷史記錄文件,而是moonwalk將其恢復為包括調用moonwalk.文件系統時間:通過將文件的訪問/修改時間恢復為使用GET命令的方式來隱藏藍隊。
    moonwalk是一個400 KB的單二進制可執行文件,可以在滲透測試Unix機器時清除您的痕跡。它保存系統日志開發前的狀態,并恢復該狀態,包括開發后的文件系統時間,在 shell 中留下零幽靈的痕跡。
    系統管理員發現文件的最近修改時間,便提示他們系統受到攻擊,采取行動鎖定系統。然而幸運的是,修改時間不是絕對可靠的記錄,修改時間本身可以被欺騙或修改,通過編寫 Shell腳本,攻擊者可將備份和恢復修改時間的過程自動化。
    自己的小網站跑在阿里云的 ECS 上面, 偶爾也去分析分析自己網站服務器日志,看看網站的訪問量。看看有沒有黑闊搞破壞!于是收集,整理一些服務器日志分析命令,大家可以試試!配合sort進一步排序。uniq -c 相當于分組統計并把統計數放在最前面cat?
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类