【代码审计】偶遇钓鱼网站的一次代码审计

admin 2022年4月5日23:43:16评论57 views字数 2416阅读8分3秒阅读模式






声   明



本文由Tide安全团队成员“DeceaseWolf”首发于FreeBuf TideSec专栏:

https://zhuanlan.freebuf.com/column/index/?name=TideSec

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!






偶遇一个钓鱼邮件中的钓鱼网站,并与年华大佬做了代码审计。据说近期全国出现多起钓鱼邮件事件,主要以各大高校为主,已有不少人上当,还需多加注意。

分析钓鱼网站


【代码审计】偶遇钓鱼网站的一次代码审计 钓鱼网站采用常用空间钓鱼CMS搭建,可通过百度搜索下载源码。

源码


【代码审计】偶遇钓鱼网站的一次代码审计【代码审计】偶遇钓鱼网站的一次代码审计【代码审计】偶遇钓鱼网站的一次代码审计

【代码审计】偶遇钓鱼网站的一次代码审计

观察源码发现,源码中存在360safe防护机制,无法通过正常方式进行攻击。

分析


猜测钓鱼网站后台管理页面地址,发现地址为

【代码审计】偶遇钓鱼网站的一次代码审计 无法知道用户名密码,分析源码,查看是否存在绕过。观察index.php页面 

【代码审计】偶遇钓鱼网站的一次代码审计

发现PHP代码,存在$islogin参数判断,如果$islogin==1,则进行下一步判断,否则跳出

跳转至login.php登陆页面

【代码审计】偶遇钓鱼网站的一次代码审计

 发现index.php页面中引入include参数,传递$islogin参数,查看/include/common.php,找到并打开common.php页面

【代码审计】偶遇钓鱼网站的一次代码审计

从中发现define(LOGIN_KEY,abchdbb768541)加密密钥从中发现/config.php配置文件以及member.php文件分别对两个文件进行观察

config.php并无有效信息 

【代码审计】偶遇钓鱼网站的一次代码审计

member.php中发现登陆查询数据库逻辑关系

【代码审计】偶遇钓鱼网站的一次代码审计

密码判断

首先判断cookie中是否存在islogin参数,如果不存在,则跳出。


如果存在,则对cookie中的admin_user进行base64解码,然后在 fish_admin表中查询并将返回结果赋值给$udata在进行判断.

如果$udata中username值为空,则将cookie中islogin、admin_user、admin_pass赋值为空,跳出登陆。 

如果不为空,则继续进行判断,

对$admin_pass进行加密处理。首先拼接数据库查询返回值中的password与LOGIN_KEY也就是刚刚在common.php中查看到的加密密钥。 

 进行拼接后,再进行sha1加密。

 如果$admin_pass加密后的值与cookie中传递的admin_pass的值相同,则$islogin=1,完成登陆,否则islogin、admin_user、admin_pass赋值为空,跳出登陆。

用户名判断

对$_SESSION中的islogin进行判断,如果存在,则判断$_SESSION中admin_user的值。
首先进行base64解码,然后在数据库中fish_admin表中查询,如果cookie中携带的$admin_pass与加密后的密码一致,则返回$islogin=1完成登陆。

登陆绕过


分析过登陆逻辑之后,对登陆继续绕过,到达可以绕过登陆,进入后台。


首先,因为index.php页面中会判断cookie中是否存在islogin=1,所以cookie中需要存在islogin=1 

所以,第一个内容为cookie:islogin=1; 

接下来判断admin_user。

在member.php页面中发现,SQL语句进行查询是未进行过滤,而是直接拼接,使用传递值。

所以可以通过构造内容' union select 1,2,3,'1',5,6#。 

 SQL语句拼接后便变成SELECT * FROM fish_admin WHERE username=' 'union select 1,2,'1',4,5,6#limit 1 

在本地数据库中进行查询尝试,得到返回结果

【代码审计】偶遇钓鱼网站的一次代码审计

可以发现,查询中password返回值为1 

拼接SQL语句中,使用'1'的原因为后面与LOGIN_KEY进行拼接时,需要使用字符串拼接,所以需要使用字符串进行拼接。 

这时就会发现,返回值中的password也就是会被下一步的admin_pass进行接受并且拼接密钥进行sha1加密,并对cookie中的admin_pass进行匹配,如果一致,则会绕过登陆。 

前一步拼接的SQL语句,使password返回值为1,则先对1与已经得到的LOGIN_KEY继续拼接,得到1abchdbb768541。

然后通过对拼接后的字符串进行sha1加密,得到05b2d871710e7871de3193152c978fa60052ec1d 

【代码审计】偶遇钓鱼网站的一次代码审计

 将admin_user也就是' union select 1,2,'1',4,5,6#进行base64加密,得到JyB1bmlvbiBzZWxlY3QgMSwyLCcxJyw0LDUsNiM= 

【代码审计】偶遇钓鱼网站的一次代码审计

然后将所有得到的信息写入cookie中。cookie:islogin=1;admin_user=JyB1bmlvbiBzZWxlY3QgMSwyLCcxJyw0LDUsNiM=;admin_pass=05b2d871710e7871de3193152c978fa60052ec1d; 

然后携带cookie去访问后台页面,则可以直接绕过登陆,进入后台管理。

【代码审计】偶遇钓鱼网站的一次代码审计

【代码审计】偶遇钓鱼网站的一次代码审计【代码审计】偶遇钓鱼网站的一次代码审计

发现页面数据只显示一页内容,通过分析list.php页面,发现传递page参数,修改page参数可切换下一页。
【代码审计】偶遇钓鱼网站的一次代码审计


本次偶遇钓鱼邮件,进入后台后并未对已记录账户信息的QQ进行登陆等操作。



E




N




D






【代码审计】偶遇钓鱼网站的一次代码审计


guān




zhù







men





Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或长按二维码关注公众号:

【代码审计】偶遇钓鱼网站的一次代码审计


新潮信息

专业|专注|卓越|安全


【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计
【代码审计】偶遇钓鱼网站的一次代码审计




原文始发于微信公众号(白帽子):【代码审计】偶遇钓鱼网站的一次代码审计

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月5日23:43:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【代码审计】偶遇钓鱼网站的一次代码审计http://cn-sec.com/archives/868147.html

发表评论

匿名网友 填写信息