0x01 查看目录结构
admin –管理员文件夹
css –存放css文件夹
files –存放页面文件夹
images –存放图片文件夹
inc –系统配置文件夹
install –负责网站安装
seacmseditor –cms编辑器文件夹
template –模板文件夹
upload –上传文件夹
index.php –网站首页文件
0x02 Seay扫一扫
发现34个可疑漏洞,跟着看一看。
0x03 代码分析
1.文件包含
·1.1 /index.php /admin/index.php
//单一入口模式 : 用一个文件处理所有的http请求。例如不管是内容列表页、用户登录页还是内容详细页,都是通过浏览器访问index.php文件来进行处理的,这里这个index.php文件就是这个应用程序的单一入口。
//error_reporting(0);
:表示关闭所有php错误报告。
//addslashes()
:addalashes()
函数是转义函数, 返回在预定义字符之前添加反斜杠的字符串。 预定义字符包括单引号(’)、双引号(”)、反斜杠(\)、NULL
运用实例:
只有addslashes()
就直接写个test1.php文件在目录下可以访问
也可以通过00截断
00截断利用条件:1.magic_quotes_gpc =off 2.php版本小于5.3.4
payload:
1.?r=../test.txt........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
2.?r=../test.txt/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
2.sql注入
·2.1 /admin/files/adset.php
此处ad1,ad2,ad3都有addslashes转义,并不存在sql注入,属于是误报了
·2.2 /admin/files/editcolumn.php
id和type都是GET传递进去,单引号闭合,没有其他过滤。就可以登录这个页面进行检测一哈。
构建payload
1 | ?r=editcolumn&type=1&id=1' and updatexml(1,concat(0x7e,(select%20database()),0x7e),1)--+ |
后面就直接按流程来就好了
来到错误示警处
这里的示警其实就是刚刚id和type没有任何过滤方式,只是方法变成了POST
·2.3/admin/files/editlink.php
跟刚刚同样的漏洞方式,对于可控变量不做过滤,直接单引号闭合开始查询更新数据。
构建payload:
1 | ?r=editlink&id=1' and (extractvalue(1,concat(0x7e,(select database()),0x7e)))--+ |
1 | name=1&url=1' and (extractvalue(1,concat(0x7e,(select database()),0x7e))) and' |
这是POST注入方式
·2.4/admin/files/editsoft.php
跟刚刚也是一样的,这里就不在叙述了。
·2.5 /admin/fileseditex.php
同上
·2.6 /admin/files/imageset.php
同上
·2.7 /admin/files/manageinfo.php
同上,post注入
·2.8 /admin/files/newlink.php
sql语句稍有不同
payload
1 | name=123&url=1' and (exctractvslue(1,concat(0x7e,(select databse()),0x7e))) and' |
·2.9 /admin/files/reply.php
同上
·2.10 /admin/file/seniorset.php
同上
·2.11 /admin/files/siteset.php
同上
sql注入很多类似。
·2.12 /files/content.php
id是经过addslashes转义的,但是后面的语句 UPDATE content SET hit = hit+1 WHERE id =$id"
可以看到并没有单引号转义,addslashes无效。
构建payload:
1 | http://127.0.0.1/index.php/?r=content&cid=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1) |
·2.13 /files/downloads.php
同上,无过滤。
·2.14 /files/software.php
这里其实有addslashes转义,但是,在默认情况下PHP里面magic_quotes_gpc=on ,对所有的get、post等数据会自动进行addslashes转义。不能对这个转义过的字符在使用addslashes,会导致二次转义。
可以使用函数get_magic_quotes_gpc()
进行检测
这里依旧可以构建payload
1 | ?r=sodtware&cid=1' or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) |
·2.15 /inc/db.class.php
同上,无过滤
·2.16 /install/index.php 重装注入
user、password变量都没有过滤直接拼入,存在sql注入,需要重装
构建payload
1 | 1' or extractvalue(1,concat(0x7e,(select database()),0x7e)) |
根据扫描结果,sql注入到此就无了。
3.文件包含文件读取
·3.1 /file/downloads.php
fopen()函数用于打开文件
fseek函数为调节文件指针位置
fread()函数是输出字节文件
跟着查找$sourceFile
跟着查找 $fileadd
继续$down,并没有发现包含。down来自result(数据库查询结果)
result的来源经过addslashes转义
·3.2 /inc/db.class.php 任意文件读取
$f = fopen($sqlfile,"rb");
$line = fgets($f)
跟着变量$f,追踪到$fp,最后发现都是不可控的,误报。
4.xss
·4.1/seacmseditor/php/controller.php
Seay爆出可能存在XSS,
前台可以直接爆。
存在可控变量$_GET["callback"]
和$resultcallback
这里存在正则匹配和htmlspecialchars()
函数防xss,这个可控变量没有利用方法
result的话也是被死死限定了。根据wp,再仔细看一看代码,$ad1-3经过addslashes转义进入页面
但是addslashes是对sql进行限制,对xss几乎没有限制
可以在前端直接输入xss:
还有存储型xss,利用post传参,直接根据数据库进行交互,存在存储型xss。
./admin/files/manageinfo.php存储型xss
payload
1 | <img src="D:\Myblog\source\_posts\1" onerror=alert(/xss/)> |
5.CSRF
·5.1 /admin/files/linklist.php
点击删除抓包,利用burp生成poc
成功执行