3.4 CTF Postbook用户A能用他人身份创建数据
缺陷标题:CTF PostBook网站>用户A登录后,可以用他人身份创建数据。
测试平台与浏览器:Windows 10+IE11或Chrome浏览器。
测试步骤:
1)打开国外安全夺旗比赛网站 主页:https://ctf.hacker101.com/ctf,如果已有账户直接登录,没有账户请注册一个账户并登录。
2)登录成功后,请进入到Postbook网站项目https://ctf.hacker101.com/ctf/launch/7。
3)单击sign up链接注册两个账户,例如:admin/admin,abcd/bacd,如果已有账户请忽略此步。
4)用abcd/abcd登录,单击链接“Write a new post”,在这个页面右击鼠标,选择“检查(Inspect)”,出现如图3-6所示的界面。
5)观察右端源代码,发现Title(title)字段是必填项required,Post(body)字段也是必填项required,当前的帖子是登录用户user_id为3。
6)篡改上一步中的源代码,将Title后面的required删除,将Post后的required删除,将user_id改为1。
期望结果:因必填字段未填,并且因身份权限不对,拒绝访问。
实际结果:用户abcd能绕过客户端必填字段检查,同时以系统第一个用户admin身份,任意创建数据,成功捕获Flag。如图3-7所示。
图3-6 创建一个新帖子Write a new post
图3-7 用户abcd成功以admin身份创建一个空白帖子,成功捕获Flag
[攻击分析]:
本例实际至少用到3种攻击方法,所以有时候系统的漏洞可以用多种手段进行攻击。
1)客户端绕行:将在本书后续章节详细讲解,就是常见的限制只有客户端防护,没有服务器端的防护,这样就导致攻击者能通过各种工具或手段轻松绕过客户端的防护,直接把非法数据提交到后台数据库。本例中,如果没有删除掉title后面的required字段,那么空白标题是提交不成功的。
2)HTTP参数篡改:将在本书后续章节详细讲解,就是用户通过各自工具或手段将原先要提交到服务器端的参数值进行篡改,后台没有做相应的防护,导致数据直接提交到后台数据库。本例中,登录的那个人user_id是3,默认情况下创建/修改都是自己的帖子,但是攻击者通过各种工具或方法将user_id篡改成1,一般系统的第一个用户都是admin,如果后台没有做身份权限校验就可能用admin的身份创建数据了。
3)认证与授权错:本例是普通用户,通过篡改自己的user_id为其他人的user_id,可以给系统中任何存在的一个人创建帖子,即使是管理员账户数据也能被普通用户创建。