SeaCms有一个类似全局注册变量的机制,为后面的漏洞埋下了伏笔
漏洞文件:\include\ajax.php
11-44行
问题出在了scoreVideo()函数,跟进这个函数
$dsql->ExecuteNoneQuery("Update `sea_data` set v_scorenum=v_scorenum+1,v_score=v_score+".$score." where v_id=$id");
$id和$score都可以控,造成了SQL注入。
当
的时候,意外的把字段v_digg的内容利用子查询更新成工具者想获取的信息
接下来编写poc
首先理清程序的逻辑
$action=score 才能进入scoreVideo()这个函数
同时$id要大于1,否则 return "err";
Cookie中ssea3_score.$id的值不能为ok,否则 return "havescore";
因为无法直接获取子查询的数据,这里我使用DNS来获取数据(这个方法的局限性是目标环境要使用root用户连接的数据库才能获取到数据)
参考《在SQL注入中使用DNS获取数据》
http://**.**.**.**/tips/5283
理论上poc为:
但是由于程序使用了80sec的ids。绕过后的POC:
在本地调试的时候,360webscan不会进行拦截,但在实际线上环境中,上面的poc是会被360webscan拦截的。

因此还得绕过360webscan(最终poc在测试代码中)