ctf代码审计:

1.变量覆盖:

①:针对extract函数的变量覆盖漏洞:

 1 <?php
 2 @error_reporting(E_ALL^E_NOTICE);
 3 require(‘config.php‘);
 4
 5 if($_GET[‘show_source‘] === ‘1‘) {
 6     highlight_file(__FILE__);
 7     exit;
 8 }
 9
10 $user = null;
11
12 // connect to database
13
14 if(!empty($_POST[‘data‘])) {
15     try {
16         $data = json_decode($_POST[‘data‘], true);
17     } catch (Exception $e) {
18         $data = [];
19     }
20     extract($data);
21     if($users[$username] && strcmp($users[$username], $password) == 0) {
22         $user = $username;
23     }
24 }
1  <?php if($user == ‘admin‘) printf("<code>%s</code>", htmlentities($flag)); ?>

当$user=“admin”时,输出flag

向上看,$user =$username

则需要使$username="admin"

if成立的条件是$users[$username]不为空并且需要满足$users[$username]=$password

我们在不知道$password的情况下需要使$users[$username]=$password成立。

再向上看extract()函数,此函数为变量注册函数,将数组中的数据以键名为变量名,键值为变量值的形式注册变量。

那在这就存在变量覆盖问题,我们可以传入任意构造$password的值覆盖原有的$password的值。

即构造data={"username":"admin","password":"123","users":{"admin":"123"}}即可得到flag

②:基于parse_str()函数的变量覆盖漏洞

 1 <meta charset="utf-8">
 2 error_reporting(0);
 3 if (empty($_GET[‘b‘])) {
 4     show_source(__FILE__);
 5     die();
 6 }else{
 7     include(‘flag.php‘);
 8 $a = "www.XMAN.com";
 9 $b = $_GET[‘b‘];
10 @parse_str($b);
11 if ($a[0] != ‘QNKCDZO‘ && md5($a[0]) == md5(‘QNKCDZO‘)) {
12     echo $flag;
13 }else{
14 exit(‘你的答案不对0.0‘);
15 }
16 }

输出flag的条件为$a[0] != ‘QNKCDZO‘ && md5($a[0]) == md5(‘QNKCDZO‘)

parse_str — 将字符串解析成多个变量,如果参数str是URL传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

由于此函数的作用可以将$a[0]的值覆盖,则在需要找一对md5碰撞即可。

即传b=a[0]=s155964671a即可得到flag

时间: 2024-10-06 00:07:32

ctf代码审计:的相关文章

7. 由一道ctf学习变量覆盖漏洞

0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等. 本篇收集了几个CTF中的题目作为例子,对$$,extract(),parse_str()的问题进行总结. 0×

某CTF平台一道PHP代码审计

这道题不是说太难,但是思路一定要灵活,灵活的利用源码中给的东西.先看一下源码. 首先要理解大意. 这段源码的大致的意思就是,先将flag的值读取放在$flag里面. 后面再接受你输入的值进行判断(黑名单).说实话这道题后面把eval去掉也是可以做的.既然这道题把flag的值放进了变量里面,那么我们就需要将其输出就行了!! 当然这里面是有waf的. 我们看一下吧 基本的waf都在这里面.其他的都好理解,就是那个get_defined_functions()有点不同. 查了一下大致意思就是说输出当前

CTF中常见Web源码泄露总结

.hg源码泄漏 漏洞成因: hg init的时候会生成.hg e.g.http://www.am0s.com/.hg/ 漏洞利用: 工具:dvcs-ripper rip-hg.pl -v -u http://www.am0s.com/.hg/ .git源码泄漏 漏洞成因: 在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等.在发布代码的时候,把.git这个目录没有删除,直接发布了.使用这个文件,可以用来恢复源代码. e.g. http

CTF传送门

https://www.zhihu.com/question/30505597详细见知乎 推荐书: A方向: RE for BeginnersIDA Pro权威指南揭秘家庭路由器0day漏洞挖掘技术自己定操作系统黑客攻防技术宝典:系统实战篇 有各种系统的逆向讲解 B方向: Web应用安全权威指南 最推荐小白,宏观web安全Web前端黑客技术揭秘 黑客秘籍--渗透测试实用指南黑客攻防技术宝典 web实战篇 web安全的所有核心基础点,有挑战性,最常规,最全,学好会直线上升代码审计:企业级web代码

XDCTF2015代码审计全解

此次CTF WEB2是一个大题,一共4个flag,分别代表:获取源码.拿下前台管理.拿下后台.getshell. 目标站:http://xdsec-cms-12023458.xdctf.win/ 根据提示: 0×01 获取源码 “时雨的十一 时雨是某校一名学生,平日钟爱php开发. 十一七天,全国人民都在水深火热地准备朋友圈杯旅游摄影大赛,而苦逼的时雨却只能在宿舍给某邪恶组织开发CMS——XDSEC-CMS. 喜欢开源的时雨将XDSEC-CMS源码使用git更新起来,准备等开发完成后push到g

2016 SWPU CTF的WriteUp

2.1.题目信息 地址: QQ群:184517991 分值: 50分Flag: flag{welcome_swpu_ctf} 2.2.解题过程 进入他们官方的QQ群,找了一圈没找到Flag,然后问了下管理员,管理员表示Flag在历史公告,But我的Mac QQ并不能看历史公告,于是... 嗯,这是一道送分题 3.Misc150(Misc2) 2.1.题目信息 地址: http://misc.08067.me/misc2/misc.pcapng分值: 150分Flag: flag{Rgb_dhsk

CTF入门指南

转自http://www.cnblogs.com/christychang/p/6032532.html ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web密码学pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等misc 杂项,隐写,数据还原,脑洞.社会工程.与信息安全相关的大数据reverse 逆向windows.linux类ppc 编程类的 国内外著名比赛 国外:国内:xctf联赛 0ctf上海国内外都有,很强 入门需要哪些基础

CTF入门(一)

ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web密码学pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等misc 杂项,隐写,数据还原,脑洞.社会工程.与信息安全相关的大数据reverse 逆向windows.linux类ppc 编程类的 国内外著名比赛 国外:国内:xctf联赛 0ctf上海国内外都有,很强 入门需要哪些基础: 1.编程语言基础(c.汇编.脚本语言)2.数学基础(算法.密码学)3.脑洞大开(天马行空的想象.推理解

CTF学习路线指南(附刷题练习网址)

PWN,Reverse:偏重对汇编,逆向的理解: Gypto:偏重对数学,算法的深入学习: Web:偏重对技巧沉淀,快速搜索能力的挑战: Mic:则更为复杂,所有与计算机安全挑战有关的都算在其中 常规做法; A方向:PWN+Reverse+Gypto,随机搭配: B方向:Web+Misc组合: 都要学的内容: Linux基础.计算机组成原理,操作系统原理,网络协议分析: A方向: IDA工具使用(f5插件),逆向工程,密码学,缓冲区溢出等 书籍推荐: <RE for Beginners(逆向工程