【Python】requests库在CTFWeb题中的应用

news/2024/5/20 0:14:39 标签: python, 开发语言, requests, bugku, ctf, web

目录

①Bugku-GET

②Bugku-POST

③实验吧-天下武功唯快不破

④Bugku-速度要快

⑤Bugku-秋名山车神

⑥Bugku-cookies


①Bugku-GET

import requests

resp=requests.get(url='http://114.67.175.224:12922/',params={'what':'flag'})
print(resp.text)

//或者
//resp=requests.get(url='http://114.67.175.224:12922/?what=flag')
//print(resp.text)

②Bugku-POST

 

import requests

data={'what':'flag'}
resp=requests.post(url='http://114.67.175.224:14821/?what=flag',data=data)
print(resp.text)

③实验吧-天下武功唯快不破

 右键查看源码

 提示信息搜集,bp抓包看到flag的base64编码在相应头 

经过尝试发现flag是不断变化的

显然手速跟不上服务器更新速度,写脚本即可

import requests
import base64

r1=requests.get(url='http://ctf5.shiyanbar.com/web/10/10.php')
test=base64.b64decode(r1.headers['FLAG'])
# print(test)
# b'P0ST_THIS_T0_CH4NGE_FL4G:L55DH81RK'
flag=test[-9:]
data={'key':flag}
r2=requests.post(url='http://ctf5.shiyanbar.com/web/10/10.php',data=data)
print(r2.text)

④Bugku-速度要快

这题从响应头中获得的flag经Base64解码之后,得到的数值仍然是一个Base64编码之后的数据,需要再次解码。此外还需要考虑session。

 bp抓包

 

响应头flag常规base64解码会报中文乱码所以拿下面脚本跑一下

import base64

test=base64.b64decode('6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogTVRZME1USTA=')
test_decode=test.decode('utf-8')
print(test_decode)

 ok试明白了,接下来写脚本

import requests
import base64

r1=requests.get('http://114.67.175.224:14456/')
# print(r1.headers['flag'])
r2=(base64.b64decode(r1.headers['flag'])).decode('utf-8')
# print(r2)
r3=r2[14:]
r4=base64.b64decode(r3)
data={'margin':r4}
r5=requests.post(url='http://114.67.175.224:14456/',data=data)
print(r5.text)

 这是什么情况呢?

怀疑是要session会话保持,我们可以写脚本看一下请求头和响应头

import requests


r1=requests.get('http://114.67.175.224:14456/')
print(r1.headers)
print(r1.request.headers)

 

可以看到不管发几次包我们的请求头都不带cookie的字段

因为python直接去请求服务器是没有cookie的,所以要用requests模块里的session类。Session类是requests模块中的一个重要组件,它允许你创建一个持久化的会话,以便在多个请求之间保持状态和共享参数。使用Session对象,你可以在多个请求中共享Cookie、身份验证凭据、请求头等信息,从而简化了对复杂交互的处理过程。

修改脚本

import requests
import base64

s=requests.session()
r1=s.get('http://114.67.175.224:14456/')
#print(r1.headers['flag'])
r2=(base64.b64decode(r1.headers['flag'])).decode('utf-8')
# print(r2)
r3=r2[14:]
r4=base64.b64decode(r3)
data={'margin':r4}
r5=s.post(url='http://114.67.175.224:14456/',data=data)
print(r5.text)

⑤Bugku-秋名山车神

import requests
import re

url = 'http://114.67.175.224:19164/'
session1 = requests.session()
resp= session1.get(url)
result = re.search(r'(\d+[+\-*])+(\d+)', resp.text)
res = result.group()
val = eval(res)
data = {'value': val}
flag = session1.post(url, data=data)
print(flag.text)

⑥Bugku-cookies

 

把请求头的filename base64解码一下

 

直接url访问keys.txt发现和初始界面回显内容一致 ,存在任意文件读取

尝试读index.php的源码 

 

?line=n&filename=aW5kZXgucGhw (通过改变n的值可以逐行读取源码)

一行一行手输太麻烦了,这里可以写脚本

首先先简单判断下有多少行,随便试一试,试出来是18行

 贴出代码

import requests

url='http://114.67.175.224:17337/index.php'
s=requests.session()
for i in range(19):
    r1=s.get(url=url,params={'line':str(i),'filename':'aW5kZXgucGhw'})
    print(r1.text)

 跑出源码

贴出源码

<?php

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];

}

?>

 意思就是如果用户的 Cookie 中存在名为 'margin' 的值且其值为 'margin',则将额外添加一个文件 'keys.php' 到 $file_list 中。

改filename和cookie即可


http://www.niftyadmin.cn/n/5288588.html

相关文章

怎么实现Servlet的自动加载

在实际开发时&#xff0c;有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下&#xff0c;第一次访问servlet的时候&#xff0c;才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多&#xff0c;就会导致用户第一次访问serv…

Node.js版本对比

目录 1. node版本与Npm版本对照表 2. node版本与node-sass版本对照表 3. node-sass与sass-loader版本对照表 1. node版本与Npm版本对照表 以往的版本 | Node.js 下面显示最新的对应内容&#xff0c;如果需要查找历史版本&#xff0c;可以进入上面的页面查询 VersionLTSDateV8np…

【Unity6.0+AI】Unity版的Pytorch之Sentis-把大模型植入Unity

本教程详细讲解什么Sentis。以及恶补一些人工智能神经网络的基础概念,概述了基本流程,加载模型、输入内容到模型、使用GPU让模型推理数据、输出数据。 官方文档 Unity Sentis: Use AI models in Unity Runtime | Unity 主页介绍 官方文档链接:Sentis overview | Sentis | 1…

AR眼镜定制_AR智能硬件方案|显示方案|光学方案

AR眼镜的硬件方案定制是根据客户需求和功能来设计的。从芯片平台选型、主板尺寸大小、内存、电池容量&#xff0c;到实现各项功能的传感器、显示光机模组、摄像头、接口、按键、充电等&#xff0c;再到整机的结构、散热设计&#xff0c;以及双目AR眼镜、单目智能眼镜、全息头盔…

论文笔记_InP_photonic_circuits_using_generic_integration

InP_photonic_circuits_using_generic_integration 时间&#xff1a;2015年5月 文章目录 InP_photonic_circuits_using_generic_integrationⅠ IntroductionⅡ 通用集成平台A. 对特定信号进行处理B. Multiwavelength TransmitterC. 超快激光&#xff08;皮秒激光、飞秒激光&am…

模型量化之AWQ和GPTQ

什么是模型量化 模型量化&#xff08;Model Quantization&#xff09;是一种通过减少模型参数表示的位数来降低模型计算和存储开销的技术。一般来说&#xff0c;模型参数在深度学习模型中以浮点数&#xff08;例如32位浮点数&#xff09;的形式存储&#xff0c;而模型量化可以…

Docker一文全解

1.Docker介绍 1.1 Docker架构 镜像&#xff08;image&#xff09;&#xff1a;就像是一个打包好的软件包。 容器&#xff08;container&#xff09;&#xff1a;镜像和容器的关系就像是Java里类和对象的关系。镜像是静态的定义&#xff0c;容器是运行的实体。容器可以被创建、…

制造业数字化转型的核心不止是技术

一、制造业的数字化转型意味着什么&#xff1f; 在当今的制造业领域&#xff0c;数字化转型意味着通过集成数字技术来增强传统的制造方法、产品和劳动力的过程。这些技术包括一系列创新&#xff0c;如自动化软件、电子商务系统、传感器、工业机器人等。 二、制造业数字化转型的…