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 ...
随机推荐
- 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口
目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...
- 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译
面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...
- CentOS-配置JDK(压缩包)
卸载openjdk $ rpm -qa | grep jdk 以上命令用来检查linux上是否安装openjdk,如果安装需要将其全部卸载掉,卸载命令: $ rpm -e --nodeps java- ...
- php操作redis集群哨兵模式
前段时间项目里正好用到了redis的集群哨兵部署,因为此前并无了解过,所以一脸懵逼啊,查阅了几篇资料,特此综合总结一下,作为记录. 写在前沿:随着项目的扩张,对redis的依赖也越来越大,为了增强re ...
- 2021最新WordPress安装教程(三):安装WordPress详细步骤
前面已经通过< 2021最新WordPress安装教程(一):Centos7安装Apache>和< 2021最新WordPress安装教程(二):配置PHP和MySQL>两篇文 ...
- Java Map 集合类在selenium自动化测试设计中的应用
我们在设计自动化测试用例的时候,往往很多工作是在处理测试的数据. 测试数据无论用Excel 文件, XML文件或者任何一种形式测存储方式,都会设计到参数化以及我们对数据的操作. 这个时候,我们会用到以 ...
- JDK环境配置: javac is not recognized as an internal or external command, operable program or batch file
相信大家在配置TestNG的时候,首先都会去确认JDK的安装是否正确,两个命令缺一不可. 打开'cmd' --> 1. 输入'java -version', 返回java home当前路径. j ...
- 一文搞懂一致性hash的原理和实现
在 go-zero 的分布式缓存系统分享里,Kevin 重点讲到过一致性hash的原理和分布式缓存中的实践.本文来详细讲讲一致性hash的原理和在 go-zero 中的实现. 以存储为例,在整个微服务 ...
- VS Code 下载安装并设置中文面板显示
下载: 下载地址:https://code.visualstudio.com/ 微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 M ...
- Spring RestTemplate 之put、delete请求
●PUT请求:在RestTemplate中,PUT请求可以通过put方法调用,put方法的参数和前面介绍的postForEntity方法的参数基本一致,只是put方法没有返回值而已.举一个简单的例子, ...