1. #!/bin/bash
    2. echo "
    3. ____ _ _ ____ ____ ____ ____ _ _ ____ _ _
    4. |___ |\/| |___ |__/ | __ |___ |\ | | \_/
    5. |___ | | |___ | \ |__] |___ | \| |___ |
    6. "
    7. read -p "Press any key to continue." var
    8. echo -e "\033[34m[-]主机信息:\033[0m"
    9. # 当前用户
    10. echo -e "USER:\t\t" $(whoami) 2>/dev/null
    11. # 版本信息
    12. echo -e "OS Version:\t" ${PRETTY_NAME}
    13. # 主机名
    14. echo -e "Hostname: \t" $(hostname -s)
    15. # uptime
    16. echo -e "uptime: \t" $(uptime | awk -F ',' '{print $1}')
    17. printf "\n"
    18. # CPU占用率
    19. echo -e "\033[34m[-]CPU使用率:\033[0m"
    20. awk '$0 ~/cpu[0-9]/' /proc/stat 2>/dev/null | while read line; do
    21. echo "$line" | awk '{total=$2+$3+$4+$5+$6+$7+$8;free=$5;\
    22. print$1" Free "free/total*100"%",\
    23. "Used " (total-free)/total*100"%"}'
    24. done
    25. printf "\n"
    26. # CPU占用TOP 10
    27. cpu=$(ps aux | grep -v ^'USER' | sort -rn -k3 | head -10) 2>/dev/null
    28. echo -e "\033[34m[-]CPU TOP 10:\033[0m\n${cpu}\n"
    29. # 内存占用
    30. echo -e "\033[34m[-]内存占用:\033[0m"
    31. free -m
    32. printf "\n"
    33. # 内存占用TOP 10
    34. cpu=$(ps aux | grep -v ^'USER' | sort -rn -k3 | head -10) 2>/dev/null
    35. #echo -e "\e[00;31m[*]内存占用 TOP10: \e[00m\n${cpu}\n"
    36. echo -e "\033[34m[-]内存占用 TOP 10:\033[0m\n${cpu}\n"
    37. # 查看passwd下的用户,是否存在可疑用户
    38. echo -e "\033[34m[-]/etc/passwd:\033[0m" #blue
    39. cat /etc/passwd |grep -nvi "nologin"
    40. # 显示可远程登录的用户
    41. echo -e "\033[34m[-]可远程登录用户:\033[0m"
    42. awk -F: '/\$1|\$6/{print $1}' /etc/shadow
    43. # 查看有无特权用户,并将其删除
    44. echo -e "\033[34m[-]特权用户:\033[0m"
    45. admin=`awk -F: '$3==0{print $1}' /etc/passwd`
    46. echo -e "$admin"
    47. # 删除可疑特权用户,将/home下的用户一块删掉
    48. for b in {1..10}
    49. do
    50. admin=`awk -F: '$3==0{print $1}' /etc/passwd`
    51. echo "请输入要删除的用户名:"
    52. echo "无需删除请输入“0”"
    53. read user
    54. if [ $user == "0" ]; then
    55. break
    56. else
    57. #del=`userdel -r $user`
    58. echo "Del $user succefssful!!"
    59. fi
    60. done
    61. # 显示处于连接状态的端口号和响应的进程
    62. port=`netstat -antlp` # port=`netstat -antlp | grep -ni "ESTABLISHED"`
    63. echo -e "\033[34m[-]连接端口状态::\033[0m"
    64. echo -e "$port"
    65. # for循环用于获取各个pid对应的进程
    66. for a in {1..10}
    67. do
    68. echo "please input PID $a [if PID==0, break!]:"
    69. read PID
    70. if [ $PID -eq 0 ];
    71. then
    72. break
    73. else
    74. exe=`ls -l /proc/$PID/exe`
    75. ps=`ps aux | grep $PID`
    76. echo -e "$PID\033[34m 对应进程文件路径 -> $exe\033[0m" #blue
    77. echo -e "$PID\033[34m 对应进程为 -> $ps\033[0m" #blue
    78. fi
    79. echo "是否要杀掉此进程?[1/0]"
    80. read result
    81. if [ $result -eq 1 ]; then
    82. `kill $PID`
    83. echo "$PID 删除成功!"
    84. else
    85. echo "$PID 删除失败!"
    86. fi
    87. done
    88. printf "\n"
    89. # 查看历史命令,并显示异常操作
    90. shell=`cat ~/.bash_history | grep -e "chmod" -e "rm" -e "wget" -e "ssh" -e "tar" -e "zip" -e "scp"`
    91. echo -e "\033[34m[-]历史命令::\033[0m"
    92. echo -e "$shell"
    93. printf "\n"
    94. # 增强型历史命令记录
    95. echo -e "\033[34m[-]是否添加增强型历史命令记录?[1/0]\033[0m"
    96. read r
    97. if [ $r -eq 0 ]; then
    98. echo "未添加增强型命令记录!"
    99. else
    100. cat>>/tmp/666.txt<<EOF
    101. USER_IP=\`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'\`
    102. if [ "\$USER_IP" = "" ]
    103. then
    104. USER_IP=\`hostname\`
    105. fi
    106. export HISTTIMEFORMAT="%F %T $USER_IP \`whoami\` "
    107. shopt -s histappend
    108. export PROMPT_COMMAND="history -a"
    109. EOF
    110. echo "/etc/profile写入成功!"
    111. printf "\n"
    112. # 使配置生效
    113. #source /etc/profile
    114. echo "/etc/profile已生效!"
    115. printf "\n"
    116. fi
    117. # 用户自定义启动项
    118. echo -e "\033[34m[-]用户自定义启动项:\033[0m"
    119. chkconfig=$(chkconfig --list | grep -E ":on|启用" | awk '{print $1}')
    120. if [ -n "$chkconfig" ];then
    121. (echo "[*]用户自定义启动项:" && echo "$chkconfig")
    122. else
    123. echo "[!]未发现用户自定义启动项"
    124. fi
    125. printf "\n"
    126. # 可能存在的危险启动项
    127. echo -e "\033[34m[-]危险启动项:\033[0m"
    128. dangerstarup=$(chkconfig --list | grep -E ":on|启用" | awk '{print $1}' | grep -E "\.(sh|per|py)$")
    129. if [ -n "$dangerstarup" ];then
    130. echo "[!]发现危险启动项:" && echo "$dangerstarup"
    131. else
    132. echo "[*]未发现危险启动项"
    133. fi
    134. printf "\n"
    135. # 系统定时任务
    136. echo -e "\033[34m[-]系统定时任务:\033[0m"
    137. syscrontab=$(more /etc/crontab | grep -v "# run-parts" | grep run-parts)
    138. if [ -n "$syscrontab" ];then
    139. echo "[!]发现存在系统定时任务:" && more /etc/crontab
    140. else
    141. echo "[*]未发现系统定时任务"
    142. fi
    143. printf "\n"
    144. # 可疑定时任务
    145. echo -e "\033[34m[-]可疑定时任务:\033[0m"
    146. dangersyscron=$(egrep "((chmod|useradd|groupadd|chattr)|((wget|curl)*\.(sh|pl|py)$))" /etc/cron*/* /var/spool/cron/*)
    147. if [ $? -eq 0 ];then
    148. (echo "[!]发现可疑定时任务:" && echo "$dangersyscron")
    149. else
    150. echo "[*]未发现可疑系统定时任务"
    151. fi
    152. printf "\n"
    153. # 查看日志配置
    154. echo -e "\033[34m[-]日志配置:\033[0m"
    155. logconf=$(more /etc/rsyslog.conf | egrep -v "#|^$")
    156. if [ -n "$logconf" ];then
    157. (echo "[*]日志配置如下:" && echo "$logconf")
    158. else
    159. echo "[!]未发现日志配置文件"
    160. fi
    161. printf "\n"
    162. # 检查日志是否被清除
    163. echo -e "\033[34m[-]查看日志是否被清除:\033[0m"
    164. logs=$(ls -l /var/log/)
    165. if [ -n "$logs" ];then
    166. echo "[*]日志文件存在"
    167. else
    168. echo "[!]日志文件不存在,可能被清除!"
    169. fi
    170. printf "\n"
    171. # secure日志分析
    172. echo -e "\033[34m[-]secure日志分析-登录成功情况:\033[0m"
    173. loginsuccess=$(more /var/log/secure* | grep "Accepted password" | awk '{print $1,$2,$3,$9,$11}')
    174. if [ -n "$loginsuccess" ];then
    175. (echo "[*]日志中分析到以下用户成功登录:" && echo "$loginsuccess")
    176. (echo "[*]登录成功的IP及次数如下:" && grep "Accepted " /var/log/secure* | awk '{print $11}' | sort -nr | uniq -c )
    177. (echo "[*]登录成功的用户及次数如下:" && grep "Accepted" /var/log/secure* | awk '{print $9}' | sort -nr | uniq -c )
    178. else
    179. echo "[*]日志中未发现成功登录的情况"
    180. fi
    181. printf "\n"
    182. echo -e "\033[34m[-]secure日志分析-登录失败情况:\033[0m"
    183. loginfailed=$(more /var/log/secure* | grep "Failed password" | awk '{print $1,$2,$3,$9,$11}')
    184. if [ -n "$loginfailed" ];then
    185. (echo "[!]日志中发现以下登录失败的情况:" && echo "$loginfailed") | tee -a $danger_file
    186. (echo "[!]登录失败的IP及次数如下:" && grep "Failed password" /var/log/secure* | awk '{print $11}' | sort -nr | uniq -c)
    187. (echo "[!]登录失败的用户及次数如下:" && grep "Failed password" /var/log/secure* | awk '{print $9}' | sort -nr | uniq -c)
    188. else
    189. echo "[*]日志中未发现登录失败的情况"
    190. fi
    191. printf "\n"
    192. echo -e "\033[34m[-]secure日志分析-本机登录情况:\033[0m"
    193. systemlogin=$(more /var/log/secure* | grep -E "sshd:session.*session opened" | awk '{print $1,$2,$3,$11}')
    194. if [ -n "$systemlogin" ];then
    195. (echo "[*]本机登录情况:" && echo "$systemlogin")
    196. (echo "[*]本机登录账号及次数如下:" && more /var/log/secure* | grep -E "sshd:session.*session opened" | awk '{print $11}' | sort -nr | uniq -c)
    197. else
    198. echo "[!]未发现在本机登录退出情况!"
    199. fi
    200. printf "\n"
    201. echo -e "\033[34m[-]secure日志分析-新增用户情况:\033[0m"
    202. newusers=$(more /var/log/secure* | grep "new user" | awk -F '[=,]' '{print $1,$2}' | awk '{print $1,$2,$3,$9}')
    203. if [ -n "$newusers" ];then
    204. (echo "[!]日志中发现新增用户:" && echo "$newusers")
    205. (echo "[*]新增用户账号及次数如下:" && more /var/log/secure* | grep "new user" | awk '{print $8}' | awk -F '[=,]' '{print $2}' | sort | uniq -c)
    206. else
    207. echo "[*]日志中未发现新增加用户"
    208. fi
    209. printf "\n"
    210. # message日志分析
    211. echo -e "\033[34m[-]message日志分析-文件传输情况:\033[0m"
    212. zmodem=$(more /var/log/message* | grep "ZMODEM:.*BPS")
    213. if [ -n "$zmodem" ];then
    214. (echo "[!]传输文件情况:" && echo "$zmodem")
    215. else
    216. echo "[*]日志中未发现传输文件"
    217. fi
    218. printf "\n"
    219. echo -e "\033[34m[-]cron日志分析-定时下载:\033[0m"
    220. cron_download=$(more /var/log/cron* | grep "wget|curl")
    221. if [ -n "$cron_download" ];then
    222. (echo "[!]定时下载情况:" && echo "$cron_download")
    223. else
    224. echo "[*]未发现定时下载情况"
    225. fi
    226. printf "\n"
    227. echo -e "\033[34m[-]cron日志分析-定时执行脚本:\033[0m"
    228. cron_shell=$(more /var/log/cron* | grep -E "\.py$|\.sh$|\.pl$")
    229. if [ -n "$cron_shell" ];then
    230. (echo "[!]发现定时执行脚本:" && echo "$cron_download")
    231. else
    232. echo "[*]未发现定时下载脚本"
    233. fi
    234. printf "\n"
    235. # btmp日志分析
    236. echo -e "\033[34m[-]btmp日志分析-错误登录日志分析:\033[0m"
    237. lastb=$(lastb)
    238. if [ -n "$lastb" ];then
    239. (echo "[!]错误登录日志如下:" && echo "$lastb")
    240. else
    241. echo "[*]未发现错误登录日志"
    242. fi
    243. printf "\n"
    244. # lastlog日志分析
    245. echo -e "\033[34m[-]lastlog日志分析-最后一次登录:\033[0m"
    246. lastlog=$(lastlog)
    247. if [ -n "$lastlog" ];then
    248. (echo "[!]所有用户最后一次登录日志如下:" && echo "$lastlog")
    249. else
    250. echo "[*]未发现所有用户最后一次登录日志"
    251. fi
    252. printf "\n"
    253. # wtmp日志分析
    254. echo -e "\033[34m[-]wtmp日志分析-用户登录分析:\033[0m"
    255. lasts=$(last | grep pts | grep -vw :0)
    256. if [ -n "$lasts" ];then
    257. (echo "[!]历史上登录到本机的用户如下:" && echo "$lasts")
    258. else
    259. echo "[*]未发现历史上登录到本机的用户信息"
    260. fi
    261. printf "\n"
    262. #文件排查
    263. echo -e "\033[34m[-]文件排查:\033[0m"
    264. #敏感文件
    265. echo -e "\033[34m[-]敏感文件列表:\033[0m"
    266. find / ! -path "/lib/modules*" ! -path "/usr/src*" ! -path "/snap*" ! -path "/usr/include/*" -regextype posix-extended -regex '.*sqlmap|.*msfconsole|.*\bncat|.*\bnmap|.*nikto|.*ettercap|.*backdoor|.*tunnel\.(php|jsp|asp|py)|.*\bnc|.*socks.(php|jsp|asp|py)|.*proxy.(php|jsp|asp|py)|.*brook.*|.*frps|.*frpc'
    267. printf "\n"
    268. echo -e "\033[34m[-]新增特权文件列表:\033[0m"
    269. echo -e "
    270. [1]: php
    271. [2]: jsp
    272. [3]: asp
    273. "
    274. echo "请根据编号选择语言[if input == 0; break]:"
    275. read language
    276. if [ $language -eq 1 ]; then
    277. php=`find / -mtime 0 -name "*.php"`
    278. php1=`find / -name *.php -perm 777`
    279. echo -e "$php"
    280. echo -e "777 = $php1"
    281. elif [ $language -eq 2 ]; then
    282. jsp=`find / -mtime 0 -name "*.jsp"`
    283. jsp1=`find / -name *.jsp -perm 777`
    284. echo -e "$jsp"
    285. echo -e "777 = $jsp1"
    286. elif [ $language -eq 3 ]; then
    287. asp=`find / -mtime 0 -name "*.asp"`
    288. asp1=`find / -name *.asp -perm 777`
    289. echo -e "$asp"
    290. echo -e "777 = $asp1"
    291. else
    292. echo "未匹配语言!"
    293. fi
    294. printf "\n"
    295. # 查看指定目录下文件的时间排序[从新到旧]
    296. echo -e "\033[34m[-]查看指定目录下文件的时间排序[从新到旧]:\033[0m"
    297. #ls -alt | head -n 10
    298. for x in {1..10}
    299. do
    300. echo -e "\033[34m[-]请输入目录名称[if input == 0; break]:\033[0m"
    301. read directory
    302. # if [ `echo $directory | awk -v tem=0 '{print($1>tem)? "1":"0"}'` == "0" ];then
    303. if [ $directory == "0" ]; then
    304. break
    305. else
    306. directory1=`ls $directory -alt | head -n 30`
    307. echo -e "$directory1"
    308. fi
    309. done
    310. printf "\n"
    311. # 查看异常文件的创建修改等的时间
    312. echo -e "\033[34m[-]查看异常文件的创建修改等的时间:\033[0m"
    313. for y in {1..10}
    314. do
    315. echo -e "\033[34m[-]请输入文件的绝对路径[if input == 0; break]:\033[0m"
    316. read file
    317. if [ $file == "0" ]; then
    318. break
    319. else
    320. files=`stat $file`
    321. echo -e "$files"
    322. fi
    323. done
    324. echo -e "\033[34m[+]检查结束!\033[0m"

    linux.sh