flash账号密码登录
Flash登录框弹出来的号密那一秒,我盯着那个灰扑扑的码登输入框,心里其实很清楚——这玩意儿早就该进博物馆了。号密但没办法,码登公司那套老旧的号密内部培训系统还在用Flash,账号密码登录是码登唯一的入口。鼠标移到输入框上,号密光标闪烁的码登频率都带着一股2008年的味道。 账号密码登录,号密听起来简单得不能再简单。码登两个输入框,号密一个提交按钮,码登背后无非是号密拿输入的用户名去数据库里比对一下密码哈希。可真动手去拆Flash的码登登录逻辑,你会发现事情一点都不简单。号密Flash本身不直接操作数据库,它靠的是 更麻烦的是密码加密。Flash时代流行过一阵子 我印象最深的一次,是帮一个客户恢复他们Flash后台的登录。管理员密码忘了,数据库里存的是 Flash的账号密码登录还有一个隐蔽的问题: 现在浏览器全面弃用Flash,这些登录框要么被重写成HTML5,要么就彻底消失了。但那些老系统还在跑,用URLLoader或者navigateToURL把数据发给后端,中间还夹着一层crossdomain.xml的跨域策略。我见过一个系统,登录请求发出去三次才成功一次,原因是策略文件里只写了allow-access-from domain="*.example.com",而实际请求走的是IP地址。这种坑,文档里不会写,只有抓包才能看见。MD5加盐,盐值硬编码在SWF文件里。反编译工具一跑,盐值就赤裸裸地躺在代码里。我拆过一个培训系统的SWF,盐值是"flash_2009",密码是md5(password + "flash_2009")。这种设计放在今天跟裸奔没区别,但在当年,写代码的人觉得自己挺聪明。登录请求发出去的时候,URLLoader的dataFormat设成URLLoaderDataFormat.TEXT,后端返回一个"ok"或者"fail",整个流程就结束了。没有token,没有session刷新,登录状态靠一个SharedObject存在本地。你清一下浏览器缓存,登录态就没了。SHA1哈希,但盐值不知道。我翻了半天SWF,最后在一个叫com.utils.Crypto的类里找到了盐值生成逻辑——它用的是new Date().getTime()的前八位。也就是说,盐值每天变一次。客户说系统是五年前部署的,那盐值就有1825种可能。写了个脚本跑了一遍,三分钟就撞出来了。登录进去一看,后台最后一条操作记录停在2017年。SharedObject默认存在%APPDATA%\Macromedia\Flash Player\#SharedObjects\下面,文件名是一串随机字符。你可以在那里找到.sol文件,用sol Editor打开,里面经常明文存着用户名,有时候连密码都在。我见过一个电商后台的Flash登录,SharedObject里直接写了username:"admin"和password:"admin123"。开发的人大概觉得本地文件没人看。Ruffle或者CleanFlash模拟着运行。你点登录的时候,请求还是发往十年前的服务器,返回的"ok"还是那个"ok"。只是输入框里的光标,闪得越来越慢了。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-