朋友挖漏洞时,一不小心下到了源码,交给我代码审计一下
拿到代码,放入vscode,项目路径
image.png
先大致浏览一下文件,thinkphp,php版本,数据库备份文件但密码加密。
先搜索一下敏感的信息,一般连接mysql的变量一般为conn,于是搜索一下,发现文件写有连接信息,应该做了单独的配置文件
image.png
继续搜索DB_PWD,得到数据库账户密码
image.png
连接phpmyadmin数据库,发现做了账户权限分离,只有子域网站的数据库。
image.png
查看admin表,发现其加密密码。放入MD5解密跑,没识别,估计是做了加盐,于是继续看代码。
搜索admin,发现登录逻辑,加密密码就是这样来的,md5(md5(passwd)+盐1+盐2)。
image.png
继续搜索变量盐1:pwd_hash,在数据库备份文件里面发现管理员表的关键字段pwd_hash,一开始有个默认的pwd_hash,现在能连接数据库,也就是能看到现在的密码加密后的pwd_hash(备份文件的pwd_hash和现在数据库的不一样)
image.png
image.png
继续搜索盐2:PWDHASH,发现是一个数组,对应的是一串字符串,应该就是加的盐2
image.png
前面加盐时还做了函数处理,所以是不知道是否还做了更改,于是深入搜索自定义函数C:function C
image.png
简要分析,这个函数的功能是做了一个类似获取配置的功能,就是输入变量,获取配置。所以上面加盐的操作,也就放入加盐值,读取即可
所以得到了加密方式
image.png
最后,拿到了数据库账户和加密方式后,就可以自己新建一个管理员账户,或者有文件权限就直接写马控制,或者暴力跑出其他管理员的账户,增加横向移动的机会。
最后的最后,胆子小,拿了数据库权限就收手了,网络不是法外之地啊!
总结:算的上第一次做真实项目的代码审计,虽然只朝着账户密码去审计,但找到过后,心里还是真的激动。想到的其他审计方面:找可能存在的0day漏洞。奈何技术实力太弱,就暂时搁置了。
如有哪个地方写的有误的,欢迎师傅们指正评判
网友评论