免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责。 |
前言
在一次渗透项目中遇到的一个比较典型的案例,通过sql注入、未授权、任意文件上传组合拳最终getshell,过程也比较有意思,因此记录了下来。在写该文章时,所有漏洞均已提交归属单位并协助完成修复。
接口泄漏
开局一个登陆框,登陆时也存在加密,弱口令也没办法爆破,没办法只有扫描一波目录。
果然,存在一个help的api接口泄漏。
未授权访问
获取所有的用户信息?这么贴心吗?访问一下试试
牛逼,假的,只有试试其他接口,看看通过id获取用户信息试一下,一般管理员id都为1
提示用户不存在,并没有未登录等权限相关的提示,说明存在未授权查询用户信息,这里可以通过遍历id来获取用户信息,但是通过尝试并没有遍历到用户信息,猜测userid应该是很长一串的字符串,尝试单引号看是否有报错。
SQL注入
舒服了,一个单引号提示异常,两个单引号提示用户不存在,存在注入
sqlmap一把梭,mysql,不是dba。
存在union注入,但是在跑表的时候,不知道怎么回事数据包返回404
不过问题不大,还有一个根据urserid获取用户的任务完成率的接口,同样存在注入,但是是个时间盲注。
但是在sqlmap跑用户信息的时候全是空白,但实际上是有数据的
当时就陷入了沉思,一直没搞懂为什么,看了语句也是正常的,最后想到可以通过userid获取用户信息,可能会有用户名和密码,所以就只跑了userid这一个字段,果然,跑出了几个userid
尝试用这些userid获取信息,发现用户名是中文的,所以sqlmap直接跑跑不出来,需要编码过后才行
这里接口是没有直接返回密码的,使用sqlmap同时跑userid和passwd字段,这样就可以使用userid获取username,这样用户名和密码都有了,但是时间盲注,跑的太慢了,跑了几个passwd都解不出来,这里知道了用户信息的结构,直接通过新增用户接口,添加一个用户。
成功登陆了,但是没有功能点
可能是没添加权限,正好存在获取权限组的接口,访问获取所有RoleId
直接通过编辑用户接口添加所有权限
getshell
既然该系统存在sql注入和未授权,猜测肯定有任意文件上传,要上传shell,肯定要找上传点,所以其他功能直接不用看,这时候首当其冲的就是通知公告功能点,肯定有上传功能
果然,没有任何过滤,直接拿下
目标不出网,iis权限,想办法提个权
服务器是server 2016的,试了好多提权工具都提不了,最后发现可以使用PrinterNotifyPotato.exe提权
直接导出hash,但是hash解不出来,开启受限管理员,pth直接上远程桌面开始翻文件
由于种种原因,内网就不打了,点到为止,下机!
实习/校招/社招
安全服务工程师、安全攻防工程师、安全研发工程师、前后端开发工程师、测试工程师等等,所有岗位均可内推 需要考CISP/CISP-PTE/PMP/OSCP/CISSP等证书也可以加我,市场低价!有折扣! |
推荐阅读
渗透实战|记一次简单的Docker逃逸+反编译jar接管云主机