0%

任意文件读到RCE

任意文件读到RCE

主要是点开博客一看两个月没更新了,就顺手更新一下,感觉确实越到后面越写不动东西了。。。
其实以前就想写一下这个内容的来着,不过因为渗透本身就应该对资产保密,不放截图干巴巴讲没意思,又凑不齐几个案例。但是好巧不巧昨天又打下来一个任意文件读到rce的机器,既然如此,就凑起来写一篇(其实有两台任意文件读,但是有一台是windows,windows想读出有用的东西,感觉基本上就是通灵了)

利用核心

因为只能读不能写,在纯读的情况下很难造成实际的危害。实际上从任意文件读打到rce的情况,简单一点的就是读配置文件,读到网站管理员、数据库密码之类的东西,然后再利用这些额外权限去rce。另一种情况是相信对方写的是垃圾网站,读网站源码审计漏洞rce。理论上来说这两种都是遇到过的。

那么也就引申出了任意文件读的核心问题,怎么确定服务(如web目录,数据库目录)的路径。

对于linux应用而言,能操作的空间很大。可以尝试读/proc/self/cmdline或者env之类的文件看看有没有路径,python,java之类的应用很多就是以当前用户权限部署的,直接试着读bash_history也常常会有意外收获。(说起来各种nginx默认路径之类的东西我是一次都没读出来过。。。)

example 1

某高校的一个什么和水相关的管理系统

开局一个目录穿越的任意文件读,该系统在文件不存在的时候还会报错并输出拼接后的完整路径,看到C盘且成功读到win.ini,确定是windows系统。同时报错中的路径也输出了该网站的项目名。

反手搜索这个项目名,发现是一个不知名小公司开发的,官网上有下载链接。(然后那个下载链接是不能用的,f12能看见能用的下载链接被注释了。。。不知道在骗谁)然而下载下来压缩包之后还有密码,不过有群友顶级脑溢血发现官网icon的crc32和压缩包里icon的crc32一致,然后用crc32爆破给他解开了。。。

解开之后里面自带手册,从手册里面找到配置文件存放的位置,配置文件里面有后台管理员账户密码以及数据库账户密码。后台提供了数据库连接功能且使用的是mssql,xpcmdshell一键梭穿

顺手还审了一下不仅有任意文件读也有任意文件写,但是这个垃圾网站是用奇怪的cgi写出来的,打开一看全是exe,感觉上传也不怎么好利用。

这是一个比较简单的利用例子,因为上来就给出了绝对路径,能够比较清楚的知道自己的位置,然后又有项目名字还给我们整到了源码。不然就目录穿越一个个猜index.html去碰根目录的话,这里面根本一个html都没有,连是什么语言写的都看不出来肯定就g了。

example 2

某企业的一个网关还是什么产品。上来是给了后台号的,是PHP的站,linux系统。权限超低history proc都读不了。

这个倒没有特别靠任意文件读其实,是后台有一个配置文件zip上传,zip解压之后的文件是可以读写的,然后用经典软链接实现任意文件读,不过这个既不知道web目录,按了半天也不知道配置文件在哪(现在想起来软链接应该也可以试试一层层目录穿越读index.php确定根目录,然后用include去找配置文件目录之类的,不过我本来就有后台号,后台没有提供数据库管理,读到配置好像也没什么用。。。)

最后是师兄找了个SQL注入拿到了web根目录,然后软链接除了任意文件读也能任意文件写,第一个zip里面传个指向目录的软链接,然后第二个zip再往那个目录下写就可以了。拿到shell之后看了眼phpinfo,无敌防御,执行命令的函数ban的一干二净,但是最后把他源码打包下来审计之后发现,他网站本身也要执行命令,所以执行命令的方式是本地起了一个server,功能就是把收到的字符串直接shell执行。。。还是root起的,然后用PHP搓一个tcp连接一键提到root

以及最后看了下他的安装路径是/opt/lnmp,lnmp一键装还放在opt目录,猜不出来一点。

example 3

某高校的一个搭了jupyter的一个什么平台,python搭的,linux系统

先是弱密码进了普通用户的后台,然后发现的任意文件读。有的时候,python和java这种部署起来很多管理员就直接用的root,导致任意文件读为所欲为所欲为所欲为。PHP说什么都要配nginx或者Apache,都会有基础的权限限制。

为所欲为之后先读.bash_history,history里面有学校接入校园网的账户,也就是统一身份认证账户(对当前利用没什么用。。。)。然后history里面也有这个网站的部署流程,递归式查.sh最后确定了web根目录,把源码拉下来,审计之后发现还能列目录(当然也没什么用)

这个系统做的挺乱的,应该是每个用户有一个家目录,然后可以看自己家目录的文件,还能用自己家目录的文件起一个docker(还是虚拟机)跑机器学习,然后家目录的文件查看和列目录功能没写好就变成了上面那个样子。

最后打通是靠起了个docker,docker反连出来,然后docker能访问上物理机的22端口,直接偷他ssh密钥连上去的,哈哈。

example 4

昨天才打的,所以记忆会清晰一点,PHP,linux系统

上来是一个公开的adminer.php,直接上rouge mysql做任意文件读。服务器是Apache,所以有无敌权限防御。不过这次运气很好,读/proc/self/cmdline得到的居然直接是web路径,印象里nginx还是Apache某个版本之后应该是读不出来proc的?然后读index.php发现是WordPress框架,直接搜WordPress的配置文件位置拿到数据库密码。adminer本身就能连数据库,我反手连进数据库里找管理员号。密码是PHPass格式的hash,网上抄个python脚本自己签一个新密码改上去就行。但是管理员后台目测有超级防御,应该是限制了ip白名单访问。运气很好的一点是发现启用哪些插件是在数据库里控制的,并且更新了数据库之后还能即使更新。把数据库里激活的插件全删掉就能成功登录后台。

最后是WordPress的利用,我印象里我本科的时候WordPress在主题管理那个地方是可以直接编辑header tail之类的PHP文件的,直接插一个eval就通了,这回上去找了半天都没找着哪能改。事实上WordPress后台RCE应该是很简单的,最后网上找了半天找到一个上传插件RCE的,下一个正常插件然后往里面塞个eval传上去就行。插件目录也是在公开目录里,可以直接访问。