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的更多相关文章

  1. 【pwnable.kr】 [simple login]

    Download : http://pwnable.kr/bin/login Running at : nc pwnable.kr 9003 先看看ida里面的逻辑. 比较重要的信息时input变量再 ...

  2. pwnable.kr simple login writeup

    这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程   主要逻辑是输入一个字符串,base64解码后看是否与题目 ...

  3. pwnable.kr login之write up

    main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...

  4. pwnable.kr的passcode

    前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...

  5. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  6. 【pwnable.kr】 memcpy

    pwnable的新一题,和堆分配相关. http://pwnable.kr/bin/memcpy.c ssh memcpy@pwnable.kr -p2222 (pw:guest) 我觉得主要考察的是 ...

  7. 【pwnable.kr】passcode

    pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是‘&’的锅. #include <stdio.h> ...

  8. pwnable.kr之passcode

    使用ssh passcode@pwnable.kr -p2222登录到远程服务器, ls -l 查看目录下的文件, -r--r----- root passcode_pwn Jun flag -r-x ...

  9. WordPress Simple Login Registration插件’username‘参数跨站脚本漏洞

    漏洞名称: WordPress Simple Login Registration插件’username‘参数跨站脚本漏洞 CNNVD编号: CNNVD-201308-519 发布时间: 2013-0 ...

随机推荐

  1. Terraform状态State管理,让变更有记录

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

  2. 基于HSI和局部同态滤波的彩色图像增强

    简介 在图像采集过程中,由于光照环境或物体表面反光等原因会造成图像光照不均 .图像的光照不均会直接影响图像分析的结果.因此,对光照不均图像进行增强,消除光照的影响是光照不均图像处理中不可缺少的环节 . ...

  3. k8s-生产环境部署django项目k8s-dashboard管理系统

    1. k8s-生产环境部署django项目k8s-dashboard管理系统 gitee地址: https://gitee.com/scajy/django-k8s-dashboard.git 部署架 ...

  4. centos7 安装最新的 wiki confluence

    41.1 下载confluence Confluence是一个企业级的Wiki,可用于企业.部门.团队内部进行信息共享和协同编辑. 下载地址: https://www.atlassian.com/so ...

  5. SpringCloud 微服务最佳开发实践

    Maven规范 所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 co ...

  6. WinUI桌面版替换UWP项目实际使用

    最近做了一个3D打印的RC遥控车.然后就想着用xbox手柄控制小车的前进和转向吧,于是就用surface平板接收收手柄的数据,然后通过串口的2.4G模块传输数据,看上挺简单的,其实本身也挺简单的. 我 ...

  7. CRM系统选型时的参考哪些方面

    企业不论在制定营销策略或是在进行CRM系统选型时,首先都是要了解自身的需求.每一家企业的情况和需求都有很大差异,CRM系统的功能也都各有偏重.有些CRM偏重销售管理.有些注重于营销自动化.有些则侧重于 ...

  8. 暑假自学java第二天

    今天学习了一些java规则 一个java源文件的公开类只能有一个,而且必学和源文件名相同. 了解到java的标识符规范,这对以后的团队协作有很大作用. 标识符规则和c++还是很相似的 java中的字面 ...

  9. Nginx:Nginx的安装

    Nginx安装 首先安装依赖 #安装Nginx需要gcc openssl-devel pcre-devel zlib-devel依赖 yum -y install gcc openssl-devel ...

  10. PHP安装amqp扩展 出现未装librabbitmq错误

    这错误的原因是因为没有安装amqp的依赖包rabbitmq-c,需要先安装rabbitmq-c. 1.安装rabbitmq-c-0.7.1 没有安装就会提示上面的错误我选择的是最新版本0.7.1 wg ...