完成任务的链接形如:
home.php?mod=draw&do=view&id=xx
这个地址最终在 source\class\class_task.php 中被处理
约第370行:
function draw($id) { global $_G; if(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) { showmessage('task_nonexistence'); } elseif($this->task['status'] != 0) { showmessage('task_not_underway'); } elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) { return -1; } ...... 之后就是获得任务奖励了
总觉得上面这一段少了些什么判断?我们对比下其他代码
约第473行:
function giveup($id) { global $_G; if($_GET['formhash'] != FORMHASH) { showmessage('undefined_action'); } elseif(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) { showmessage('task_nonexistence'); } elseif($this->task['status'] != '0') { showmessage('task_not_underway'); }
这一段是放弃任务的判断,我们看到如果 $this->task['status'] != '0',就是说任务没有开始的时候,是不能放弃任务的。
但是,在上面那段获取任务奖励的代码中,并没有判断任务是否开始,造成了无需领取任务,就可以无限次数获取奖励。
此漏洞还可以用于强行获取由于用户组不符,没有权限领取的任务的奖励。
漏洞详细利用,请见漏洞证明。
漏洞证明:1、新建一个任务,就选择红包类任务吧
2、此时千万不要申请任务,而是进入任务详细页面(完成之后就不能刷了)
home.php?mod=task&do=view&id=2
这样就能看到任务详情了,任务的奖励是 威望+1。
我们把地址改为领取任务奖励
home.php?mod=task&do=draw&id=2
打开这个地址,获得了 威望+1。
不断刷新这个页面,即可不断获得奖励。
修复方案:在 source\class\class_task.php 中的 draw 函数部分,加入任务是否领取的判断
即加上
...... elseif($this->task['status'] != '0') { showmessage('task_not_underway'); }
这样,再次使用漏洞时,就会提示
TourEx旅游网站管理系统 百度不到。 模板管理-/car/booking.html 编辑 burp抓包,改为/admin/Admin_TemplateEdit.a...
详解webshell提权服务器的21种方法 1.radmin连接法 条件是你权限够大,对方连防火墙也没有。封装个radmin上去,运行,开对方端口,然后radmin上去...
目前有不少的站长是在做博客网站的,特别是很多新手。因为博客比较简单,需要的精力还有技术相对来说都比较少一点。不过据我一直观察真正会做博客的站长其实真的很少,大部分的博客...
什么叫Scapy? Scapy是一种十分火爆且有效的数据文件解决专用工具,能够 根据实际操作数据文件来工作中。Scapy能够 在普遍的协议书范畴内编解码数据文件,将其发送至网上,捕捉,关系推送恳求和...
什么叫Nessus? Nessus是大家都知道的漏洞扫描器之一,非常是Unix电脑操作系统。即便她们在2006年关掉了源码,并在2008年删除了完全免费版本号,该专用工具依然战胜了很多竞争者。该专用...
有时候要代理进内网,但是服务器没有外网端口,也没法执行命令反弹lcx什么的,也没有提权什么什么的,只有一个webshell,这个时候就比较蛋疼了。 鄙人不才,写了一个比较山寨的php...