YouYaX_V5.66 SQL注入漏洞(官网躺枪)

漏洞作者: 索马里的海贼

/Lib/MessageAction.php行94

[php]
public function delMesses()
{
$user = $_SESSION['youyax_user'];
if ($user == "" || $user == null)
$this->redirect("Index" . C('default_url') . "index" . C('static_url'));
for ($k = 0; $k < count($_POST['cb']); $k++) {
$id = $_POST['cb'][$k];
$result = $this->find(C('db_prefix') . "message", 'string', "mto='" . $_SESSION['youyax_user'] . "' and id='" . $id . "'");
if ($result) {
$this->delete(C('db_prefix') . "message", "mto='" . $_SESSION['youyax_user'] . "' and id='" . $id . "'");
}
}
$this->assign('jumpurl', $this->youyax_url . "/Message" . C('default_url') . "show" . C('static_url'))->assign('msgtitle', '操作成功')->assign('message', '消息已删除!')->success();
}
[/php]

 

$id = $_POST['cb'][$k];未过滤直接进了$this->find();

 

来看find()
/ORG/YouYa.php行356

[php]
public function find($table, $ext = "string", $param)
{
//在 param 中寻找与给定的正则表达式 pattern 所匹配的子串
if (preg_match_all("/=/", $param, $tmp)) {
$sql = "select * from " . $table . " where " . $param;
} else {
$param = "id=".intval($param);
$sql = "select * from " . $table . " where " . $param;
}
$result = mysql_query($sql);
[/php]

 

只要$parm里面有“=” 就不会intval了,这个点一样没输出 只能基于时间注入 跟
WooYun: YouYaX_V5.47 SQL注入漏洞(官网躺枪) 这个一样
附送一个鸡肋的本地文件包含
/ORG/YouYa.php 行107

 

[php]
private function deal($tp)
{
if (isset($_COOKIE['youyax_lang'])) {
$this->lang = require("lang/" . $_COOKIE['youyax_lang'] . "/lang.php"); //不太安全吧
$this->array_array['lang'] = $this->lang;
[/php]

 

在当前mysql用户有file权限 但是对web目录不可写的情况下,可以用注入写一个lang.php到/tmp 然后设置cookie youyax_lang为../../../tmp 就可以成功包含shell了


POST http://bbs.youyax.com/Message-delMesses.aspx HTTP/1.1
Host: bbs.youyax.com
dropdown=del&cb[]=1'

就能看到报错信息 
具体注入方法与 WooYun: YouYaX_V5.47 SQL注入漏洞(官网躺枪) 一致就不用sqlmap来演示了

发表评论