freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

偶遇钓鱼网站的一次代码审计
DeceaseWolf 2019-07-02 08:53:26 300910

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

分析钓鱼网站


1.png 钓鱼网站采用常用空间钓鱼CMS搭建,可通过百度搜索下载源码。

源码


3.png4.png5.png

6.png

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

分析


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

7.png 无法知道用户名密码,分析源码,查看是否存在绕过。观察index.php页面 

8.png

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

跳转至login.php登陆页面

9.png

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

10.png

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

config.php并无有效信息 

11.png

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

12.png

密码判断

首先判断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 

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

13.png

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

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

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

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

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

14.png

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

15.png

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

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

16.png

17.png18.png

发现页面数据只显示一页内容,通过分析list.php页面,发现传递page参数,修改page参数可切换下一页。
19.png


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


关注我们

Tide安全团队正式成立于2019年1月,是以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防,网络安全,移动终端,安全开发,的IoT /物联网/工控安全等方向。想了解更多Tide安全团队,请关注团队官网:  http://www.TideSec.net或关注公众号:

ewm.png

# 网站钓鱼
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 DeceaseWolf 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
TideSec
DeceaseWolf LV.1
这家伙太懒了,还未填写个人描述!
  • 11 文章数
  • 13 关注者
SSTI多种模版注入
2021-01-29
HackBox(贰)
2021-01-11
Flask框架(jinja2)服务端模板注入漏洞分析(SSTI)
2021-01-11
文章目录