攻防世界-WEB-难度1的解题学习过程

86 阅读2分钟

作者:wsmnihao
来源:GitHub my-ctf-notes
说明:完整代码和持续更新请在GitHub查看
标签#CTF #Web安全 #渗透测试

# 题解1:

[攻防世界-[NO.GFSJ0234] [PHP2]

漏洞信息

  • 漏洞类型:源代码泄露
  • 风险等级:中危->高危(源代码泄露会衍生其他漏洞)
  • 利用难度:极易
  • 关键函数:无 只有配置不当 [[PHP反序列化&串行化]]

解题过程

屏幕截图 2025-11-01 111532.png

漏洞发现

1、信息挖掘
	#首页只有一个提示语:
		Can you anthenticate to this website?
		#注释:**“你能通过这个网站的身份验证吗?”**
		
	2、检查源代码
	#没有任何代码构造语句
	
	3、尝试访问首页和一些关键目录及敏感文件
		手工收入较慢的话,或者按需使用,可以尝试用御剑目录扫描工具尝试
	/index.phps
	/login.phps
	/admin.phps
	/config.phps
	/flag.phps
	/backup.phps
	/index.php.bak
	/login.php.bak
	/index.php~
	/.index.php.swp
	#带s和不带s的都尝试一下
	
	
	4、漏洞发现
	/index.phps
	#是一个源代码泄露漏洞
	#返回一些配置代码,示例如下:
	
	<?php
	if("admin"===$_GET[id]) {
	  echo("<p>not allowed!</p>");
	  exit();
	}

	$_GET[id] = urldecode($_GET[id]);
	if($_GET[id] == "admin")
	{
	  echo "<p>Access granted!</p>";
	  echo "<p>Key: xxxxxxx </p>";
	}
	?>
	

// 漏洞代码片段

代码分析

===和==的验证通过问题
	
	#===是强验证,==是弱验证
	
	1、第一层$_GET[id])是否完全等于admin,如果相等,就返回not allowed!
	
	2、中间是将$_GET[id]的值进行URL解码
	
	3、第二层$_GET[id]的验证比较松散,只要符合其中的一个就返回flag/key

绕过方式

1、尝试构建绕过代码
		关键数据:admin
	构建命令
		http://example.com/?id=%61%64%6D%69%6E	
		#参考URL编解码和ASCII编码表比对,或者快一点就找ai帮忙编译
		
	2、绕过无效,尝试双重绕过
	#在原基础上,将%号URL编码为%25,这样既绕过了第一层限制,%后面跟65,实意为ASCII表中的a,对应admin的第一个字符,以此类推,构建一下绕过代码
	
	3、代码
	#尝试绕过
	http://目标网址/?id=%2561%2564%256D%2569%256E	
	
	4、flag值
	flag: cyberpeace{0a7a4bffec9d817fad109e6671f58df4}
	
	完美!!!

🔗 扩展阅读

本文是我的 《CTF Web安全实战系列》 文章:

🎯 实战记录

📚 完整代码、Payload库、工具配置均在 GitHub 同步更新
👉 主仓库:github.com/wsmnihao/my…

如果本文对你有帮助,请不要吝啬点赞收藏哦~