欢迎来到皮皮网网首页

【门禁系统项目源码】【plc 源码 程序】【溯源码动画】源码tpl

来源:驱动 内核源码树 时间:2024-11-30 02:03:29

1.fabric-sdk-go的简单使用
2.找tpl是源码什么意思?
3.Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析

源码tpl

fabric-sdk-go的简单使用

        使用fabric提供的cryptogen工具生成文件模板

        $ cryptogen showtemplate > crypto-config.yaml

        进行修改,添加一个组织,一个orderer节点.

        根据crypto-config.yaml文件生成证书文件:

        $ cryptogen generate --config=crypto-config.yaml

        查看生成的证书文件夹结构:

        需要从fabric的源码案例中拷贝configtx.yaml文件

        $ cp $GOPATH/src/github.com/hyperledger/fabric-samples/first-network/configtx.yaml ./

        对configtx.yaml文件进行修改.

        修改之前,创建一个文件夹,来保存即将创建的创世区块文件

        将创建区块文件和通道的命令写到一个脚本中! generate.sh

        脚本文件和配置文件的目录结构:

        执行generate.sh文件生成创世区块文件和通道,其实只有一个组织,也没必要生成锚节点更新文件..

        $ ./generate.sh

        配置docker-compose文件:

        启动容器, 启动后查看容器运行情况

        $ docker-compose up -d

        $ docker-compose ps

        在这里,创建两个脚本文件,用于docker容器的管理

clear_docker.sh文件:

        restart.sh文件:

        创建配置文件的时候,有两个文件可以进行参考...

        修改后的sdk配置文件:

        创建出一个模型对象,给其赋值,并开始初始化sdk

        使用 pkg/fabsdk/fabsdk.go中的New()方法进行实例化

        创建请求之前,需要使用 gopackager.NewCCPackage 方法生成一个resource.CCPackage 对象,传递两个参数,一个是链码的路径(相对于工程的路径), 一个是GOPATH的路径.

        安装链码,使用pkg/client/resmgmt/resmgmt.go文件中的方法

        创建请求之前,需要生成一个*cb.SignaturePolicyEnvelope类型的对象,使用 third_party/github.com/hyperledger/fabric/common/cauthdsl/cauthdsl_builder.go文件中的方法即可,提供了好几个方法, 使用任意一个即可.这里使用 SignedByAnyMember方法: 需要传入所属组织ID

        实例化链码

        使用 pkg/client/channel/chclient.go中的 Execute()方法,来进行数据写入的操作:

        rsp, err := model.Channelclient.Execute(req)

        写入之前,要创建请求:

        tempArgs是要传给链码的参数,可以做下封装,就不受参数个数的限制了

        使用 pkg/client/channel/chclient.go中的 Query()方法,来进行数据查询的操作: 查询之前,同样需要创建请求.

        链码在工程中的路径应该是 工程名/chaincode文件夹

        比如:

        driverFabricDemo/chaincode

        而不应该省略掉工程名这样写: chaincode

        错误原因:cert.URIs 和 tpl.URIs 这两个字段没有被定义.

        进入tpl对象中, /usr/local/go/src/crypto/x/x.go 是个结构体,并没有发现 URIs 字段

        对go版本进行升级,从1.9.3升级到1..3, 再次进入 /usr/local/go/src/crypto/x/x.go 文件中,查看结构体内容:

        在执行sdk的Excute()方法时报错.

        方法不存在,一般是由于链码的Invoke方法中的方法名和Excute()方法传入的方法名不一样.

        但是可以肯定的是,链码的Invoke方法中的方法名和,项目中执行Excute()方法时传入的方法名是完全一样的! 但是很奇怪了,为什么会出现这个错误呢? 使用 docker rmi 删除掉 dev-peerx.travle.xq.com 的镜像,再重新运行即可.

        在创建实例化链码请求的时候

        总是提示

        Cannot use str (type *cb.SignaturePolicyEnvelope) as type *common.SignaturePolicyEnvelope less... (⌘F1) Inspection info: Reports composite literals with incompatible types and values

        明明是相同的类型,却总是报错,应该是IDE的问题.把vendor文件夹删除后,就不会有提示了. 再使用vendor对工程进行init 和 add +external 就好了!!

        出现这个错误,一般都是配置文件哪个地方写错了,需要细心检查

