Guest User

Untitled

a guest
Nov 30th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.39 KB | None | 0 0
  1. #!/bin/bash
  2. #A script to enumerate local information from a Linux host
  3. v="version 0.5 (experimental)"
  4. #@oshearing
  5.  
  6. #help function
  7. usage ()
  8. {
  9. echo -e "\n\e[00;31m#########################################################\e[00m"
  10. echo -e "\e[00;31m#\e[00m" "\e[00;33mLocal Linux Enumeration & Privilege Escalation Script\e[00m" "\e[00;31m#\e[00m"
  11. echo -e "\e[00;31m#########################################################\e[00m"
  12. echo -e "\e[00;33m# www.rebootuser.com\e[00m"
  13. echo -e "\e[00;33m# $v\e[00m\n"
  14. echo -e "\e[00;33m# Example: ./LinEnum.sh -k keyword -r report -e /tmp/ -t \e[00m\n"
  15.  
  16. echo "OPTIONS:"
  17. echo "-k Enter keyword"
  18. echo "-e Enter export location"
  19. echo "-t Include thorough (lengthy) tests"
  20. echo "-r Enter report name"
  21. echo "-h Displays this help text"
  22. echo -e "\n"
  23. echo "Running with no options = limited scans/no output file"
  24.  
  25. echo -e "\e[00;31m#########################################################\e[00m"
  26. }
  27. while getopts "h:k:r:e:t" option; do
  28. case "${option}" in
  29. k) keyword=${OPTARG};;
  30. r) report=${OPTARG}"-"`date +"%d-%m-%y"`;;
  31. e) export=${OPTARG};;
  32. t) thorough=1;;
  33. h) usage; exit;;
  34. *) usage; exit;;
  35. esac
  36. done
  37.  
  38. echo -e "\n\e[00;31m#########################################################\e[00m" |tee -a $report 2>/dev/null
  39. echo -e "\e[00;31m#\e[00m" "\e[00;33mLocal Linux Enumeration & Privilege Escalation Script\e[00m" "\e[00;31m#\e[00m" |tee -a $report 2>/dev/null
  40. echo -e "\e[00;31m#########################################################\e[00m" |tee -a $report 2>/dev/null
  41. echo -e "\e[00;33m# www.rebootuser.com\e[00m" |tee -a $report 2>/dev/null
  42. echo -e "\e[00;33m# $version\e[00m\n" |tee -a $report 2>/dev/null
  43.  
  44. echo "Debug Info" |tee -a $report 2>/dev/null
  45.  
  46. if [ "$keyword" ]; then
  47. echo "keyword = $keyword" |tee -a $report 2>/dev/null
  48. else
  49. :
  50. fi
  51.  
  52. if [ "$report" ]; then
  53. echo "report name = $report" |tee -a $report 2>/dev/null
  54. else
  55. :
  56. fi
  57.  
  58. if [ "$export" ]; then
  59. echo "export location = $export" |tee -a $report 2>/dev/null
  60. else
  61. :
  62. fi
  63.  
  64. if [ "$thorough" ]; then
  65. echo "thorough tests = enabled" |tee -a $report 2>/dev/null
  66. else
  67. echo "thorough tests = disabled" |tee -a $report 2>/dev/null
  68. fi
  69.  
  70. sleep 2
  71.  
  72. if [ "$export" ]; then
  73. mkdir $export 2>/dev/null
  74. format=$export/LinEnum-export-`date +"%d-%m-%y_%k:%M"`
  75. mkdir $format 2>/dev/null
  76. else
  77. :
  78. fi
  79.  
  80. who=`whoami` |tee -a $report 2>/dev/null
  81. echo -e "\n" |tee -a $report 2>/dev/null
  82.  
  83. echo -e "\e[00;33mScan started at:"; date |tee -a $report 2>/dev/null
  84. echo -e "\e[00m\n" |tee -a $report 2>/dev/null
  85.  
  86. echo -e "\e[00;33m### SYSTEM ##############################################\e[00m" |tee -a $report 2>/dev/null
  87.  
  88. #basic kernel info
  89. unameinfo=`uname -a 2>/dev/null`
  90. if [ "$unameinfo" ]; then
  91. echo -e "\e[00;31mKernel information:\e[00m\n$unameinfo" |tee -a $report 2>/dev/null
  92. echo -e "\n" |tee -a $report 2>/dev/null
  93. else
  94. :
  95. fi
  96.  
  97. procver=`cat /proc/version 2>/dev/null`
  98. if [ "$procver" ]; then
  99. echo -e "\e[00;31mKernel information (continued):\e[00m\n$procver" |tee -a $report 2>/dev/null
  100. echo -e "\n" |tee -a $report 2>/dev/null
  101. else
  102. :
  103. fi
  104.  
  105. #search all *-release files for version info
  106. release=`cat /etc/*-release 2>/dev/null`
  107. if [ "$release" ]; then
  108. echo -e "\e[00;31mSpecific release information:\e[00m\n$release" |tee -a $report 2>/dev/null
  109. echo -e "\n" |tee -a $report 2>/dev/null
  110. else
  111. :
  112. fi
  113.  
  114. #target hostname info
  115. hostnamed=`hostname 2>/dev/null`
  116. if [ "$hostnamed" ]; then
  117. echo -e "\e[00;31mHostname:\e[00m\n$hostnamed" |tee -a $report 2>/dev/null
  118. echo -e "\n" |tee -a $report 2>/dev/null
  119. else
  120. :
  121. fi
  122.  
  123. echo -e "\e[00;33m### USER/GROUP ##########################################\e[00m" |tee -a $report 2>/dev/null
  124.  
  125. #current user details
  126. currusr=`id 2>/dev/null`
  127. if [ "$currusr" ]; then
  128. echo -e "\e[00;31mCurrent user/group info:\e[00m\n$currusr" |tee -a $report 2>/dev/null
  129. echo -e "\n" |tee -a $report 2>/dev/null
  130. else
  131. :
  132. fi
  133.  
  134. #last logged on user information
  135. lastlogedonusrs=`lastlog |grep -v "Never" 2>/dev/null`
  136. if [ "$lastlogedonusrs" ]; then
  137. echo -e "\e[00;31mUsers that have previously logged onto the system:\e[00m\n$lastlogedonusrs" |tee -a $report 2>/dev/null
  138. echo -e "\n" |tee -a $report 2>/dev/null
  139. else
  140. :
  141. fi
  142.  
  143. #strips out username uid and gid values from /etc/passwd
  144. usrsinfo=`cat /etc/passwd | cut -d ":" -f 1,2,3,4 2>/dev/null`
  145. if [ "$usrsinfo" ]; then
  146. echo -e "\e[00;31mAll users and uid/gid info:\e[00m\n$usrsinfo" |tee -a $report 2>/dev/null
  147. echo -e "\n" |tee -a $report 2>/dev/null
  148. else
  149. :
  150. fi
  151.  
  152. #lists all id's and respective group(s)
  153. grpinfo=`for i in $(cat /etc/passwd 2>/dev/null| cut -d":" -f1 2>/dev/null);do id $i;done 2>/dev/null`
  154. if [ "$grpinfo" ]; then
  155. echo -e "\e[00;31mGroup memberships:\e[00m\n$grpinfo" |tee -a $report 2>/dev/null
  156. echo -e "\n" |tee -a $report 2>/dev/null
  157. else
  158. :
  159. fi
  160.  
  161. #checks to see if any hashes are stored in /etc/passwd (depreciated *nix storage method)
  162. hashesinpasswd=`grep -v '^[^:]*:[x]' /etc/passwd 2>/dev/null`
  163. if [ "$hashesinpasswd" ]; then
  164. echo -e "\e[00;33mIt looks like we have password hashes in /etc/passwd!\e[00m\n$hashesinpasswd" |tee -a $report 2>/dev/null
  165. echo -e "\n" |tee -a $report 2>/dev/null
  166. else
  167. :
  168. fi
  169.  
  170. #locate custom user accounts with some 'known default' uids
  171. readpasswd=`grep -v "^#" /etc/passwd | awk -F: '$3 == 0 || $3 == 500 || $3 == 501 || $3 == 502 || $3 == 1000 || $3 == 1001 || $3 == 1002 || $3 == 2000 || $3 == 2001 || $3 == 2002 { print }'`
  172. if [ "$readpasswd" ]; then
  173. echo -e "\e[00;31mSample entires from /etc/passwd (searching for uid values 0, 500, 501, 502, 1000, 1001, 1002, 2000, 2001, 2002):\e[00m\n$readpasswd" |tee -a $report 2>/dev/null
  174. echo -e "\n" |tee -a $report 2>/dev/null
  175. else
  176. :
  177. fi
  178.  
  179. if [ "$export" ] && [ "$readpasswd" ]; then
  180. mkdir $format/etc-export/ 2>/dev/null
  181. cp /etc/passwd $format/etc-export/passwd 2>/dev/null
  182. else
  183. :
  184. fi
  185.  
  186. #checks to see if the shadow file can be read
  187. readshadow=`cat /etc/shadow 2>/dev/null`
  188. if [ "$readshadow" ]; then
  189. echo -e "\e[00;33m***We can read the shadow file!\e[00m\n$readshadow" |tee -a $report 2>/dev/null
  190. echo -e "\n" |tee -a $report 2>/dev/null
  191. else
  192. :
  193. fi
  194.  
  195. if [ "$export" ] && [ "$readshadow" ]; then
  196. mkdir $format/etc-export/ 2>/dev/null
  197. cp /etc/shadow $format/etc-export/shadow 2>/dev/null
  198. else
  199. :
  200. fi
  201.  
  202. #checks to see if /etc/master.passwd can be read - BSD 'shadow' variant
  203. readmasterpasswd=`cat /etc/master.passwd 2>/dev/null`
  204. if [ "$readmasterpasswd" ]; then
  205. echo -e "\e[00;33m***We can read the master.passwd file!\e[00m\n$readmasterpasswd" |tee -a $report 2>/dev/null
  206. echo -e "\n" |tee -a $report 2>/dev/null
  207. else
  208. :
  209. fi
  210.  
  211. if [ "$export" ] && [ "$readmasterpasswd" ]; then
  212. mkdir $format/etc-export/ 2>/dev/null
  213. cp /etc/master.passwd $format/etc-export/master.passwd 2>/dev/null
  214. else
  215. :
  216. fi
  217.  
  218. #all root accounts (uid 0)
  219. echo -e "\e[00;31mSuper user account(s):\e[00m" | tee -a $report 2>/dev/null; grep -v -E "^#" /etc/passwd 2>/dev/null| awk -F: '$3 == 0 { print $1}' 2>/dev/null |tee -a $report 2>/dev/null
  220. echo -e "\n" |tee -a $report 2>/dev/null
  221.  
  222. #pull out vital sudoers info
  223. sudoers=`cat /etc/sudoers 2>/dev/null | grep -v -e '^$'|grep -v "#"`
  224. if [ "$sudoers" ]; then
  225. echo -e "\e[00;31mSudoers configuration (condensed):\e[00m$sudoers" | tee -a $report 2>/dev/null
  226. echo -e "\n" |tee -a $report 2>/dev/null
  227. else
  228. :
  229. fi
  230.  
  231. if [ "$export" ] && [ "$sudoers" ]; then
  232. mkdir $format/etc-export/ 2>/dev/null
  233. cp /etc/sudoers $format/etc-export/sudoers 2>/dev/null
  234. else
  235. :
  236. fi
  237.  
  238. #can we sudo without supplying a password
  239. sudoperms=`echo '' | sudo -S -l 2>/dev/null`
  240. if [ "$sudoperms" ]; then
  241. echo -e "\e[00;33mWe can sudo without supplying a password!\e[00m\n$sudoperms" |tee -a $report 2>/dev/null
  242. echo -e "\n" |tee -a $report 2>/dev/null
  243. else
  244. :
  245. fi
  246.  
  247. #known 'good' breakout binaries
  248. sudopwnage=`echo '' | sudo -S -l 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb' | xargs -r ls -la 2>/dev/null`
  249. if [ "$sudopwnage" ]; then
  250. echo -e "\e[00;33m***Possible Sudo PWNAGE!\e[00m\n$sudopwnage" |tee -a $report 2>/dev/null
  251. echo -e "\n" |tee -a $report 2>/dev/null
  252. else
  253. :
  254. fi
  255.  
  256. #checks to see if roots home directory is accessible
  257. rthmdir=`ls -ahl /root/ 2>/dev/null`
  258. if [ "$rthmdir" ]; then
  259. echo -e "\e[00;33m***We can read root's home directory!\e[00m\n$rthmdir" |tee -a $report 2>/dev/null
  260. echo -e "\n" |tee -a $report 2>/dev/null
  261. else
  262. :
  263. fi
  264.  
  265. #displays /home directory permissions - check if any are lax
  266. homedirperms=`ls -ahl /home/ 2>/dev/null`
  267. if [ "$homedirperms" ]; then
  268. echo -e "\e[00;31mAre permissions on /home directories lax:\e[00m\n$homedirperms" |tee -a $report 2>/dev/null
  269. echo -e "\n" |tee -a $report 2>/dev/null
  270. else
  271. :
  272. fi
  273.  
  274. #looks for files we can write to that don't belong to us
  275. if [ "$thorough" = "1" ]; then
  276. grfilesall=`find / -writable -not -user \`whoami\` -type f -not -path "/proc/*" -exec ls -al {} \; 2>/dev/null`
  277. if [ "$grfilesall" ]; then
  278. echo -e "\e[00;31mFiles not owned by user but writable by group:\e[00m\n$grfilesall" |tee -a $report 2>/dev/null
  279. echo -e "\n" |tee -a $report 2>/dev/null
  280. else
  281. :
  282. fi
  283. fi
  284.  
  285. #looks for world-reabable files within /home - depending on number of /home dirs & files, this can take some time so is only 'activated' with thorough scanning switch
  286. if [ "$thorough" = "1" ]; then
  287. wrfileshm=`find /home/ -perm -4 -type f -exec ls -al {} \; 2>/dev/null`
  288. if [ "$wrfileshm" ]; then
  289. echo -e "\e[00;31mWorld-readable files within /home:\e[00m\n$wrfileshm" |tee -a $report 2>/dev/null
  290. echo -e "\n" |tee -a $report 2>/dev/null
  291. else
  292. :
  293. fi
  294. else
  295. :
  296. fi
  297.  
  298. if [ "$thorough" = "1" ]; then
  299. if [ "$export" ] && [ "$wrfileshm" ]; then
  300. mkdir $format/wr-files/ 2>/dev/null
  301. for i in $wrfileshm; do cp --parents $i $format/wr-files/ ; done 2>/dev/null
  302. else
  303. :
  304. fi
  305. else
  306. :
  307. fi
  308.  
  309. #lists current user's home directory contents
  310. if [ "$thorough" = "1" ]; then
  311. homedircontents=`ls -ahl ~ 2>/dev/null`
  312. if [ "$homedircontents" ] ; then
  313. echo -e "\e[00;31mHome directory contents:\e[00m\n$homedircontents" |tee -a $report 2>/dev/null
  314. echo -e "\n" |tee -a $report 2>/dev/null
  315. else
  316. :
  317. fi
  318. else
  319. :
  320. fi
  321.  
  322. #checks for if various ssh files are accessible - this can take some time so is only 'activated' with thorough scanning switch
  323. if [ "$thorough" = "1" ]; then
  324. sshfiles=`find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys" 2>/dev/null |xargs -r ls`
  325. if [ "$sshfiles" ]; then
  326. echo -e "\e[00;31mSSH keys/host information found in the following locations:\e[00m\n$sshfiles" |tee -a $report 2>/dev/null
  327. echo -e "\n" |tee -a $report 2>/dev/null
  328. else
  329. :
  330. fi
  331. else
  332. :
  333. fi
  334.  
  335. if [ "$thorough" = "1" ]; then
  336. if [ "$export" ] && [ "$sshfiles" ]; then
  337. mkdir $format/ssh-files/ 2>/dev/null
  338. for i in $sshfiles; do cp --parents $i $format/ssh-files/; done 2>/dev/null
  339. else
  340. :
  341. fi
  342. else
  343. :
  344. fi
  345.  
  346. #is root permitted to login via ssh
  347. sshrootlogin=`grep "PermitRootLogin " /etc/ssh/sshd_config 2>/dev/null | grep -v "#" | awk '{print $2}'`
  348. if [ "$sshrootlogin" = "yes" ]; then
  349. echo -e "\e[00;31mRoot is allowed to login via SSH:\e[00m" |tee -a $report 2>/dev/null; grep "PermitRootLogin " /etc/ssh/sshd_config 2>/dev/null | grep -v "#" |tee -a $report 2>/dev/null
  350. echo -e "\n" |tee -a $report 2>/dev/null
  351. else
  352. :
  353. fi
  354.  
  355. echo -e "\e[00;33m### ENVIRONMENTAL #######################################\e[00m" |tee -a $report 2>/dev/null
  356.  
  357. #current path configuration
  358. pathinfo=`echo $PATH 2>/dev/null`
  359. if [ "$pathinfo" ]; then
  360. echo -e "\e[00;31mPath information:\e[00m\n$pathinfo" |tee -a $report 2>/dev/null
  361. echo -e "\n" |tee -a $report 2>/dev/null
  362. else
  363. :
  364. fi
  365.  
  366. #lists available shells
  367. shellinfo=`cat /etc/shells 2>/dev/null`
  368. if [ "$shellinfo" ]; then
  369. echo -e "\e[00;31mAvailable shells:\e[00m\n$shellinfo" |tee -a $report 2>/dev/null
  370. echo -e "\n" |tee -a $report 2>/dev/null
  371. else
  372. :
  373. fi
  374.  
  375. #current umask value with both octal and symbolic output
  376. umask=`umask -S 2>/dev/null & umask 2>/dev/null`
  377. if [ "$umask" ]; then
  378. echo -e "\e[00;31mCurrent umask value:\e[00m\n$umask" |tee -a $report 2>/dev/null
  379. echo -e "\n" |tee -a $report 2>/dev/null
  380. else
  381. :
  382. fi
  383.  
  384. #umask value as in /etc/login.defs
  385. umaskdef=`cat /etc/login.defs 2>/dev/null |grep -i UMASK 2>/dev/null |grep -v "#" 2>/dev/null`
  386. if [ "$umaskdef" ]; then
  387. echo -e "\e[00;31mumask value as specified in /etc/login.defs:\e[00m\n$umaskdef" |tee -a $report 2>/dev/null
  388. echo -e "\n" |tee -a $report 2>/dev/null
  389. else
  390. :
  391. fi
  392.  
  393. #password policy information as stored in /etc/login.defs
  394. logindefs=`cat /etc/login.defs 2>/dev/null | grep "PASS_MAX_DAYS\|PASS_MIN_DAYS\|PASS_WARN_AGE\|ENCRYPT_METHOD" 2>/dev/null | grep -v "#" 2>/dev/null`
  395. if [ "$logindefs" ]; then
  396. echo -e "\e[00;31mPassword and storage information:\e[00m\n$logindefs" |tee -a $report 2>/dev/null
  397. echo -e "\n" |tee -a $report 2>/dev/null
  398. else
  399. :
  400. fi
  401.  
  402. if [ "$export" ] && [ "$logindefs" ]; then
  403. mkdir $format/etc-export/ 2>/dev/null
  404. cp /etc/login.defs $format/etc-export/login.defs 2>/dev/null
  405. else
  406. :
  407. fi
  408.  
  409. echo -e "\e[00;33m### JOBS/TASKS ##########################################\e[00m" |tee -a $report 2>/dev/null
  410.  
  411. #are there any cron jobs configured
  412. cronjobs=`ls -la /etc/cron* 2>/dev/null`
  413. if [ "$cronjobs" ]; then
  414. echo -e "\e[00;31mCron jobs:\e[00m\n$cronjobs" |tee -a $report 2>/dev/null
  415. echo -e "\n" |tee -a $report 2>/dev/null
  416. else
  417. :
  418. fi
  419.  
  420. #can we manipulate these jobs in any way
  421. cronjobwwperms=`find /etc/cron* -perm -0002 -exec ls -la {} \; -exec cat {} 2>/dev/null \;`
  422. if [ "$cronjobwwperms" ]; then
  423. echo -e "\e[00;33m***World-writable cron jobs and file contents:\e[00m\n$cronjobwwperms" |tee -a $report 2>/dev/null
  424. echo -e "\n" |tee -a $report 2>/dev/null
  425. else
  426. :
  427. fi
  428.  
  429. #contab contents
  430. crontab=`cat /etc/crontab 2>/dev/null`
  431. if [ "$crontab" ]; then
  432. echo -e "\e[00;31mCrontab contents:\e[00m\n$crontab" |tee -a $report 2>/dev/null
  433. echo -e "\n" |tee -a $report 2>/dev/null
  434. else
  435. :
  436. fi
  437.  
  438. crontabvar=`ls -la /var/spool/cron/crontabs 2>/dev/null`
  439. if [ "$crontabvar" ]; then
  440. echo -e "\e[00;31mAnything interesting in /var/spool/cron/crontabs:\e[00m\n$crontabvar" |tee -a $report 2>/dev/null
  441. echo -e "\n" |tee -a $report 2>/dev/null
  442. else
  443. :
  444. fi
  445.  
  446. anacronjobs=`ls -la /etc/anacrontab 2>/dev/null; cat /etc/anacrontab 2>/dev/null`
  447. if [ "$anacronjobs" ]; then
  448. echo -e "\e[00;31mAnacron jobs and associated file permissions:\e[00m\n$anacronjobs" |tee -a $report 2>/dev/null
  449. echo -e "\n" |tee -a $report 2>/dev/null
  450. else
  451. :
  452. fi
  453.  
  454. anacrontab=`ls -la /var/spool/anacron 2>/dev/null`
  455. if [ "$anacrontab" ]; then
  456. echo -e "\e[00;31mWhen were jobs last executed (/var/spool/anacron contents):\e[00m\n$anacrontab" |tee -a $report 2>/dev/null
  457. echo -e "\n" |tee -a $report 2>/dev/null
  458. else
  459. :
  460. fi
  461.  
  462. #pull out account names from /etc/passwd and see if any users have associated cronjobs (priv command)
  463. cronother=`cat /etc/passwd | cut -d ":" -f 1 | xargs -n1 crontab -l -u 2>/dev/null`
  464. if [ "$cronother" ]; then
  465. echo -e "\e[00;31mJobs held by all users:\e[00m\n$cronother" |tee -a $report 2>/dev/null
  466. echo -e "\n" |tee -a $report 2>/dev/null
  467. else
  468. :
  469. fi
  470.  
  471. echo -e "\e[00;33m### NETWORKING ##########################################\e[00m" |tee -a $report 2>/dev/null
  472.  
  473. #nic information
  474. nicinfo=`/sbin/ifconfig -a 2>/dev/null`
  475. if [ "$nicinfo" ]; then
  476. echo -e "\e[00;31mNetwork & IP info:\e[00m\n$nicinfo" |tee -a $report 2>/dev/null
  477. echo -e "\n" |tee -a $report 2>/dev/null
  478. else
  479. :
  480. fi
  481.  
  482. #dns settings
  483. nsinfo=`cat /etc/resolv.conf 2>/dev/null | grep "nameserver"`
  484. if [ "$nsinfo" ]; then
  485. echo -e "\e[00;31mNameserver(s):\e[00m\n$nsinfo" |tee -a $report 2>/dev/null
  486. echo -e "\n" |tee -a $report 2>/dev/null
  487. else
  488. :
  489. fi
  490.  
  491. #default route configuration
  492. defroute=`route 2>/dev/null | grep default`
  493. if [ "$defroute" ]; then
  494. echo -e "\e[00;31mDefault route:\e[00m\n$defroute" |tee -a $report 2>/dev/null
  495. echo -e "\n" |tee -a $report 2>/dev/null
  496. else
  497. :
  498. fi
  499.  
  500. #listening TCP
  501. tcpservs=`netstat -antp 2>/dev/null`
  502. if [ "$tcpservs" ]; then
  503. echo -e "\e[00;31mListening TCP:\e[00m\n$tcpservs" |tee -a $report 2>/dev/null
  504. echo -e "\n" |tee -a $report 2>/dev/null
  505. else
  506. :
  507. fi
  508.  
  509. #listening UDP
  510. udpservs=`netstat -anup 2>/dev/null`
  511. if [ "$udpservs" ]; then
  512. echo -e "\e[00;31mListening UDP:\e[00m\n$udpservs" |tee -a $report 2>/dev/null
  513. echo -e "\n" |tee -a $report 2>/dev/null
  514. else
  515. :
  516. fi
  517.  
  518. echo -e "\e[00;33m### SERVICES #############################################\e[00m" |tee -a $report 2>/dev/null
  519.  
  520. #running processes
  521. psaux=`ps aux 2>/dev/null`
  522. if [ "$psaux" ]; then
  523. echo -e "\e[00;31mRunning processes:\e[00m\n$psaux" |tee -a $report 2>/dev/null
  524. echo -e "\n" |tee -a $report 2>/dev/null
  525. else
  526. :
  527. fi
  528.  
  529. #lookup process binary path and permissisons
  530. procperm=`ps aux | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++'`
  531. if [ "$procperm" ]; then
  532. echo -e "\e[00;31mProcess binaries & associated permissions (from above list):\e[00m\n$procperm" |tee -a $report 2>/dev/null
  533. echo -e "\n" |tee -a $report 2>/dev/null
  534. else
  535. :
  536. fi
  537.  
  538. if [ "$export" ] && [ "$procperm" ]; then
  539. procpermbase=`ps aux | awk '{print $11}'|xargs -r ls 2>/dev/null |awk '!x[$0]++'`
  540. mkdir $format/ps-export/ 2>/dev/null
  541. for i in $procpermbase; do cp --parents $i $format/ps-export/; done 2>/dev/null
  542. else
  543. :
  544. fi
  545.  
  546. #anything 'useful' in inetd.conf
  547. inetdread=`cat /etc/inetd.conf 2>/dev/null`
  548. if [ "$inetdread" ]; then
  549. echo -e "\e[00;31mContents of /etc/inetd.conf:\e[00m\n$inetdread" |tee -a $report 2>/dev/null
  550. echo -e "\n" |tee -a $report 2>/dev/null
  551. else
  552. :
  553. fi
  554.  
  555. if [ "$export" ] && [ "$inetdread" ]; then
  556. mkdir $format/etc-export/ 2>/dev/null
  557. cp /etc/inetd.conf $format/etc-export/inetd.conf 2>/dev/null
  558. else
  559. :
  560. fi
  561.  
  562. #very 'rough' command to extract associated binaries from inetd.conf & show permisisons of each
  563. inetdbinperms=`cat /etc/inetd.conf 2>/dev/null | awk '{print $7}' |xargs -r ls -la 2>/dev/null`
  564. if [ "$inetdbinperms" ]; then
  565. echo -e "\e[00;31mThe related inetd binary permissions:\e[00m\n$inetdbinperms" |tee -a $report 2>/dev/null
  566. echo -e "\n" |tee -a $report 2>/dev/null
  567. else
  568. :
  569. fi
  570.  
  571. xinetdread=`cat /etc/xinetd.conf 2>/dev/null`
  572. if [ "$xinetdread" ]; then
  573. echo -e "\e[00;31mContents of /etc/xinetd.conf:\e[00m\n$xinetdread" |tee -a $report 2>/dev/null
  574. echo -e "\n" |tee -a $report 2>/dev/null
  575. else
  576. :
  577. fi
  578.  
  579. if [ "$export" ] && [ "$xinetdread" ]; then
  580. mkdir $format/etc-export/ 2>/dev/null
  581. cp /etc/xinetd.conf $format/etc-export/xinetd.conf 2>/dev/null
  582. else
  583. :
  584. fi
  585.  
  586. xinetdincd=`cat /etc/xinetd.conf 2>/dev/null |grep "/etc/xinetd.d" 2>/dev/null`
  587. if [ "$xinetdincd" ]; then
  588. echo -e "\e[00;31m/etc/xinetd.d is included in /etc/xinetd.conf - associated binary permissions are listed below:\e[00m" ls -la /etc/xinetd.d 2>/dev/null |tee -a $report 2>/dev/null
  589. echo -e "\n" |tee -a $report 2>/dev/null
  590. else
  591. :
  592. fi
  593.  
  594. #very 'rough' command to extract associated binaries from xinetd.conf & show permisisons of each
  595. xinetdbinperms=`cat /etc/xinetd.conf 2>/dev/null | awk '{print $7}' |xargs -r ls -la 2>/dev/null`
  596. if [ "$xinetdbinperms" ]; then
  597. echo -e "\e[00;31mThe related xinetd binary permissions:\e[00m\n$xinetdbinperms" |tee -a $report 2>/dev/null
  598. echo -e "\n" |tee -a $report 2>/dev/null
  599. else
  600. :
  601. fi
  602.  
  603. initdread=`ls -la /etc/init.d 2>/dev/null`
  604. if [ "$initdread" ]; then
  605. echo -e "\e[00;31m/etc/init.d/ binary permissions:\e[00m\n$initdread" |tee -a $report 2>/dev/null
  606. echo -e "\n" |tee -a $report 2>/dev/null
  607. else
  608. :
  609. fi
  610.  
  611. #init.d files NOT belonging to root!
  612. initdperms=`find /etc/init.d/ \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null`
  613. if [ "$initdperms" ]; then
  614. echo -e "\e[00;31m/etc/init.d/ files not belonging to root (uid 0):\e[00m\n$initdperms" |tee -a $report 2>/dev/null
  615. echo -e "\n" |tee -a $report 2>/dev/null
  616. else
  617. :
  618. fi
  619.  
  620. rcdread=`ls -la /etc/rc.d/init.d 2>/dev/null`
  621. if [ "$rcdread" ]; then
  622. echo -e "\e[00;31m/etc/rc.d/init.d binary permissions:\e[00m\n$rcdread" |tee -a $report 2>/dev/null
  623. echo -e "\n" |tee -a $report 2>/dev/null
  624. else
  625. :
  626. fi
  627.  
  628. #init.d files NOT belonging to root!
  629. rcdperms=`find /etc/rc.d/init.d \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null`
  630. if [ "$rcdperms" ]; then
  631. echo -e "\e[00;31m/etc/rc.d/init.d files not belonging to root (uid 0):\e[00m\n$rcdperms" |tee -a $report 2>/dev/null
  632. echo -e "\n" |tee -a $report 2>/dev/null
  633. else
  634. :
  635. fi
  636.  
  637. usrrcdread=`ls -la /usr/local/etc/rc.d 2>/dev/null`
  638. if [ "$usrrcdread" ]; then
  639. echo -e "\e[00;31m/usr/local/etc/rc.d binary permissions:\e[00m\n$usrrcdread" |tee -a $report 2>/dev/null
  640. echo -e "\n" |tee -a $report 2>/dev/null
  641. else
  642. :
  643. fi
  644.  
  645. #rc.d files NOT belonging to root!
  646. usrrcdperms=`find /usr/local/etc/rc.d \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null`
  647. if [ "$usrrcdperms" ]; then
  648. echo -e "\e[00;31m/usr/local/etc/rc.d files not belonging to root (uid 0):\e[00m\n$usrrcdperms" |tee -a $report 2>/dev/null
  649. echo -e "\n" |tee -a $report 2>/dev/null
  650. else
  651. :
  652. fi
  653.  
  654. echo -e "\e[00;33m### SOFTWARE #############################################\e[00m" |tee -a $report 2>/dev/null
  655.  
  656. #sudo version - check to see if there are any known vulnerabilities with this
  657. sudover=`sudo -V 2>/dev/null| grep "Sudo version" 2>/dev/null`
  658. if [ "$sudover" ]; then
  659. echo -e "\e[00;31mSudo version:\e[00m\n$sudover" |tee -a $report 2>/dev/null
  660. echo -e "\n" |tee -a $report 2>/dev/null
  661. else
  662. :
  663. fi
  664.  
  665. #mysql details - if installed
  666. mysqlver=`mysql --version 2>/dev/null`
  667. if [ "$mysqlver" ]; then
  668. echo -e "\e[00;31mMYSQL version:\e[00m\n$mysqlver" |tee -a $report 2>/dev/null
  669. echo -e "\n" |tee -a $report 2>/dev/null
  670. else
  671. :
  672. fi
  673.  
  674. #checks to see if root/root will get us a connection
  675. mysqlconnect=`mysqladmin -uroot -proot version 2>/dev/null`
  676. if [ "$mysqlconnect" ]; then
  677. echo -e "\e[00;33m***We can connect to the local MYSQL service with default root/root credentials!\e[00m\n$mysqlconnect" |tee -a $report 2>/dev/null
  678. echo -e "\n" |tee -a $report 2>/dev/null
  679. else
  680. :
  681. fi
  682.  
  683. #mysql version details
  684. mysqlconnectnopass=`mysqladmin -uroot version 2>/dev/null`
  685. if [ "$mysqlconnectnopass" ]; then
  686. echo -e "\e[00;33m***We can connect to the local MYSQL service as 'root' and without a password!\e[00m\n$mysqlconnectnopass" |tee -a $report 2>/dev/null
  687. echo -e "\n" |tee -a $report 2>/dev/null
  688. else
  689. :
  690. fi
  691.  
  692. #postgres details - if installed
  693. postgver=`psql -V 2>/dev/null`
  694. if [ "$postgver" ]; then
  695. echo -e "\e[00;31mPostgres version:\e[00m\n$postgver" |tee -a $report 2>/dev/null
  696. echo -e "\n" |tee -a $report 2>/dev/null
  697. else
  698. :
  699. fi
  700.  
  701. #checks to see if any postgres password exists and connects to DB 'template0' - following commands are a variant on this
  702. postcon1=`psql -U postgres template0 -c 'select version()' 2>/dev/null | grep version`
  703. if [ "$postcon1" ]; then
  704. echo -e "\e[00;33m***We can connect to Postgres DB 'template0' as user 'postgres' with no password!:\e[00m\n$postcon1" |tee -a $report 2>/dev/null
  705. echo -e "\n" |tee -a $report 2>/dev/null
  706. else
  707. :
  708. fi
  709.  
  710. postcon11=`psql -U postgres template1 -c 'select version()' 2>/dev/null | grep version`
  711. if [ "$postcon11" ]; then
  712. echo -e "\e[00;33m***We can connect to Postgres DB 'template1' as user 'postgres' with no password!:\e[00m\n$postcon11" |tee -a $report 2>/dev/null
  713. echo -e "\n" |tee -a $report 2>/dev/null
  714. else
  715. :
  716. fi
  717.  
  718. postcon2=`psql -U pgsql template0 -c 'select version()' 2>/dev/null | grep version`
  719. if [ "$postcon2" ]; then
  720. echo -e "\e[00;33m***We can connect to Postgres DB 'template0' as user 'psql' with no password!:\e[00m\n$postcon2" |tee -a $report 2>/dev/null
  721. echo -e "\n" |tee -a $report 2>/dev/null
  722. else
  723. :
  724. fi
  725.  
  726. postcon22=`psql -U pgsql template1 -c 'select version()' 2>/dev/null | grep version`
  727. if [ "$postcon22" ]; then
  728. echo -e "\e[00;33m***We can connect to Postgres DB 'template1' as user 'psql' with no password!:\e[00m\n$postcon22" |tee -a $report 2>/dev/null
  729. echo -e "\n" |tee -a $report 2>/dev/null
  730. else
  731. :
  732. fi
  733.  
  734. #apache details - if installed
  735. apachever=`apache2 -v 2>/dev/null; httpd -v 2>/dev/null`
  736. if [ "$apachever" ]; then
  737. echo -e "\e[00;31mApache version:\e[00m\n$apachever" |tee -a $report 2>/dev/null
  738. echo -e "\n" |tee -a $report 2>/dev/null
  739. else
  740. :
  741. fi
  742.  
  743. #what account is apache running under
  744. apacheusr=`cat /etc/apache2/envvars 2>/dev/null |grep -i 'user\|group' |awk '{sub(/.*\export /,"")}1'`
  745. if [ "$apacheusr" ]; then
  746. echo -e "\e[00;31mApache user configuration:\e[00m\n$apacheusr" |tee -a $report 2>/dev/null
  747. echo -e "\n" |tee -a $report 2>/dev/null
  748. else
  749. :
  750. fi
  751.  
  752. if [ "$export" ] && [ "$apacheusr" ]; then
  753. mkdir --parents $format/etc-export/apache2/ 2>/dev/null
  754. cp /etc/apache2/envvars $format/etc-export/apache2/envvars 2>/dev/null
  755. else
  756. :
  757. fi
  758.  
  759. echo -e "\e[00;33m### INTERESTING FILES ####################################\e[00m" |tee -a $report 2>/dev/null
  760.  
  761. #checks to see if various files are installed
  762. echo -e "\e[00;31mUseful file locations:\e[00m" |tee -a $report 2>/dev/null; which nc 2>/dev/null |tee -a $report 2>/dev/null; which netcat 2>/dev/null |tee -a $report 2>/dev/null; which wget 2>/dev/null |tee -a $report 2>/dev/null; which nmap 2>/dev/null |tee -a $report 2>/dev/null; which gcc 2>/dev/null |tee -a $report 2>/dev/null
  763. echo -e "\n" |tee -a $report 2>/dev/null
  764.  
  765. #limited search for installed compilers
  766. compiler=`dpkg --list 2>/dev/null| grep compiler |grep -v decompiler 2>/dev/null && yum list installed 'gcc*' 2>/dev/null| grep gcc 2>/dev/null`
  767. if [ "$compiler" ]; then
  768. echo -e "\e[00;31mInstalled compilers:\e[00m\n$compiler" |tee -a $report 2>/dev/null
  769. echo -e "\n" |tee -a $report 2>/dev/null
  770. else
  771. :
  772. fi
  773.  
  774. #manual check - lists out sensitive files, can we read/modify etc.
  775. echo -e "\e[00;31mCan we read/write sensitive files:\e[00m" |tee -a $report 2>/dev/null; ls -la /etc/passwd 2>/dev/null |tee -a $report 2>/dev/null; ls -la /etc/group 2>/dev/null |tee -a $report 2>/dev/null; ls -la /etc/profile 2>/dev/null; ls -la /etc/shadow 2>/dev/null |tee -a $report 2>/dev/null; ls -la /etc/master.passwd 2>/dev/null |tee -a $report 2>/dev/null
  776. echo -e "\n" |tee -a $report 2>/dev/null
  777.  
  778. #search for suid files - this can take some time so is only 'activated' with thorough scanning switch (as are all suid scans below)
  779. if [ "$thorough" = "1" ]; then
  780. findsuid=`find / -perm -4000 -type f 2>/dev/null`
  781. if [ "$findsuid" ]; then
  782. echo -e "\e[00;31mSUID files:\e[00m\n$findsuid" |tee -a $report 2>/dev/null
  783. echo -e "\n" |tee -a $report 2>/dev/null
  784. else
  785. :
  786. fi
  787. else
  788. :
  789. fi
  790.  
  791. if [ "$thorough" = "1" ]; then
  792. if [ "$export" ] && [ "$findsuid" ]; then
  793. mkdir $format/suid-files/ 2>/dev/null
  794. for i in $findsuid; do cp $i $format/suid-files/; done 2>/dev/null
  795. else
  796. :
  797. fi
  798. else
  799. :
  800. fi
  801.  
  802. #list of 'interesting' suid files - feel free to make additions
  803. if [ "$thorough" = "1" ]; then
  804. intsuid=`find / -perm -4000 -type f 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb\|pl' | xargs -r ls -la` 2>/dev/null
  805. if [ "$intsuid" ]; then
  806. echo -e "\e[00;33m***Possibly interesting SUID files:\e[00m\n$intsuid" |tee -a $report 2>/dev/null
  807. echo -e "\n" |tee -a $report 2>/dev/null
  808. else
  809. :
  810. fi
  811. else
  812. :
  813. fi
  814.  
  815. #lists word-writable suid files
  816. if [ "$thorough" = "1" ]; then
  817. wwsuid=`find / -perm -4007 -type f 2>/dev/null`
  818. if [ "$wwsuid" ]; then
  819. echo -e "\e[00;31mWorld-writable SUID files:\e[00m\n$wwsuid" |tee -a $report 2>/dev/null
  820. echo -e "\n" |tee -a $report 2>/dev/null
  821. else
  822. :
  823. fi
  824. else
  825. :
  826. fi
  827.  
  828. #lists world-writable suid files owned by root
  829. if [ "$thorough" = "1" ]; then
  830. wwsuidrt=`find / -uid 0 -perm -4007 -type f 2>/dev/null`
  831. if [ "$wwsuidrt" ]; then
  832. echo -e "\e[00;31mWorld-writable SUID files owned by root:\e[00m\n$wwsuidrt" |tee -a $report 2>/dev/null
  833. echo -e "\n" |tee -a $report 2>/dev/null
  834. else
  835. :
  836. fi
  837. else
  838. :
  839. fi
  840.  
  841. #search for guid files - this can take some time so is only 'activated' with thorough scanning switch (as are all guid scans below)
  842. if [ "$thorough" = "1" ]; then
  843. findguid=`find / -perm -2000 -type f 2>/dev/null`
  844. if [ "$findguid" ]; then
  845. echo -e "\e[00;31mGUID files:\e[00m\n$findguid" |tee -a $report 2>/dev/null
  846. echo -e "\n" |tee -a $report 2>/dev/null
  847. else
  848. :
  849. fi
  850. else
  851. :
  852. fi
  853.  
  854. if [ "$thorough" = "1" ]; then
  855. if [ "$export" ] && [ "$findguid" ]; then
  856. mkdir $format/guid-files/ 2>/dev/null
  857. for i in $findguid; do cp $i $format/guid-files/; done 2>/dev/null
  858. else
  859. :
  860. fi
  861. else
  862. :
  863. fi
  864.  
  865. #list of 'interesting' guid files - feel free to make additions
  866. if [ "$thorough" = "1" ]; then
  867. intguid=`find / -perm -2000 -type f 2>/dev/null | grep -w 'nmap\|perl\|'awk'\|'find'\|'bash'\|'sh'\|'man'\|'more'\|'less'\|'vi'\|'vim'\|'nc'\|'netcat'\|python\|ruby\|lua\|irb\|pl' | xargs -r ls -la`
  868. if [ "$intguid" ]; then
  869. echo -e "\e[00;33m***Possibly interesting GUID files:\e[00m\n$intguid" |tee -a $report 2>/dev/null
  870. echo -e "\n" |tee -a $report 2>/dev/null
  871. else
  872. :
  873. fi
  874. else
  875. :
  876. fi
  877.  
  878. #lists world-writable guid files
  879. if [ "$thorough" = "1" ]; then
  880. wwguid=`find / -perm -2007 -type f 2>/dev/null`
  881. if [ "$wwguid" ]; then
  882. echo -e "\e[00;31mWorld-writable GUID files:\e[00m\n$wwguid" |tee -a $report 2>/dev/null
  883. echo -e "\n" |tee -a $report 2>/dev/null
  884. else
  885. :
  886. fi
  887. else
  888. :
  889. fi
  890.  
  891. #lists world-writable guid files owned by root
  892. if [ "$thorough" = "1" ]; then
  893. wwguidrt=`find / -uid 0 -perm -2007 -type f 2>/dev/null`
  894. if [ "$wwguidrt" ]; then
  895. echo -e "\e[00;31mAWorld-writable GUID files owned by root:\e[00m\n$wwguidrt" |tee -a $report 2>/dev/null
  896. echo -e "\n" |tee -a $report 2>/dev/null
  897. else
  898. :
  899. fi
  900. else
  901. :
  902. fi
  903.  
  904. #list all world-writable files excluding /proc
  905. if [ "$thorough" = "1" ]; then
  906. wwfiles=`find / ! -path "*/proc/*" -perm -2 -type f -print 2>/dev/null`
  907. if [ "$wwfiles" ]; then
  908. echo -e "\e[00;31mWorld-writable files (excluding /proc):\e[00m\n$wwfiles" |tee -a $report 2>/dev/null
  909. echo -e "\n" |tee -a $report 2>/dev/null
  910. else
  911. :
  912. fi
  913. else
  914. :
  915. fi
  916.  
  917. if [ "$thorough" = "1" ]; then
  918. if [ "$export" ] && [ "$wwfiles" ]; then
  919. mkdir $format/ww-files/ 2>/dev/null
  920. for i in $wwfiles; do cp --parents $i $format/ww-files/; done 2>/dev/null
  921. else
  922. :
  923. fi
  924. else
  925. :
  926. fi
  927.  
  928. #are any .plan files accessible in /home (could contain useful information)
  929. usrplan=`find /home -iname *.plan -exec ls -la {} \; -exec cat {} 2>/dev/null \;`
  930. if [ "$usrplan" ]; then
  931. echo -e "\e[00;31mPlan file permissions and contents:\e[00m\n$usrplan" |tee -a $report 2>/dev/null
  932. echo -e "\n" |tee -a $report 2>/dev/null
  933. else
  934. :
  935. fi
  936.  
  937. if [ "$export" ] && [ "$usrplan" ]; then
  938. mkdir $format/plan_files/ 2>/dev/null
  939. for i in $usrplan; do cp --parents $i $format/plan_files/; done 2>/dev/null
  940. else
  941. :
  942. fi
  943.  
  944. bsdusrplan=`find /usr/home -iname *.plan -exec ls -la {} \; -exec cat {} 2>/dev/null \;`
  945. if [ "$bsdusrplan" ]; then
  946. echo -e "\e[00;31mPlan file permissions and contents:\e[00m\n$bsdusrplan" |tee -a $report 2>/dev/null
  947. echo -e "\n" |tee -a $report 2>/dev/null
  948. else
  949. :
  950. fi
  951.  
  952. if [ "$export" ] && [ "$bsdusrplan" ]; then
  953. mkdir $format/plan_files/ 2>/dev/null
  954. for i in $bsdusrplan; do cp --parents $i $format/plan_files/; done 2>/dev/null
  955. else
  956. :
  957. fi
  958.  
  959. #are there any .rhosts files accessible - these may allow us to login as another user etc.
  960. rhostsusr=`find /home -iname *.rhosts -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \;`
  961. if [ "$rhostsusr" ]; then
  962. echo -e "\e[00;31mrhost config file(s) and file contents:\e[00m\n$rhostsusr" |tee -a $report 2>/dev/null
  963. echo -e "\n" |tee -a $report 2>/dev/null
  964. else
  965. :
  966. fi
  967.  
  968. if [ "$export" ] && [ "$rhostsusr" ]; then
  969. mkdir $format/rhosts/ 2>/dev/null
  970. for i in $rhostsusr; do cp --parents $i $format/rhosts/; done 2>/dev/null
  971. else
  972. :
  973. fi
  974.  
  975. bsdrhostsusr=`find /usr/home -iname *.rhosts -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \;`
  976. if [ "$bsdrhostsusr" ]; then
  977. echo -e "\e[00;31mrhost config file(s) and file contents:\e[00m\n$bsdrhostsusr" |tee -a $report 2>/dev/null
  978. echo -e "\n" |tee -a $report 2>/dev/null
  979. else
  980. :
  981. fi
  982.  
  983. if [ "$export" ] && [ "$bsdrhostsusr" ]; then
  984. mkdir $format/rhosts 2>/dev/null
  985. for i in $bsdrhostsusr; do cp --parents $i $format/rhosts/; done 2>/dev/null
  986. else
  987. :
  988. fi
  989.  
  990. rhostssys=`find /etc -iname hosts.equiv -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \;`
  991. if [ "$rhostssys" ]; then
  992. echo -e "\e[00;31mHosts.equiv file details and file contents: \e[00m\n$rhostssys" |tee -a $report 2>/dev/null
  993. echo -e "\n" |tee -a $report 2>/dev/null
  994. else
  995. :
  996. fi
  997.  
  998. if [ "$export" ] && [ "$rhostssys" ]; then
  999. mkdir $format/rhosts/ 2>/dev/null
  1000. for i in $rhostssys; do cp --parents $i $format/rhosts/; done 2>/dev/null
  1001. else
  1002. :
  1003. fi
  1004.  
  1005. #list nfs shares/permisisons etc.
  1006. nfsexports=`ls -la /etc/exports 2>/dev/null; cat /etc/exports 2>/dev/null`
  1007. if [ "$nfsexports" ]; then
  1008. echo -e "\e[00;31mNFS config details: \e[00m\n$nfsexports" |tee -a $report 2>/dev/null
  1009. echo -e "\n" |tee -a $report 2>/dev/null
  1010. else
  1011. :
  1012. fi
  1013.  
  1014. if [ "$export" ] && [ "$nfsexports" ]; then
  1015. mkdir $format/etc-export/ 2>/dev/null
  1016. cp /etc/exports $format/etc-export/exports 2>/dev/null
  1017. else
  1018. :
  1019. fi
  1020.  
  1021. #looking for credentials in /etc/fstab
  1022. fstab=`cat /etc/fstab 2>/dev/null |grep username |awk '{sub(/.*\username=/,"");sub(/\,.*/,"")}1'| xargs -r echo username:; cat /etc/fstab 2>/dev/null |grep password |awk '{sub(/.*\password=/,"");sub(/\,.*/,"")}1'| xargs -r echo password:; cat /etc/fstab 2>/dev/null |grep domain |awk '{sub(/.*\domain=/,"");sub(/\,.*/,"")}1'| xargs -r echo domain:`
  1023. if [ "$fstab" ]; then
  1024. echo -e "\e[00;33m***Looks like there are credentials in /etc/fstab!\e[00m\n$fstab" |tee -a $report 2>/dev/null
  1025. echo -e "\n" |tee -a $report 2>/dev/null
  1026. else
  1027. :
  1028. fi
  1029.  
  1030. if [ "$export" ] && [ "$fstab" ]; then
  1031. mkdir $format/etc-exports/ 2>/dev/null
  1032. cp /etc/fstab $format/etc-exports/fstab done 2>/dev/null
  1033. else
  1034. :
  1035. fi
  1036.  
  1037. fstabcred=`cat /etc/fstab 2>/dev/null |grep cred |awk '{sub(/.*\credentials=/,"");sub(/\,.*/,"")}1'| xargs -I{} sh -c 'ls -la {}; cat {}'`
  1038. if [ "$fstabcred" ]; then
  1039. echo -e "\e[00;33m***/etc/fstab contains a credentials file!\e[00m\n$fstabcred" |tee -a $report 2>/dev/null
  1040. echo -e "\n" |tee -a $report 2>/dev/null
  1041. else
  1042. :
  1043. fi
  1044.  
  1045. if [ "$export" ] && [ "$fstabcred" ]; then
  1046. mkdir $format/etc-exports/ 2>/dev/null
  1047. cp /etc/fstab $format/etc-exports/fstab done 2>/dev/null
  1048. else
  1049. :
  1050. fi
  1051.  
  1052. #use supplied keyword and cat *.conf files for potential matches - output will show line number within relevant file path where a match has been located
  1053. if [ "$keyword" = "" ]; then
  1054. echo -e "Can't search *.conf files as no keyword was entered\n" |tee -a $report 2>/dev/null
  1055. else
  1056. confkey=`find / -maxdepth 4 -name *.conf -type f -exec grep -Hn $keyword {} \; 2>/dev/null`
  1057. if [ "$confkey" ]; then
  1058. echo -e "\e[00;31mFind keyword ($keyword) in .conf files (recursive 4 levels - output format filepath:identified line number where keyword appears):\e[00m\n$confkey" |tee -a $report 2>/dev/null
  1059. echo -e "\n" |tee -a $report 2>/dev/null
  1060. else
  1061. echo -e "\e[00;31mFind keyword ($keyword) in .conf files (recursive 4 levels):\e[00m" |tee -a $report 2>/dev/null
  1062. echo -e "'$keyword' not found in any .conf files" |tee -a $report 2>/dev/null
  1063. echo -e "\n" |tee -a $report 2>/dev/null
  1064. fi
  1065. fi
  1066.  
  1067. if [ "$keyword" = "" ]; then
  1068. :
  1069. else
  1070. if [ "$export" ] && [ "$confkey" ]; then
  1071. confkeyfile=`find / -maxdepth 4 -name *.conf -type f -exec grep -lHn $keyword {} \; 2>/dev/null`
  1072. mkdir --parents $format/keyword_file_matches/config_files/ 2>/dev/null
  1073. for i in $confkeyfile; do cp --parents $i $format/keyword_file_matches/config_files/ ; done 2>/dev/null
  1074. else
  1075. :
  1076. fi
  1077. fi
  1078.  
  1079. #use supplied keyword and cat *.log files for potential matches - output will show line number within relevant file path where a match has been located
  1080. if [ "$keyword" = "" ];then
  1081. echo -e "Can't search *.log files as no keyword was entered\n" |tee -a $report 2>/dev/null
  1082. else
  1083. logkey=`find / -name *.log -type f -exec grep -Hn $keyword {} \; 2>/dev/null`
  1084. if [ "$logkey" ]; then
  1085. echo -e "\e[00;31mFind keyword ($keyword) in .log files (output format filepath:identified line number where keyword appears):\e[00m\n$logkey" |tee -a $report 2>/dev/null
  1086. echo -e "\n" |tee -a $report 2>/dev/null
  1087. else
  1088. echo -e "\e[00;31mFind keyword ($keyword) in .log files (recursive 2 levels):\e[00m" |tee -a $report 2>/dev/null
  1089. echo -e "'$keyword' not found in any .log files"
  1090. echo -e "\n" |tee -a $report 2>/dev/null
  1091. fi
  1092. fi
  1093.  
  1094. if [ "$keyword" = "" ];then
  1095. :
  1096. else
  1097. if [ "$export" ] && [ "$logkey" ]; then
  1098. logkeyfile=`find / -name *.log -type f -exec grep -lHn $keyword {} \; 2>/dev/null`
  1099. mkdir --parents $format/keyword_file_matches/log_files/ 2>/dev/null
  1100. for i in $logkeyfile; do cp --parents $i $format/keyword_file_matches/log_files/ ; done 2>/dev/null
  1101. else
  1102. :
  1103. fi
  1104. fi
  1105.  
  1106. #use supplied keyword and cat *.ini files for potential matches - output will show line number within relevant file path where a match has been located
  1107. if [ "$keyword" = "" ];then
  1108. echo -e "Can't search *.ini files as no keyword was entered\n" |tee -a $report 2>/dev/null
  1109. else
  1110. inikey=`find / -maxdepth 4 -name *.ini -type f -exec grep -Hn $keyword {} \; 2>/dev/null`
  1111. if [ "$inikey" ]; then
  1112. echo -e "\e[00;31mFind keyword ($keyword) in .ini files (recursive 4 levels - output format filepath:identified line number where keyword appears):\e[00m\n$inikey" |tee -a $report 2>/dev/null
  1113. echo -e "\n" |tee -a $report 2>/dev/null
  1114. else
  1115. echo -e "\e[00;31mFind keyword ($keyword) in .ini files (recursive 2 levels):\e[00m" |tee -a $report 2>/dev/null
  1116. echo -e "'$keyword' not found in any .ini files" |tee -a $report 2>/dev/null
  1117. echo -e "\n"
  1118. fi
  1119. fi
  1120.  
  1121. if [ "$keyword" = "" ];then
  1122. :
  1123. else
  1124. if [ "$export" ] && [ "$inikey" ]; then
  1125. inikey=`find / -maxdepth 4 -name *.ini -type f -exec grep -lHn $keyword {} \; 2>/dev/null`
  1126. mkdir --parents $format/keyword_file_matches/ini_files/ 2>/dev/null
  1127. for i in $inikey; do cp --parents $i $format/keyword_file_matches/ini_files/ ; done 2>/dev/null
  1128. else
  1129. :
  1130. fi
  1131. fi
  1132.  
  1133. #quick extract of .conf files from /etc - only 1 level
  1134. allconf=`find /etc/ -maxdepth 1 -name *.conf -type f -exec ls -la {} \; 2>/dev/null`
  1135. if [ "$allconf" ]; then
  1136. echo -e "\e[00;31mAll *.conf files in /etc (recursive 1 level):\e[00m\n$allconf" |tee -a $report 2>/dev/null
  1137. echo -e "\n" |tee -a $report 2>/dev/null
  1138. else
  1139. :
  1140. fi
  1141.  
  1142. if [ "$export" ] && [ "$allconf" ]; then
  1143. mkdir $format/conf-files/ 2>/dev/null
  1144. for i in $allconf; do cp --parents $i $format/conf-files/; done 2>/dev/null
  1145. else
  1146. :
  1147. fi
  1148.  
  1149. #extract any user history files that are accessible
  1150. usrhist=`ls -la ~/.*_history 2>/dev/null`
  1151. if [ "$usrhist" ]; then
  1152. echo -e "\e[00;31mCurrent user's history files:\e[00m\n$usrhist" |tee -a $report 2>/dev/null
  1153. echo -e "\n" |tee -a $report 2>/dev/null
  1154. else
  1155. :
  1156. fi
  1157.  
  1158. if [ "$export" ] && [ "$usrhist" ]; then
  1159. mkdir $format/history_files/ 2>/dev/null
  1160. for i in $usrhist; do cp --parents $i $format/history_files/; done 2>/dev/null
  1161. else
  1162. :
  1163. fi
  1164.  
  1165. #can we read roots *_history files - could be passwords stored etc.
  1166. roothist=`ls -la /root/.*_history 2>/dev/null`
  1167. if [ "$roothist" ]; then
  1168. echo -e "\e[00;33m***Root's history files are accessible!\e[00m\n$roothist" |tee -a $report 2>/dev/null
  1169. echo -e "\n" |tee -a $report 2>/dev/null
  1170. else
  1171. :
  1172. fi
  1173.  
  1174. if [ "$export" ] && [ "$roothist" ]; then
  1175. mkdir $format/history_files/ 2>/dev/null
  1176. cp $roothist $format/history_files/ 2>/dev/null
  1177. else
  1178. :
  1179. fi
  1180.  
  1181. #is there any mail accessible
  1182. readmail=`ls -la /var/mail 2>/dev/null`
  1183. if [ "$readmail" ]; then
  1184. echo -e "\e[00;31mAny interesting mail in /var/mail:\e[00m\n$readmail" |tee -a $report 2>/dev/null
  1185. echo -e "\n" |tee -a $report 2>/dev/null
  1186. else
  1187. :
  1188. fi
  1189.  
  1190. #can we read roots mail
  1191. readmailroot=`head /var/mail/root 2>/dev/null`
  1192. if [ "$readmailroot" ]; then
  1193. echo -e "\e[00;33m***We can read /var/mail/root! (snippet below)\e[00m\n$readmailroot" |tee -a $report 2>/dev/null
  1194. echo -e "\n" |tee -a $report 2>/dev/null
  1195. else
  1196. :
  1197. fi
  1198.  
  1199. if [ "$export" ] && [ "$readmailroot" ]; then
  1200. mkdir $format/mail-from-root/ 2>/dev/null
  1201. cp $readmailroot $format/mail-from-root/ 2>/dev/null
  1202. else
  1203. :
  1204. fi
  1205.  
  1206. echo -e "\e[00;33m### SCAN COMPLETE ####################################\e[00m" |tee -a $report 2>/dev/null
  1207.  
  1208. #EndOfScript
Add Comment
Please, Sign In to add comment