2024年最全SQL注入总结_sql注入csdn(1),2024年最新满满干货指导

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

请添加图片描述

由上,手工注入的流程就结束了,当然,具体的情况应该具体分析。

四.报错注入:

​ 简单来说,联合查询需要页面有回显,但是有的时候不会提供回显,只提供了SQL报错信息,这个时候,通过联合查询就查询不到想要的数据,这个时候,就可以尝试下报错注入。

​ 报错注入是利用了数据库的某些机制,人为地制造了错误条件,使得查询结果能够出现在错误信息中。

1.xpath语法错误:

​ 利用xpath语法错误来进行报错注入主要是利用extractcalue()和updatexml()两个函数,需要mysql版本>5.1.5。

​ 函数语法:

2.extractvalue(xml_document,Xpath_string)

​ 参数1表示操作的目标XML文档,参数2则表示目标XML的查找路径。

​ 当Xpath_string不为路径时,则会报出语法错误

在这里插入图片描述

但是,这个错误信息并不完整,这时,则需要在开头拼接一个Xpath无法处理的字符,即可显示完整信息

在这里插入图片描述

0x7e是“”符号的十六进制表现形式,而concat函数的作用就是将“”符号与select user()

查询的结果进行拼接成字符串,使报错信息中携带完整的查询信息。

后续只需将查询参数依次替换为想要查询的数据即可。在这里插入图片描述

3.updatexml函数:

​ 函数语法:updatexml(XML_document , XPath_string , new_value)

​ updatexml函数有三个参数,XML_document参数表示目标XML文档(例如doc),

​ XPath_string参数表示路径,

​ new_value替换查找的数据。

updatexml函数报错注入的原理和extractvalue函数是相通的,其payload可以为updatexml(1,concat(0x7e,database()),1)。

五.无回显无报错:

​ 有的时候的ctf遇到的题目是属于那种无回显无报错的类型,这个时候,就需要用到盲注,盲注包括布尔盲注和时间盲注。

​ 在正式地进行盲注之前,总是需要一个字符串用于遍历所有可显示字符,用python写出来如下:

alpha = string.ascii_letters + string.digits + """!"#$&'()\*+,-./:;<=>?@[\]^\_`{|}~"""

1.布尔盲注:

​ 如果说,当一个网站内的内容会根据查询的时候因为返回的正确和错误两种结果的页面不相同时,则可以利用布尔盲注的方式来进行数据库爆破,布尔盲注所用到的函数大概有

length(str)    			 //函数返回字符串的长度
substr(str,int1,int2)    //截取字符串
ascii(char)				 //返回字符的ascii编码

一般的payload为:

?id=1 and length(database())=5#

当and后面得到的布尔值为True时,得到的页面是一种类型,为False时得到的页面又是另一种情况,因此,可以通过脚本实现自动化攻击,以下提供一个方法可以爆破,利用标志法,先可以先初始化一个sign=0,当每一次遍历字符串时遇到了布尔为True时sign+=1,每循环一次时判断一下sign的值是否为1,如果是,继续循环,不是的话则说明查询结束,或者如果查询的值的格式为flag{}时,当查询到"}"时退出循环也可;另外,在进行与字符的对比的时候要尽量转化为ascii编码来进行对比,python脚本中要使用ord()函数来进行转化。

2.时间盲注:

​ 时间盲注又称延迟注入,适用于页面不会返回错误信息,且只会显示一种界面,时间盲注用到的函数除了布尔盲注需要利用到的函数意外还包括

sleep(n)                        //将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):			//判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

当然,时间盲注的功能十分强大,一般情况下,只要布尔盲注能够完成的注入利用时间盲注也可以。再写python脚本的时候,或许会遇到没有布尔之类的明显的回显,而是页面加载时间的差别,这个时候,python就无法轻松知道究竟到了哪一个字符时存在延迟,这个问题可以通过两个办法进行解决:

(1).通过try语句捕获报错:
def istime(data):
    try:
        resp = requests.post(url,data=data,timeout=3)
        return "not"
    except:
        return "timeout"
    
payload = "1' aNd if(ascii(substr((seLect password fRom users limit 2,1),{},1))={},sLeep(3),sLeep(0)) #"

当查询的时候,payload中的sleep(3)会因为and之后的表达式为真时而停顿3s,这个时候,则利用istime()函数捕获错误信息来验证是否查询到正确的字符,这个时候,当网页延迟的时间timeout的值时,则会出现报错,进而被try语句捕获,返回timeout。

(2).通过time模块:

​ 这里做一个小实验

import time
before = int(time.time())
time.sleep(3)
now = int(time.time())
if now - before >= 3:
	print("sleep()造成的延迟时长大于或等于3s")

六.堆叠注入:

​ 在";"结束一个SQL语句后继续构造下一条语句,使多条语句顺序执行,这就是堆叠注入。

1.堆叠注入触发条件:

​ 堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服务器在访问数据端时使用的是可同时执行多条sql语句的方法,例如php中的mysqli_multi_query函数。但与之相对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是

​ (1).目标存在sql注入漏洞

​ (2).目标未对";"号进行过滤
​ (3).目标中间层查询数据库信息时可同时执行多条sql语句

2.堆叠注入的实例:

[]: https://blog.csdn.net/qq_66013948/article/details/133205066?spm=1001.2014.3001.5501

3.补充知识点:

​ HANDLER tbl_name OPEN [ [AS] alias]

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,…)
[ WHERE where_condition ] [LIMIT … ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT … ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT … ]
HANDLER tbl_name CLOSE

通过HANDLER tbl_name OPEN打开一张表,无返回结果,实际上我们在这里声明了一个名为tb1_name的句柄。
通过HANDLER tbl_name READ FIRST获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
通过HANDLER tbl_name CLOSE来关闭打开的句柄。

七.HTTP头注入:

​ 针对HTTP的请求头,如果不加以过滤或转义,在直接与数据库交互的过程中容易被利用进行SQL注入攻击。

​ 使用场景:访问Web Server时,Web Server会从HTTP Header中驱逐浏览器信息、IP地址、

​ HOST信息等存储在数据库中。

​ HTTP Header注入又分 Referer注入 , Cookie注入 和 User-agent注入

payload例子:

​ 通过burp抓包修改对应的参数:

​ User-Agent: ',1,updatexml(1,concat(0x7e, database(),0x7e),1))#

八.二次注入

​ 二次注入是指在执行某些语句是有些参数是取自数据库,二次注入发生的主要原因是来自数据库的内容也是不可靠的。

​ 当注册账号为:admin’#。

​ 如果前端做了转义处理,在接收到数据时为:admin\’#,前端不会产生SQL注入。

​ 但是在数据存储入数据库内时其内容为:admin’#。

​ 当需要再次调用此数据时,来自数据库的账号数据为admin’#,如果未对后端的数据进行处理

那么同样会产生SQL注入。

​ 例如该用户修改密码的情况下,更新语句条件会变为:where user=‘admin’#’and password=‘123’

​ 可以在不知道用户admin密码的情况下,更新其密码。
注入发生的主要原因是来自数据库的内容也是不可靠的。

​ 当注册账号为:admin’#。

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值