🐮博主syst1m 带你 acquire knowledge!
✨博客首页——syst1m的博客💘
🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭
😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈
😎《大数据专栏》大数据从0到秃头👽,从分析到决策,无所不能❕
🔥 《python面向对象(人狗大战)》突破百万的阅读量,上过各种各样的官方大型专栏,python面向对象必学之一!🐽
😋《性格荷官在线送书活动》不定期会存在有送书活动哦,大部分肯定是网安内容的书籍啦宝子们!💘
🎉希望本文能够给读者带来帮助,更好地理解这个问题或解决你的困惑🐾
文章目录
前言
学习SQL注入至关重要,它不仅是网络安全领域的关键一环,更是提升技术能力的有效途径。掌握SQL注入技术,可增强对数据库安全的防范意识,为数据安全保驾护航,为职业发展增添竞争力。
一、sql注入操作
1.sql盲注
1-1.什么是盲注
- 当攻击者利用sql注入漏洞进行攻击时,有些时候web应用程序会返回后端执行sql查询返回的错误信息,这些信息能够帮助我们进行sql注入;但更多情况是,数据库没有输出到页面,这时攻击者会询问一些列是或否问题,或基于时间判断的问题,强制从数据库获取信息
- Blind SQL(盲注)是注入的一种,向数据库发送true或false这样的问题,根据应程序返回的信息判断结果,出现这种方式的攻击是因为配置了只显示常规错误,并不显示sql语句,这种方式并没有解决存在sql注入的问题
- 盲注分为 布尔型盲注 和 时间型盲注,其中用的最多是时间型盲注
1-2.时间型盲注
常用的判断语
- ’ and if(1=0,1,sleep(10)) --+
- " and if(1=0,1,sleep(10)) --+
- ) and if(1=0,1,sleep(10)) --+
- ') and if(1=0,1,sleep(10)) --+
- ") and if(1=0,1,sleep(10)) --+
它们之间也就闭合方式不同
利用if(条件),函数, 当条件为真,返回1,否则0
sqli-labs 里面的 9,10 就是时间型盲注
我们打开Less-9
在我们知道数据库名称为 security 时,直接判断数据库第一个字符是否为 s
http://localhost/sqli-labs/Less-9/?id=1' and if(ascii(substr(database(),1,1))=115,sleep(3),1) --+
databases获取数据库名称 substr截取字符串,从1开始截取1个 ascii转换成ascii编码
判断为真执行sleep(5)
判断为假就直接什么都不做
我们可以按 F12 打开检查,在点击网络,再在url中输入,可以发现他要3秒后才开始响应
当我们不知道数据库名字呢?使用二分法,先判断是否大于90,是的话再判断是否120,否的话就小一点,以此类推就可以知道正确值为115
但是在实际中,很多常用函数是会被过滤掉,需要绕过
1-3.布尔型盲注
布尔型盲注和时间型盲注是差不多的
我们打开Less=9
可以判断字符串的长度或判断字符
成功就会显示 You are in…
判断数据库名称是否为8位数
http://localhost/sqli-labs/Less-8/?id=1' and length(database())=8 --+
判断数据库名称第一位是否是 s
http://localhost/sqli-labs/Less-8/?id=1' and ascii(substr(database(),1,1))=115 --+
2.http头注入
2-1.什么是http头注入
在如今很多网站都会防止漏洞的发生,在sql注入中,会对用户提交的参数进行过滤。虽然会过滤掉用户直接提交的参数,但是对于http头中的内容可能没有进行过滤,例如http头中的User-Agent、Referer、Cookies等
2-2.http头注入实操
我们进入Less-18
我们正常登陆一下查看返回信息
我们想要进行http头注入需要抓包
我们打开burp,再登陆时抓包
可以看到它们的User Agent时一样的
判断是否有注入点
发送到重放器(Repeater),再User-Agent最后面加上单引号,点击发送
提示这里错了说明有注入点
使用重放器(Repeater)进行渗透
updateexml(xml_document,xpath_string,new_value)
-
参数一:XML文档对象名称
-
参数二:XPath字符串
-
参数三:替换查找到符合条件的数据
获取数据库名称
' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or'1'='1
0x7e是十六进制的波浪号~
3.cookies注入
3-1.什么是cookies注入
cookies是一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件,用于识别用户身份、跟踪用户活动、保存用户设置等。它在网站会话管理、个性化体验等方面发挥着重要作用。cookies典型应用是判断用户是否已经登陆网站,是否下次登陆时保留登陆信息,或类似购物车这种的,选中的商品信息都加入cookies中以便付款时提取信息
我们可以在开发者工具里面的控制台输入 document.cookie 来查看cookie
3-2.cookies注入实操
我们进入Less-20
登陆Dumb这个账号 密码Dumb
可以在控制台中看到 cookie 为 uname=Dumb
cookies注入需要使用burp抓包,开启拦截之后刷新页面
发送到重放器(Repeater),加上 反斜杠 查看是否有注入点
现在我们就可以开始获取数据了
获取数据库版本
' and updatexml(1,concat(0x7e,(select version()),0x7e),1) or'1'='1
4.宽字节注入
4-1.什么是宽字节注入
宽字节概念
- 单字节字符集,所有的字符都使用一个字节来表示
- 多字节字符集,再在多字节字符集中,一部分字符用多个字节来表示,另一部分用字符用单个来表示(可能没有)
宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字
php中编码为GBK,函数执行添加的是ASCII编码,mysql默认字符是GBK
php的宽字节
addslashes()函数,在预定字符前添加反斜杠,单引号 ’ 双引号 " 反斜杠 \ NULL
<?php
$abc=addslashes('hao "are" you');
echo($abc);
// hao \"are\" you
?>
宽字节注入原理
%DF’ 会被PHP当中的 addslashes 函数转义为 " DF\ ’ “,\在URL里是“%5C”,那么也就是说,“ %DF’ "会 被转成“%DF%5C%27,倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。
数据库使用的是GBK编码,PHP编码为UTF8就可能出现宽字节注入,原因是为了防止发生SQL注入,会调用上面所介绍的几种函数,将单引号或双引号进行转义操作,在单或双引号前加上反斜杠 \ 。当数据库使用的是宽字节编码会将两个连在一起的字符会被当做是-一个汉字,而在PHP使用的UF8编码则认为是两个独立的字符。
4-2.宽字节注入实操
我们进入Less-33
简而言之差不多就是将之前的 ’ 换成了 %df%27
http://localhost/sqli-labs/Less-33/?id=0%df%27 union select 1,2,3 --+
二、总结
今天的这期内容主要是sql盲注、http头注入、cookies注入、跨字节注入,主要是围绕sql-labs靶场进行学习,虽然文字有些偏多,但是还是很好理解的,如果你还有什么问题的话,记得私信我哦!