.lua 加密密钥和解密密钥是相同的后 怎么找签名和密钥

Lua脚本文件的加密密钥和解密密钥昰相同的解密研究加密密钥和解密密钥是相同的,解密,Lua脚本,加密密钥和解密密钥是相同的 解密,lua,lua脚本,lua解密

Exploit-Exercise是一系列学习linux下渗透的虚拟環境官网是,通过它可以学习提权漏洞利用,逆向等知识

我们这里尝试的是Nebula是一个涵盖初级、中级挑战任务的练习环境,一个有20个關卡涉及到的知识点有:

网上有详细的Nebula通关教程,我希望通过这次实验提升自己linux下渗透的本领,掌握一些linux本地和远程攻击的基本知识

我参照网上给出的教程,来尝试完成Nebula的20个关卡有兴趣的同学可以找我拷贝Nebula的镜像。i春秋上也有Nebula的在线环境练习

每一个关卡level對应一个账号:levelXX/levelXX(用户名和口令是一样的)比如第5关的账号就是 level05/level05。登录之后进入/home/flagXX的目录下,与该关卡有关的东西都在这里

官网中的Nebula页媔中有每道题的程序源码。

本关卡需要找到一个以“flag00”账号运行的可执行程序关键是对find命令和uid知识的掌握。

(我们把标准错誤输出扔到/dev/null黑洞里去)

本题开始需要我们对源码进行分析了,官网提供的源代码如下:

这就是我们flag01程序的源代码这里的system调用,执行了env程序

env用来显示环境变量,以及在定义的环境中执行程序env需要根据环境变量PATH来查找程序的路径。

即便是system中的参数是“硬编码”嘚我们也有办法执行任意文件。

我们看到flag01程序的权限就是flag01我们的目标就是通过它来执行/bin/getflag

这一系列手段非常有参考意义。/tmp目录对所有用戶都有完整的权限

我们首先在/tmp下建立一个指向/bin/getflag的软链接echo,然后将/tmp目录放到环境变量PATH的最前面

这样,env程序在查找echo的时候会首先找到/tmp下的“伪装”echo并执行

通过这样的手法,可以执行其他的可执行程序

level02——执行任意文件

老样子,从代码中发现漏洞本关卡的程序源码如下:

asprintf是GNU扩展的C函数,它将格式化字符串放到buffer中getenv函数获取环境变量USER的值。

这个脚本会自动执行writable.d里面的所有文件接着囿删除这个脚本。

而计划任务crontab是flag03用户创建的我们可以在writable.d中创建脚本来完成操作。

我们在writable.d的目录下创建一个run脚本

等待两分钟,我们在/tmp目錄下发现wangyifan这个文件

这个关卡需要我们获取token文本文件的内容。目前我们的权限是读取不了的

除了root权限外,只要flag04用户可以对它进荇读写操作这里有一个flag04程序,我们需要利用这个程序的漏洞来获得token。

flag04会把命令行参数作为文件名并打开但是文件名不能包含“token”字苻串,否则会退出程序

还是祭出我们的软链接大法,迷惑flag04程序

这就是flag04账号的密码,登录flag04账号执行getflag完成这一关的任务

在这一關,我们需要找到一个弱权限的目录然后通过它来提权。

我们需要关注的是.backup和.ssh这两个目录

.ssh目录我们进不去。只能先在.backup目录里面探索一丅

我们把backup-.tgz解压到/tmp目录下(因为权限不过无法在当前目录解压)

原来是ssh的公钥和私钥!直接把它copy到/home/level05然后ssh登录flag05的账号就能完成此关卡了!

ssh登錄后执行getflag,完成这关

我们先读取flag06的密码散列值

然后我们就要祭出Kali,用john这个口令破解工具弄出flag06账号的密码

so easy!密码就是hello直接登录flag06嘚账号,可以通过此关

在这关中,我们的攻击对象是一个perl编写的cgi程序

这段perl脚本的功能是调用外部的ping命令去ping指定的IP。接收的参數名为"Host"

这段代码调用了外部命令我们可以来一次 典型的命令注入

首先确认cgi程序的权限,在浏览器中输入

我们看到CGI程序就是以flag07的用户权限運行的

我们直接运行目标程序getflag即可

我们通过 命令注入成功通关。

这个关卡中我们需要分析一个capture.pcap的数据包

我们把训练环境的攵件弄到本地来。然后用wireshark分析一下

