Douphp后台注入(DouPHP_1.3_Release_20160909): 最新版本已修复 后台存在多处漏洞,拿文章分类处举例: 进入后台后选择文章分类模块,点击添加分类
进入添加页面后,在分类名称一栏中插入数据test',(SELECT user()))#,其他随便添加即可,如下图:
提交完成后查看文章分类:
Payload已经插入,接下来是二次注入的利用,
在文章分类页面删除我们刚刚添加的分类: 点击确认删除即可。
删除后进入操作记录模块:
原理: 在源码中/admin/article_category.php中
分类删除的相关代码如下: 首先第140行从数据库中取出我们已经插入的数据,cat_name为注入的参数,这里赋值给$cat_name变量,然后在148行中与$_LANG['article_category_del']拼接作为参数传入create_admin_log()函数,来看create_admin_log()函数。
function create_admin_log($action) { $create_time = time(); $ip = $this->get_ip(); $sql = "INSERT INTO " . $this->table('admin_log') . " (id, create_time, user_id, action ,ip)" . " VALUES(NULL, '$create_time', " .$_SESSION[DOU_ID]['user_id'] . ", '$action', '$ip')"; $this->query($sql); } $action为我们传入的参数,$_LANG['article_category_del']的值为“删除文章分类:”,拼接$cat_name变量后变成了“删除文章分类:test',(SELECTuser()))#”,这就是我们传入的$action参数,然后为sql语句代码赋值那一行变成了: $sql = "INSERT INTO " . $this->table('admin_log') . " (id, create_time, user_id, action ,ip)" . " VALUES(NULL, '$create_time', " .$_SESSION[DOU_ID]['user_id'] . ", '$action', '$ip')"; Sql语句变成了: INSERT INTO ` admin_log `(id, create_time,user_id, action ,ip) VALUES (NULL, '创建时间',’你的ID’, '删除文章分类:test',(SELECT user() ))#', '127.0.0.1');
test后面的单引号闭合了前面的删除文章分类前面的,SELECT user()正好占据了127.0.0.1的位置,#号把后面注释掉了,将user()函数的执行结果插入了ip一列。
|