主打一个学习,写的不好请谅解(ps :有个工具叫sqlmap,在后边,要是写的不好,请多担待
˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )
目录
按照注入的网页功能类型分类 •(ps:注入类型纯看个人收集情况)
SQL注入攻击的根源:程序命令和用户数据(即用户输入) 之间没有做到泾渭分明 注入成功的基础 1、相信用户输入的数据 2、Sql语句的拼接
按照注入的网页功能类型分类 •(ps:注入类型纯看个人收集情况)
1、登录注入 • 2、cms注入 •
按照注入点值的属性分类 • 1、数值型 • 2、字符串型 •
基于从服务器返回的内容 • 1、有回显 • 2、无回显 •
按照注入的程度和顺序 • 1、一阶注入 • 2、二阶注入 •
其他业务场景 • Update注入 • Insert注入 • Delete注入 • Like注入 • Order by注入 • 宽字节注入
• htt头注入
环境搭建
可以使用centos下搭建docker容器,在终端输入 docker search sqli-labs
• 拉取sqli镜像docker pull docker.io/acgpiano/sqli-labs • 运行容器,
加载镜像docker run -dt --name sqli-labs -p 8088:80 --rm docker.io/acgpiano/sqli-labs(ps:我看别的佬有写的很详细的docker搭建,我就不写了,这里的实验就是最常见的sql-lib的靶场,后续我发个真实网站的sql注入(那个已经被打烂了))
或者使用phpstduy小皮面板搭建,详情也可以看看别的佬写的
sql注入复现
启动搭建好的sql靶场,启动后需要点击setup构造数据库,负责无法正常使用(ps:phpstudy下(windows),默认使用的是高版本的php语言,可能导致该靶场有些地方无法正常访问,需要更改php语言的版本后再使用(改成5.x)具体安装过程可以看其他佬的,咱就是一菜菜),启动数据库后,即可点击Basic Challenges进行题目选择
判断是否存在sql注入依据:
sql注入漏洞主要存在于与数据库有交互的地方,比如搜索框,登录框等,其原理可以简单理解为开发人员没有进行足够的防御,导致在url上传入sql语句时,后端没有过滤,上传的sql语句可以被执行,从而得到数据库内的各种信息。
这里以less-01举例,该url上并没有上面并没有出现什么与数据库有关的数据,但由于这是个小靶场,下面也有个提示,因此可以加上less-1/?id=1 --+。其中,?在url中表示搜索的意思,而id=1则相当于与数据库做个交互,告诉服务器我要从数据库中查找id为1的数据。
http://www.henghuiyuan.com/cn/about.asp?id=1这个地址就是真实情况下的一个地址,与数据库进行了交互,就可以尝试用各种手段去测试是否存在sql注入。--+可以理解为一个注释的作用,因为目的是要执行sql语句,加上这个注释符可以确保语句是一条完整的,所需要的sql语句。(ps:sql注入的方式有很多,还有一些是无法从url中看到的,需要靠自己手动添加?id或者通过抓包进行分析,这就是个小破实验,别深究太多。)
也可以通过在 URL 中修改对应的 ID 值,为正常数字、大数字、字符(单引号、双引号、 括号)、反斜杠/来探测 URL 中是否存在注入点(根据回显的错误)。
通过?id=1 后,就需要构造相关的sql语句,可以通过?id=1 and 1=1 --+;?id=1 and 1=2 --+进行判断是该注入点是否为数值型; ?id=1’ and 1=1 --+;?id=1 and 1=2 --+ 这两条来判断是否为字符型。 数值型与字符型是基于数据库存储字段是个字符串还是数值。
数值型
select * from stu where id = 1 and 1=1
字符型
select * from stu where id = '1' and 1=1 #'