CTF-源码审计专题

1、来源:bugku 题目 web16

tip:备份是个好习惯
直接看到备份,两种方式

1、index.php~
2、index.php.bak

这里的题目直接就是
index.php.bak 下载源代码来分析

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');      获取url路径中从?开始的部分
$str = substr($str,1);                    从str的第一个字符开始,即为删除?后面的数
$str = str_replace('key','',$str);                 把str里面的key换成空格
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";

分析源码,注释已经写在源码里,所以poc就很简单了
key替换那就keykey1让其替换成成变量就好了,至于md5,我觉得有两种方案,一是0e,二是数组
这里直接用数组把。
poc:?kkeyey1[]=12&kekeyy2[]=22

2、来源:Bugku 题目 web20

tips:cookies欺骗
打开题目直接看到
在这里插入图片描述
两个参数 line 和filename
base64解码可以知道后缀为key.txt
直接将index.php利用base64加密,可以得到新的密码串
在这里插入图片描述
这里就可以看到为什么line的值为空,赋值可知,line是行的意思,所以一行一行的字符跳出来,所以直接上代码
在这里插入图片描述
得到源码

<?php

error_reporting(0);   #容错

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:""); #如果filename存在,那么就进行解码,不存在赋值为空

$line=isset($_GET['line'])?intval($_GET['line']):0;   #如果line存在,那么就进行赋值,不存在赋值为0

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ="); #如果filename是空的,那么就赋值filename=a2V5cy50eHQ=

$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);                                                               #一个数组


if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

   #弱国cookies里的margin的赋值是margin,那么就往数组里加入keys.php   从这里可以感觉到keys.php是钥匙所在的地方

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}
#这里就是显示数组的三个内容了,那么就构造让它显示数组2,即keys.php的映射
?>

3、来源:Bugku web21

一、看源码在这里插入图片描述

会跳转,用bp,得到乱码
在这里插入图片描述
二、直接用bp的解码工具解
在这里插入图片描述

if(!$_GET['id'])   //这里就是id不为空和0----1
{
	header('Location: hello.php?id=1');//跳转到hello.php文件设置id=1
	exit();   //退出脚本。
}
$id=$_GET['id'];  //通过get方式获得其他文件的id变量
$a=$_GET['a'];   //通过get方式获得其他文件的a变量
$b=$_GET['b'];   //通过get方式获得其他文件的b变量
if(stripos($a,'.'))  //$a文件中不能有.这里可以试试看,确实会出现nonono
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r'); //将$a文件读入到data中
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)#见下面分析
{
	$flag = "flag{***********}"
}
else
{
	print "never never never give up !!!";
}
?>

1、data==“bugku is a nice plateform!”,采用方法:?a=php://input 然后post:bugku is a nice plateform!
2、id=0 跟上面的矛盾了,直接id==0e
3、strlen($b)>5
4、eregi(“111”.substr(b,0,1),“1114”) 这里的意思是 111和b的第一个字符拼接后,1114要在里面
5、substr(b,0,1)!=4
解题思路,eregi用%00截断,它存在漏洞
在这里插入图片描述

4、[ACTF2020 新生赛]BackupFile 来源buuctf

看题目就是备份文件,两种方式index.php~或者index.php.bak

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

主要还是看intval函数,key已经变成纯数字,那么str也会纯数字比较,利用php的弱口令,直接key=123即可

5、web9 来源 bugku

看看源码
在这里插入图片描述

参数进入后还有一个$ 直接全局变量 ?args=GLOBALS
在这里插入图片描述

6、web16 来源 bugku

备份的话,就是加上.bak

拿到源代码
在这里插入图片描述
一个过滤,一个绕过

kekeyy1=QNKCDZO&kekeyy2=240610708

7、[HCTF 2018]WarmUp 来源:buuctf

做题,代码审计
在这里插入图片描述
看了下有白名单
在这里插入图片描述
需要有白名单,而且要返回?前面的字符
那就要构造白名单和问号
首先,就是尝试到底在哪个目录下,发现在根目录下,会有回显
在这里插入图片描述
然后就简单了,在这里面操作

?file=hint.php?ffffllllaaaagggg

没有回显,说明是正确绕过了,然后就是调试出来了

?file=hint.php?../../../../../ffffllllaaaagggg
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值