BabyXSS
使用工具
BurpSuite、PyCharm、XSS平台
解题思路
打开题目的链接,看到这样一句话“The flag is in admin.php, and only admin can access it.”,进入admin.php得到
所以这道题的关键就是找到token,那token是什么呢? 其实它是一个令牌,代表执行某些操作的权利的对象。在本题中它就是管理员身份的令牌。
进入题目推荐的XSS平台,注册登陆,创建一个项目使用默认模块来获取管理员的cookies信息,按照里面的描述将代码植入怀疑出现xss的地方(message),再输入md5的验证(这个昨天的日志已经说过了,用的PoW来完成),提交。
这时,就可以在项目内容中查看到XSS的效果,取得token信息。再次尝试get admin.php,利用一下burp截获数据包,查看cookie信息,在里面添加token信息。
继续发送,这时token验证就通过了,GET!
总结
这道题最关键的地方就是获取管理员的token信息,昨天就进行了很多错误的尝试,应该说就没往这方面想。今天尝试使用xss平台,里面的代码都是给好的,直接进行注入就好。
下面是我昨天忽略的点,补上。
什么是token?
token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。
关于web身份认证机制:
由于HTTP是一种没有状态的协议,它并不知道是谁访问了我们的应用。这里把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下次这个客户端再发送请求时候,还得再验证一下。
通用的解决方法就是,当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁,然后把这条记录的id发送给客户端,客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下cookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。
通过这道题,初步体验了一下XSS的威力。XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些恶意脚本实际上就是JavaScript脚本,所以任何JavaScript脚本能实现的功能,恶意脚本都能做到。本题构造的Payload是通过读取浏览器的cookie对象,从而发起Cookie劫持,所以攻击者不需要管理员的密码,就可以获得管理员权限才能看到内容,这也严重影响了网络安全。