前言
这里记录一些在做题过程中自己的思考和研究出来的新发现。希望能一直有下去
无参数rce新姿势
在xyctf2024的pharme中,有一个在类中的rce
|
|
这里绕过其实就是判断你的cmd中是否只有字母、下划线和括号
也就是无参数rce。
这里在看wp的时候发现有师傅用eval(end(getallheaders()));的写法进行写shell,之后只要在http头里的最后一个位置写一个cmd: phpinfo();就行
(大致意思为获取所有http头,然后返回最后一个http头给eval函数,妙啊。)
然后我马不停蹄的去ctfshow中做实验,但是结果却透心凉
|
|
因为end() 的参数是按引用传参,只能接收“变量”。把函数返回值直接丢给 end()(比如 end(getallheaders()))会报 “Only variables should be passed by reference”,从而拿不到值;而你又被正则拦了 $,没法先赋给变量。
也就是说,不能用end()
但是我们可以利用不按引用取值的聚合函数,Max()等,从http头里选一个出来
用c=eval(max(getallheaders()));再在http头里添加X-CMD: ~0;phpinfo();
0在php中是合法的表达式,而且的ascii码值大于z,基本上一定会被Max()选中
结果如下

也不是什么很nb的东西,而且也不是靠自己发现的,几乎都是ai说的,但是也很有成就感。
内网穿透反弹shell
这是在无参数rce之前研究的东西,不过那时候不太完善。
在xyctf2024的ez?Make题目中,用的是反弹shell的方法绕过。本来想用自己研究出来的内网穿透反弹shell来解决,但是我的内网穿透软件cpolar穿透后的公网ip是带cpolar这个字符的,然后a又是被ban的字母。。。。
然后这也不是第一次遇到这种问题,很多题目都有一些绕过,反弹shell不是纯数字都很有可能被ban。
一度觉得研究出来的这东西没啥作用。。
但是转折点就在写这道题ez?Make的过程中,我突发奇想,有域名应该就有ip地址啊,有ip不就可以弹shell了?!
然后就抓紧去找了一个域名查ip的网址

然后抓紧去试了一下

真的成功了!
所以之后反弹shell再也不需要vps,不知道无回显xxe或者wget那种涉及到vps上的文件的这种反弹shell能不能成功,这里还需要再多做尝试。不过也算是一个重大突破(实际上就是吧域名换成ip了。。。。。)
总结一下,内网穿透反弹shell,首先需要你有一个Linux虚拟机,然后有一个可以进行内网穿透软件(cpolar、花生壳等等)
在linux命令行开一个ifconfig,看一下虚拟机的ip,然后在内网穿透软件中选用tcp,调好端口

然后用公网域名在域名解析网站换成ip地址,
这样就可以进行反弹shell了
解决连接openvpn之后不好与kali交互导致CS无法上线的问题
问题
在打cyberstrikelab的靶场的时候,需要连接openvpn
openvpn只能连接一个机子(连了主机就无法连虚拟机)
但是可以通过虚拟机的net模式使虚拟机通过主机访问到openvpn的靶机
但是问题就在于,主机连了openvpn之后,网络结构发生变化,导致无法与虚拟机通讯。
然后CS的服务端需要linux系统,也就是说,我需要靶场能够访问到我的kali虚拟机。但是openvpn是连接在主机上的,靶场只能连接到我的主机,我的主机还连接不到虚拟机
解决
首先虚拟机可以开一个新的网卡(仅主机模式)

这样在主机连接openvpn的情况下也能与虚拟机通信
然后进行端口转发(记得查看kali仅主机模式网卡的ip)
|
|

然后在kali中运行
|
|
主机启动CS,这里启动CS就是开在自己主机的,也可以连接虚拟机ip

然后就可以在有openvpn靶场中上线CS了

也可以使用工具转发端口