Online Railway Reservation System 代码审计

Online Railway Reservation System 1.0 代码审计

官方源码在这:https://www.sourcecodester.com/php/15121/online-railway-reservation-system-phpoop-project-free-source-code.html

起初是做nu1招新赛的时候审的cms

关于这个cms,网上有5个公开的漏洞,其中有4个目前仍然没有补丁

image-20230204183241706

Online Railway Reservation System 1.0 - 'id' SQL Injection (Unauthenticated)

Online Railway Reservation System 1.0 - Remote Code Execution (RCE) (Unauthenticated)

Online Railway Reservation System 1.0 - Admin Account Creation (Unauthenticated)

Online Railway Reservation System 1.0 - 'Multiple' Stored Cross Site Scripting (XSS) (Unauthenticated)

还有一个nu1l挖的https://github.com/nu11secur1ty/CVE-nu11secur1ty/tree/main/vendors/oretnom23/2022/Online-Railway-Reservation

这里跟一下rce的(Online Railway Reservation System 1.0 - Remote Code Execution (RCE) (Unauthenticated)),源码下载https://www.sourcecodester.com/sites/default/files/download/oretnom23/orrs.zip

Remote Code Execution (RCE) (Unauthenticated)

环境搭建

一个php+mysql的cms,所以直接按照教程搭建就行,源码下载,mysql新建数据库,导入sql ,然后在initialize.php修改server,mysql账密,baseurl

环境搭好后类似这样:

image-20230204184503814

分析以及利用

有个rce,详情:https://www.exploit-db.com/search?q=Online+Railway+Reservation+System+1.0+

我们跟一下

先发poc

image-20230204190034961

随后可以在index这看到

image-20230204190125773

跟下

image-20230204190238237

首先我们get传参传进来action

image-20230204190315762

这样会使其new SystemSettings() 并且调用update_settings_info()方法

进去update_settings_info

image-20230204190400488

注意到这里其实会对post的请求进行一些拆解

image-20230204190521797

这个地方以遍历数组的方式,把content里的键值对进行遍历,可以看到我们是这样构造的

image-20230204191113453

所以$k是welcome,$v是红色部分的代码

之后file_put_contents就可以覆写文件,比如可以写个shell

image-20230204190852353

虽然注意到文件后缀必须得是html,但是文章有多处php include html的迹象

index包含home.php

image-20230204191439313

home.php包含welcome.html

可以理解为不合理的include以及随意编辑html使得这个漏洞得以存在

条件

虽然这个漏洞无需管理员,但是file_put_contents仍然需要对网站目录具备写权限,此外,由于写文件还必须只能是.html为后缀的,所以并不是完美的rce

Remote Code Execution (RCE) based on Include any php file (Unauthenticated)

之前因为这是一个自己挖的0day,所以加密了,现在改为公开,已经提交厂商并通过确认,目前正在申请cve和exploit-db认证

环境搭建

https://www.sourcecodester.com/php/15121/online-railway-reservation-system-phpoop-project-free-source-code.html

源码:https://www.sourcecodester.com/sites/default/files/download/oretnom23/orrs.zip

此外,触发此rce还需要一个条件,就是环境有装pecl。

pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库。在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。

不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php

所以在docker环境下大多能触发rce

这里用一个docker的demo

 docker run -d --privileged=true --name OLDMysql -e MYSQL_ROOT_PASSWORD=root -p 33306:3306 mysql

//导入sql,配置initialize.php

docker run -d --privileged=true --name OLDcms -p 33307:80 -p 44443:443 --link OLDMysql:mysql -d -v D:\testtest\orrs\orrs:/var/www/html theeastjun/xdebug3:7.4-apache

image-20230131230615185

分析以及利用

起因是在index.html界面找到的

image-20230131230724647

$page用户可控,这里由于几乎没有对路径进行任何的安全检查,所以可以造成任意php文件读取

如果环境有pecl,可以通过下面这种方式造成rce

/?+config-create+/&page=/usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/tmp/hello.php

image-20230131230848684

由于我们遇到的场景比较特殊,是一个文件包含的场景,那么我们就可以包含到pear中的文件,进而利用其中的特性写入/tmp/hello.php,pear具体特性参考Docker PHP裸文件本地包含综述 | 离别歌 (leavesongs.com)

之后包含这个shell就可以

/?page=/tmp/hello

image-20230131230951253

可以在tmp目录下任意写入webshell,并通过文件包含达到rce

更多细节也可以看:hmt38/Online-Railway-Reservation-rce-Vulnerability: Online Railway Reservation System 1.0 - Remote Code Execution (RCE) based on Include any php file (Unauthenticated) (github.com)

条件

这个漏洞仍然不需要管理员权限,并且甚至可以直接写php文件,也不需要对web目录具备写的权限,(tmp目录正常情况都是可写的)

但是需要有pecl/pear依赖,尽管目前绝大多数的docker(包括php官方镜像)都有这个依赖,所以攻击面其实还是很广的

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