案例一 原生代码变量覆盖,duomicms
变量覆盖是什么
这个时候为什么会输出xiaodi呢
就是因为$a=b所以$$a=$b 所以就让$b=xiaodi
搞不到源码,看老师的学吧
这一般在web端页面是看不到,也不好发现,代码可以看关键字和函数
例如$$这个符号
搜索完之后有很多,首先看前端和配置界面,再去看后台的界面
先看有变量且可以控制的文件
有可控变量,这里很可能就是脆弱点
而这个代码就是个数组接受$_get,$_post,$_cookie的值,在网页传输数据,例如get传输name激素?name=xiaodi,因为as复制给了reques,在代码内接受$_get 变量name的值,因为是经过数组传递的值,所以就是$_get[name]=xiaodi 数组的表达方式赋值给$k=》$v 那就是$name=xiadi
比起$name=$_get[name] 这样就直接简化挨个写的代码,这样可以直接遍历获取提交的值并赋值给变量。
这里存在变量覆盖但本身不是个漏洞,需要利用起来的才叫漏洞
我们登录到后台
正常这里有对cookie值的验证,那我们可不可以进行变量覆盖,覆盖为管理员的,那我们就可以访问管理员界面。
我们来到管理员登录文件,看他能不能进行变量覆盖,就看他有没有包含能变量覆盖的文件
包含了
看代码逻辑检测登录就是
res=1就可以返回值
但是变量res是由checkuser创建的,跟踪checkuser
这里就是接受密码,然后去数据库对比查询,密码错误就返回-1,密码没有函数就返回-2
正常逻辑就返回1。
如果已经登录在访问后台就不需要在登录,这是怎么判断,再去看login文件
keepuser,
s形id里面有对应的三个值就返回1,没有就返回-1
变量覆盖就把当前这三个值强制写到当前浏览器里面去
现在就通过动态调试获取登录的session值
如何就通过变量覆盖技术,让为空session有管理员的值
下个断点
这里老师环境出问题段不下来,直接看数据库userid是什么值
1,1,admin
对应的上
这里要覆盖s形数据必须文件开启了session_start才行
构造poc
为什么是exchang.php文件,因为他包含了文件并且开启session
直接访问
session已经强制存储
在访问后台界面admin
直接进入
就相当于这样
案例二-phpmyadmin-原生反序列化
这就直接搜关键字,就两个函数unserialize
那就这两个地方
对于反序列化漏洞的挖掘,要看触发了那些魔术方法,魔术方法里面有什么东西,
而这里就去看调用的wakeup方法,找出来看看
这个方法也要先看看这个代码准备,里面有没有对象
这里就调用了一个对象,在这个对象里面找有没有wakeup方法,
全局搜索一下wakeup方法
有,但是不能乱找,比如第一个wakeup在这个类里面
而触发反序列化的地方并不能触发这个类,第二个在看wakeup有没有能触发影响安全的问题
再看看第二个wakeup
慢慢看都是干嘛的,转到load的声明看看
eval,危险函数,要注意了,file-get-contents可以读取任意文件
这就看看getsuorre这个比哪里怎么来的,跟踪看看
返回个source的变量值
看到这里利用链就出来了,怎么构造接受的值
这个危险函数在这个类里面,刚好我们反序列化文件调用了这个类
显示找到了接受反序列化值的地方,然后load里面有触发的魔术方法,在任何发现了危险函数,接受的getsource的值,跟踪发现是就是返回变量source的值,那就可以构造序列化值了
现在就去找文件触发点,然后传入序列化值
然后就根据代码要求传递值就可以了
最终poc
成功读取到1.txt的文件内容
案例三演示案例-PHP审计-动态调试-框架反序列化-KiteCMS
版本问题搭建不起来
看主页有tp框架开发的提示
但是不知道具体tp版本号怎么在代码搜索,直接veision关键字,搜
5.1.37
反序列化值生成工具
自动生成
上一个案例是借助一个反序列化操作函数的,而这个是用到了phar的反序列化
这个又是什么
参考链接phar反序列化 - My_Dreams - 博客园
phar将类似java文件的jar文件
上半部分是链,下半部分是生成phar
这个是案例里面生成的文件,上面class调用的链来攻击的,而我们的靶场是tp搭建就要用到tp的链是由两个模板生成的,我们就要把上面调用的链改成tp生成的模板
就要第二个文件的内容复制到生成phar的链里面去
复制好好之后第一个文件要复制这两个内容
在生成phar的文件内构造一下
这里还修改了一些删除了案例调用的链,因为我们是用到tp框架的链,上面已经生成了,在把变量object改成变量a,上面第二条数据也要改成$a等于那个值
这里命令就执行个计算器calc,然后把变量system为空全部为空,就不执行命令
这里要生产phar文件要打开一个开关才行,php5.6之后默认是开启的
访问报错了
这里有参数值,去掉,不应该有。
案例里面的利用方式是有一个文件上传点,只允许上传图片也没啥,把生成的phar后缀改成gif上传上去就行了,,然后用到确定文件的函数,去访问这个上传的文件然后就可以利用phar执行命令
这里文件还是gif
这就要全局搜索is_dir
file_exists
这种类似的函数
搜索到这个看看
变量dir从参数来,get和post提交得到,现在就需要找一个文件上传的地方
ok开干poc
后面路径是上传完之后phar包的路径
弹计算机了,命令执行成功
扩展知识,php反序列化链
如果要用到刚刚phpmyadmin利用phar的方式去利用,就要把上半部分的链换成phpmyamdin的利用链
把
jian
kang