Xctf isc-07 apache2解析漏洞,php弱类型
Xctf isc-07
题目描述:工控云管理系统项目管理页面解析漏洞
找到index.php页面,有一个view source点击查看
审计三个php代码段可以找到突破点
第一段是个简单重定向,get参数page不为index.php即可
第二段 需要得到一个admin的session,之后可以post传入con与file两个参数
File参数是自定义的文件名字,之后会处理为backup/文件名
这里对文件名进行了过滤,防止后缀名是php的文件。
上传成功后,会切换到uploaded目录,创建文件,并将con的内容写入,
那么实际文件的路径就是:uploaded/backup/xxx.xxx
第三段代码是对get参数id进行校验,如果id的浮点数不是1,且最后一位是9那么,实行查询语句,如果查询正确,会得到一个admin的session
分析完三段php代码思路就很清晰了。
通过构造id参数,得到admin的session,在绕过正则过滤上传一个php文件,将getshell语句写入变量con post传递过去,最终拿到flag.php文件即可。
Payload
Id:利用php的弱类型,随意构造“1字符9”的形式即可,
注意,这里使用了严格的sql关键字过滤函数,所以对id参数很难使用sql语句进行注入,那么为了能够查询到正确数据,实际查询语句必须是有意义的,在不知道表里有几行数据时,就查询第一行,即id=1,但又要绕过第一次校验,让id为1a9即可,这样在执行查询语句时会转化成 select * from cetc007.user where id=’1’(sql语句也有类似php的弱类型的特点)
如下图可以直接看到,sql查询语句把12a9带有字符后面的a9都过滤掉了,依旧成功查询
File: 2.php.xxx
绕过file的方法有三种
- 服务器解析漏洞
- 中间件解析漏洞
- .htacess文件
抓包看返回头部中间件是apache2
Apache2在解析文件时是从右到左的特性,先解析最右的一个后缀,如果无法识别就往前解析到能识别的后缀名,以此后缀名解析文件。本题中,2.php.xxx会被解析成2.php
查看目录,上传成功
连接菜刀
打开flag.php文件,拿到flag