stdin、stdout学习

参考自[原创]IO-FILE中的stdin介绍-Pwn-看雪-安全社区|安全招聘|kanxue.com

IO FILE 之任意读写 – 先知社区 (aliyun.com)

IO FILE之fread详解-安全客 – 安全资讯平台 (anquanke.com)

p *stdin
$1 = {
  _flags = -72540024,
  _IO_read_ptr = 0x0,#缓冲区内还未被读取的数据起始位置
  _IO_read_end = 0x0,#缓冲区内还未被读取的数据末尾位置
  _IO_read_base = 0x0,#读入数据的起始位置
  _IO_write_base = 0x0,#输出缓冲区基址
  _IO_write_ptr = 0x0,#_IO_write_ptr和_IO_write_base之间的地址为已使用的缓冲区,_IO_write_ptr和_IO_write_end之间为未使用的缓冲区
  _IO_write_end = 0x0,#输出缓冲区结束地址
  _IO_buf_base = 0x0,#缓冲区的起始
  _IO_buf_end = 0x0,#缓冲区的末尾
  _IO_save_base = 0x0,
  _IO_backup_base = 0x0,
  _IO_save_end = 0x0,
  _markers = 0x0,
  _chain = 0x0,
  _fileno = 0,
  _flags2 = 0,
  _old_offset = -1,
  _cur_column = 0,
  _vtable_offset = 0 '\000',
  _shortbuf = "",
  _lock = 0x7ffff7fa7a80 <_IO_stdfile_0_lock>,
  _offset = -1,
  _codecvt = 0x0,
  _wide_data = 0x7ffff7fa5b80 <_IO_wide_data_0>,
  _freeres_list = 0x0,
  _freeres_buf = 0x0,
  __pad5 = 0,
  _mode = 0,
  _unused2 = '\000' <repeats 19 times>
}

stdin任意写总结

设置_IO_read_end等于_IO_read_ptr

设置_flag=0xfbad208b。

设置_fileno为0。

设置_IO_buf_basewrite_start_IO_buf_endwrite_end;且使得_IO_buf_end-_IO_buf_base大于fread要读的数据。

stdout任意读总结

设置_flag=0xfbad9800

设置_fileno为1。

设置_IO_write_base指向想要泄露的地方;_IO_write_ptr指向泄露结束的地址。

设置_IO_read_end等于_IO_write_base或设置_flag & _IO_IS_APPENDING_flag | 0x1000

设置_IO_write_end等于_IO_write_ptr(非必须)。

stdout任意写总结

_IO_write_ptr指向write_start_IO_write_end指向write_end即可。

附赠好用payload

def struct_io_file(flags=0,read_ptr=0,read_end=0,read_base=0,
                    write_base=0,write_ptr=0,write_end=0,
                    buf_base=0,buf_end=0,
                    save_base=0,backup_base=0,save_end=0,
                    markers=0,chain=0,fileno=0,flag2=0,lock=0):
    f = p64(flags) + p64(read_ptr) + \
        p64(read_end) + p64(read_base) + \
        p64(write_base) + p64(write_ptr) + \
        p64(write_end) + p64(buf_base) + \
        p64(buf_end) + p64(save_base) + \
        p64(backup_base) + p64(save_end) + \
        p64(markers) + p64(chain) + \
        p64(fileno) + p64(flag2) + \
        p64(0) + p64(lock)
    f = f.ljust(0xd0,b'\x00')
    return f
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