找tpl是什么意思?

       TPL是Template缩写的意思,即中文中的源码模板。在计算机领域,源码TPL常常指代一种文件格式,源码通常用于存储独立而可重用的源码模板文件,用于快速地生成文档、源码门禁系统项目源码网页等内容。源码TPL文件通常使用模板引擎进行渲染,源码把指定的源码数据填入模板中并生成最终的文档或页面。

       另外,源码TPL也是源码一种文件扩展名,代表一种程序源码文件,源码用于存储模板引擎的源码plc 源码 程序模板文件。TPL文件通常用各种编程语言编写,源码如php、源码asp、jsp等。使用TPL文件,程序员们可以更加易于维护和设计他们的网页、应用,同时也使得开发更加高效。

       TPL文件广泛应用于网络开发领域,如网站、应用程序、移动应用等。溯源码动画由于其灵活性和使用的方便性,很多开发人员倾向于将常见的数据放在模板文件中,以便在需要时进行重新使用和更新。在日常生活中,TPL文件也被广泛应用于各种电子文档模板中,如合同、维修报告等。

Discuz!ML 3.x任意代码执行漏洞之大佬分析之后我分析

       首先附上米斯特安全大佬们文章的链接,刚开始有些东西我没看的太懂,于是我就再添了点东西,希望像我一样的小白也能看懂。

       一、view model源码漏洞综述

       漏洞类型:代码执行漏洞

       影响系统及版本:Discuz!ML V3.2-3.4

       漏洞原因:Discuz!ML 系统对cookie中的l接收的language参数内容未过滤,导致字符串拼接,从而执行php代码。

       二、漏洞分析

       根据米斯特大佬们提供的报错界面,我对其中的三个报错点一一进行了分析,三个报错点如下图所示(还有米斯特大佬们的水印)。

       2.1 报错点一分析

       发现首先是portal.php函数出错,把这张图放大看,发现是对cookie中的language参数进行拼接而导致的报错,根据这个参数的语义判断应该是调用语言模板的时候因为找不到相应的模板而发生的错误,那么先定位portal.php报错的opentx源码说明第行,该文件路径:

       紧接着定位libfile函数,文件加载路径函数。

       函数介绍:

       libfile($libname, $folder = ”),包含2个参数:$libname 和 $folder,该函数读取source目录下的$folder子目录作为基础部分。

       libfile函数源代码如下图所示:

       DISCUZ_ROOT为定义网站根目录的常量,realpath函数为返回绝对路径函数,到此处第一个报错就已经分析完毕,原因是系统因为找不到一个php文件而报的错。

       2.2 报错点二分析

       还是先根据错误定位到引用函数文件,文件路径source/module/portal/portal_index.php,然后定位到源函数所在的文件,引用的地方好定位,位置在/source/function/function_core.php,直接上图

       然后这个函数写的还贼长,哎,没得办法,这个时候只能靠运气了,搏一搏,单车变摩托,首先百度,这个函数的作用也就是个调用模板的函数。

       然而这个函数写了行代码,找个大表哥的写的代码注释吧,先扔个参考链接 discuz.net/thread-...

       此时我发现了思路有些繁琐,然后就去找第三个错误的提示内容,为了找到是哪里出了问题,我把这段代码放到了txt文件中,根据第三个错误提示的信息开始了全文搜索,终于,根据关键字tpl.php值搜索到一处与language这个函数语义有关的东西DISCUZ_LANG。

       既然是语言参数出了问题,还是个常量,那就去找找常量定义的地方,全局搜DISCUZ_LANG,跟踪到/source/class/discuz/discuz_application.php

       可以看到,将$lng的值给了DISCUZ_LANG,追踪$lng在何处定义,全局搜索$lng,找到了定义$lng的地方(图中第一个箭头)

       到此为止,又出现个var,这是个啥,我只知道var[‘cookie’][‘language’]的意思就是cookie中的language的值。

       以上可以分析出,从获取language到DISCUZ_LANG拿到值的过程中,并没有对其进行过滤。

       那么现在必须确定报错问题是怎么出现的了,看下图:

       出现了这样的代码,直接拼接,然后RCE

       拼接单引号和'.phpinfo().'

       按理来说可以RCE

       总结下大概流程从cookie中获取了language的值,然后给了$lng,接着$lng又给了DISCUZ_LANG,系统通过template函数调用模板文件,template函数执行,执行到$cachefile的时候,执行构造的代码。

       三、漏洞复现

       访问站点www.***.com/forum.php,刷新页面抓包

       *本文作者:xxx,转载请注明来自 FreeBuf.COM在language参数处'.phpinfo().'

       返回内容:

       复现成功。

       看起来复现大佬们的漏洞还是挺有意思的,开心。