欢迎进入UG环球官网(环球UG)!

usdt交易所(www.caibao.it):一道连系lua的pwn题--出题思绪与解题历程

admin2周前14

前言

前段时间打了国赛,出了道bulid的pwn题,用到了几个杂而有趣的知识点,玩起来不太通例,做起来甚至可以说是有点难受,在此纪录一下。

问题链接

文末也有链接

出题思绪

最近学了学安卓,想到了一个之前剖析过的mobile案例,一个apk通过挪用lua实现函数的重写(就是之前血洗高校的一个apk),觉得很好玩,决议应用到问题里边。

,

欧博官网

欢迎进入欧博官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

文件结构:一个二进制文件,一个加密过的Lua文件,一个flag文件。

程序流程:

  • 二进制程序部署在特定端口,使用nc接见
  • 程序起来后会加载加密过的lua文件到内存,之后程序在内存中解密lua程序,在程序中输入字符,将字符交给lua举行处置,必须知足某种关系程序才气向下举行。
  • 完成绕事后选择了缓冲区溢出,文件没关canary,用ssp leak可以直接把flag读出来。整体看下来就是一个披着pwn题外衣的C加lua程序逆向题。
  • 由于用到了很多多少C语言lua库函数的很多多少函数,用ida剖析程序会发现异常恶心,得仔细扣,之前没接触过这种的还得现学。

环境搭建

问题源码

写的时刻现学现卖,请师傅们指教

,include <stdio.h>
,include <stdlib.h>
,include <stdint.h>
,include <unistd.h>
,include <lua5.1/lua.h>
,include <lua5.1/lualib.h>
,include <lua5.1/lauxlib.h>
char flag[0x20];
char* c;
uint8_t *enc(uint8_t *data, int size) {//加密函数,息争密函数完全一致
    uint8_t *temp = (uint8_t *)malloc(size);
    int k[3]={2,3,5};
    int i;
    if (size) {
        for (i = 0; i < size; i++) {
            temp[i] = data[i]^k[i%3];
        }
    return temp;
    }
}
int main()
{
    setvbuf(stdout,0,2,0);
    FILE *f = fopen("main.lua", "rb");//读入同目录加密过的lua文件
    if (f == NULL)
        return -1;
    fseek(f, 0, SEEK_END);
    long file_size = ftell(f);
    uint8_t *buf = (uint8_t *)malloc(file_size);
    rewind(f);
登录并阅读全文
上一篇 下一篇

猜你喜欢

网友评论

随机文章
热门文章
热评文章
热门标签