测试url:

http://127.0.0.1/thinkphp/thinkphp_5.1.24/public/index.php/index/index/sqli2?id=2

控制器是获取id参数作为进行聚合查询的字段名,如下图所示

看一下存在漏洞的parseKey方法

可以看到,这里直接在$key的前后加上反引号就直接返回了。根据前面几个漏洞的分析我们可以知道parseKey是用来解析字段名的。对于insert和update之类的数据,程序一般是字段名固定,数据和where语句的等于号之后的值部分可控,因此在这两种查询中parseKey里的参数是用户接触不到的【update member set money=$m where id=$id】。而对于聚合查询而言,一共就只需要一个字段名参数【select max($id) from member】,如果用户可控,就刚好在parseKey进行了拼接。

调试一下,url如下:

http://127.0.0.1/thinkphp/thinkphp_5.1.24/public/index.php/index/index/sqli2?id=kkk

跟进aggregate

跟进parseKey,注意这里的第三个参数为true

可以看到,由于第三个参数是true,所以143行是一个恒真条件,然后在144行在$key前后加上反引号`,最后直接返回。

我们在最终执行SQL语句处看一下最后的SQL语句是啥。

可以看到直接拼接了进去。尝试payload:

id`) from member where updatexml(1,concat(0x7e,user(),0x7e),1) %23

可以看到,我们的数据成功逃逸出了反引号和括号。

不过这个payload的限制就是payload前半部分的id`) from member必须是存在的字段名和表名,否则前半部分就会报错。如果师傅们有啥姿势欢迎留言~

最新文章

  1. windows和linux平台下的通用时间测试函数
  2. SSL handshake alert: unrecognized_name error since upgrade to Java 1.7
  3. 命名空间“System.Web”中不存在类型或命名空间名称“HttpUtility”。是否缺少程序集引用?
  4. Zend Studio实用快捷键一览表
  5. linux硬件时间修改与查看
  6. 动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)
  7. 程序A+B问题(一次输入和多次输入)
  8. ACCP6.0 教程课件,可用
  9. Swift - 文本标签(UILabel)的用法
  10. SVG 学习(一)
  11. Ubuntu 16 04 安装KVM
  12. vue 相对其他热门 框架 优点 --- 待续
  13. 关于Vue的各个UI框架(elementUI、mint-ui、VUX)
  14. Appium测试,定位H5元素(HTML5)
  15. Python开发爆破字典
  16. Startup在不同环境中的处理
  17. VGG-Net
  18. Secondary Indices
  19. Unity shader学习之Alpha Test的阴影
  20. 20155306 白皎 《网络攻防》 EXP8 Web基础

热门文章

  1. 1. 初探--prometheus调研
  2. NodeJS4-9静态资源服务器实战_发到npm上
  3. plsql修改某一行数据
  4. 《Java知识应用》Java-线程池(ScheduledExecutorService)
  5. SpringBoot微服务电商项目开发实战 --- api接口安全算法、AOP切面及防SQL注入实现
  6. zookeeper扫盲
  7. MySql数据库之连接查询
  8. FlowPortal:流程节点定义有误,合流节点"合流"没有对应的聚焦节点
  9. unittest---unittest多种加载用例方法
  10. springboot 读取 resource 下的文件