我们使用wireshark的“分析——追踪TCP流功能”

这是一个交互式登录的抓包。我们使用 Hex dump方式看password字段

我们对照ascii表,7F是del删除也就是说用户输入backdoor后,又删除了三个字符接着输入00Rm8,又删除了一个字符最后输入ate并敲下回车。

我们用这个password登陆flag08账号顺利通关。

我们在这一关卡需要攻击一个有漏洞的php代码

我们注意到这一句代码:


 



我们将用php中的system函数执行外部的shell命令


将下面的内容写箌文件/tmp/wyf中去





接着执行flag09程序以后,getflag程序也被调用我们成功通关

level10——竞态条件漏洞

 
 

官网提示,这里是一个文件访问的竞态条件漏洞去获取token的内容。
我们先看看完整的源代码:

 
注意access函数当前用户访问某个文件时,返回值为0才会有后面这一大段代码。

这段代码會建立一个socket通讯并在18211端口上进行监听,然后打开指定的文件并把内容发送到通讯连接中
  1. 在本地用netcat监听端口
 
我们先完成第一步,netcat监听



我們再写一个不断建立软链接的bash脚本

执行这个脚本编写下面的脚本。

接着运行脚本我们在看看nc收到的结果:

这就是flag10的登录密码,登录flag10账號后执行getflag即可。

level11——任意文件可执行漏洞

 
在这一关卡我们需要攻击一个flag11的可执行程序。它的源代码如下:
官网说此关卡有两种方法可以通过

这段代码比较长我们直接定位有问题的代码段


这里的buffer作为system的参数,是可控制的但是这里的buffer的内容有点复杂,它在之前经过了“异或”加密密钥和解密密钥是相同的

非常简单,我们对要执行的命令在进行一次异或就可以还原了。

注意代码里媔还设置了环境变量TEMP

接着在系统中输入如下命令

本关卡给出了一个lua写的socket程序虽然我不会lua语言,但是通过猜测还是能看懂个大概嘚

题目描述是一个监听在50001端口的backdoor。


 
这个地方存在明显的 命令注入








我们成功执行了getflag程序通过本关。

 
我们在这一关需要破解下媔的程序

也就是说如果UID不是1000的话,我们得不到token的值

现在,我们直接使用gdb调试这个程序(当然你也可以直接用IDA静态反汇编)

找到getuid函数的位置以后在下一条指令的地方设置断点。然后运行

函数的返回值在%eax寄存器中,我们发现这个uid的值是1014

我们直接设置%eax寄存器的值为1000即可。

用它登录flag13账号执行getflag程序通过此关。

level14——破解加密密钥和解密密钥是相同的程序

在这关token文件是被flag14程序加密密钥和解密密钥是相同的过的,我们需要解密token

我们看看这个程序是怎么加密密钥和解密密钥是相同的的。

显然这个加密密鑰和解密密钥是相同的算法非常简单,第0位的字符加0第1位的字符加1,...第i位的字符加i,以此类推

我们直接编写解密程序即可。

我们成功得到flag然后用它登录flag14账号执行getflag即可。

官网直接给出提示用strace工具追踪so使用情况。

提示没有找到libc.so.6既然没有,我们就自己写┅个让它找到

 
 
我们还要用汇编语言自己实现一个system函数。


最后我们成功劫持了共享库的调用。





这一关的技术含量非常高我们目前还没囿完全理解

 
在这一关中我们继续攻击一个perl语言的CGI程序
这段代码的问题就在于它有调用了外部shell命令。
但是这里对用戶名做了限制,不仅将其转换为大写而且去掉第一个空格之后的所有内容。
我们先建立这样一个脚本/tmp/wyf


为了方便我们直接写一个表单提茭数据。

我们这是可以看到getflag程序已经执行了。

这又是一个绕过正则表达式的 命令注入

 
我们要分析一个在10007端口监听的python脚本
由於我对python不熟悉,这一关的原理也没弄明白
这应该是一个反序列化的漏洞,先按照教程完成这一关卡吧

level18——资源未释放漏洞

 
 
这关非常特殊,有三种解决方法最简单的是耗尽系统资源。
当然也有格式化字符串漏洞栈溢出漏洞。

linux默认只能打开1024个文件描述符但是stdin,stdoutstderr已经各占用了一个。最终供程序使用的只有1021个

我们需要做的就是耗尽程序的资源,先输入

根据输出内容我们知道登录成功叻。应该可以执行shell命令

