1.首先还是注册一个企业用户,在注册的过程中用burp抓包,修改里面的username字段
username=1′,1,1001,1,user(),1,1,1,1,1,1,1) — a
2.74cms本来是不允许注册带有特殊字符的用户名的,但是使用这样的方法可以绕过过滤,我们来看一下数据库。
3.我们再来看哪里对该用户进行了二次数据库操作。找了很久,看到了对很多操作都提供了日志记录的功能。write_memberslog函数
4.该函数中$username来源于用户名,看那些地方调用了该函数。在绝大多数情况下,74cms的$username来源于$_SESSION[‘username’],比如下面这个。
5.但是$_SESSION[‘username’]却是做了全局的addslashes的操作的。本来无计,后来辗转彷徨,却发现有两个地方不是这样调用的。
1)include\crons\clear_promotion.php。这是前台触发的。
可以看出这里的write_memberslog的$username直接从数据库中取出,而且没有经过任何的过滤,这就导致了二次注入。
2)admin\include\admin_company_fun.php。这是后台触发的。
6.两处二次注入的原理一样,我们首先用申请的带有特殊字符的账号来发布职位。然后对职位进行推广操作。推广的时候由于积分限制,只能选择变色。
7.前台触发的条件是推广时间过期,自动进行推广链接的删除时。后台触发的条件是管理员删除了推广链接。为了不等那么长时间,我们从后台来看效果
8.当推广被取消或者推广到期自动取消之后,我们再到前台用户登录日志的地方。
9.最后我们来看一下mysql的日志