我们追加一个shell,然后再执行flag18程序

看到这个结果,是因为文件描述符用尽了

我们看源码中的这一部分

也就是说添加closelog可以释放一个文件描述符。我们再次修改/tmp/login

但是出现了下面的问题

既然找不到Starting命令,我们就攻击环境变量将Starting指向恶意脚本

再次运行程序,查看/tmp/output文件我们可以知道/bin/getflag已经被执行了

终于来到最后一关了,这一关要求我们攻破下面的程序

这段程序的逻辑是这样的:

  • 根据pid号找到/proc下当前pid号的目录

我们需要利用“孤儿进程”的特点来突破这段程序

孤儿进程的父进程init的uid绝对是0

这段攻击代码,利用fork出来的子進程执行getflag程序并将结果重定向到/tmp/flag19_output文件中。

至此我们成功通关nebula的全部20个关卡!

实话实说,exploit-exercise nebula的这20个练习让我感受到了自己 离技術的门槛还很遥远

其中的一系列linux提权和任意文件执行的技巧令我印象深刻——软链接大法python反序列化漏洞,CGI程序的命令注入共享库劫持,gdb调试……

很多练习以我的能力是不可能做出来的在参考了网上的教程以后,我能够 大体感受到其中的 美妙之处

之前的实验我们只是淺尝辄止地使用一些工具而已,我们对工具的应用也是浮于表面的尽管能熟练使用工具并玩到极致的话,也可以弄出花样来

这次的final让峩彻底明白,只有对计算机足够精通才能真正主宰一切,而这条道路对我们来说非常漫长

不过,能够在本学期的课程中对计算机安全技术初窥门径我已经很满足了。

前言一般项目发包基本会加密密钥和解密密钥是相同的 lua代码图片资源现在3.12自带一套加密密钥和解密密钥是相同的解密流程,但是这套加密密钥和解密密钥是相同的鋶程只适用于lua代码解密现在需要对框架进行修改,从而可以解密图片资源

准备,首先要想好自己的加密密钥和解密密钥是相同的解密嘚密钥文件头签名

加密密钥和解密密钥是相同的流程,先将lua代码和图片资源进行加密密钥和解密密钥是相同的可以写批处理方法,使用刚才想好的密钥和签名调用cocos2d-x/external/xxtea/xxtea.cpp里面的加密密钥和解密密钥是相同的方法(这个加密密钥和解密密钥是相同的方法可以改成我们自己的, 同悝解密也可改)将需要加密密钥和解密密钥是相同的的lua代码和图片资源进行加密密钥和解密密钥是相同的即可。最好可以批处理文件(注:函数参数不用去改它的)

实际上就是将密钥和签名设置进去了CCLuaStack,可以用这些去解密lua文件代码 如下
(注:如果不做图片的加密密钥和解密密钥是相同的,这一步做完lua代码的解密就已经完成了)

3.12已经自带所以文章开头说lua代码可以做到自动解密) 如下:

//调用各平台的获取文件Utils

lualoadBuffer如丅,红线圈的部分就是解密过程调用了我们在AppDelegate.cpp设置的密钥进行内容buff的解密,当然只有判断出文件头是我们设置的签名才会进入这个函數进行解密,其他没加密密钥和解密密钥是相同的的文件走else里面的语句直接加载lua代码

3, 接下来我们想让图片也支持解密,同理我们可以通过lua解密加载流程推测出 加载图片的时候,肯定会调用FileUtil里面的GetContents获取文件的内容buff然后通过内容buff进行图片的加载。那么我们需要做的就是->找箌获取这个图片内容buff加载的地方(修改各个平台的调用函数)判断如果是加密密钥和解密密钥是相同的过的内容buff那么就将内容buff解密了,嘫后在return回去binggo!

想要获取图片加载 “内容buff” 的流程,我们可以在从Sprite::create打个断点一步步跟下去,看看堆栈过程
上面两个是加载图片读取文件内容buff的
因此我们只需要将上面的3个函数加点料,即可实现解密 - -!

总结:至此图片解密也可以做到啦其他粒子特效,图集文件字体文件…. …. 的加密密钥和解密密钥是相同的,是否可以通过找到加载文件内容buff的地方然后对这个内容buff修改而达到解密的目的呢,留给大家去猜想和试探了!啊哈哈哈哈

我要回帖

更多关于 加密密钥和解密密钥是相同的 的文章

 

随机推荐