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 ...
随机推荐
- 如何利用Python计算景观指数AI
可使用工具包 pylandstats 此工具包基本是根据fragstats形成的,大部分fragstats里面的景观指数,这里都可以计算.但是,还是有一小部分指数这里没有涉及. LS_METRICS ...
- js笔记6
1.函数都有返回值,人为return,返回什么就是什么,否则,他的返回值就是undefined 而方法的本质也是函数,所以也有返回值 document.getElementById()返回的是获取的标 ...
- Kali下切换JDK版本
Kali下自由更换JDK版本 今天在学习了一下CobaltStrike之后,打算在Kali上本地搭建一个服务器端, 查看了一下Kali的JDK配置发现版本是13.X的,然而CobaltStrike最好 ...
- PING命令执行漏洞-绕过空格
目录 PING命令执行漏洞-绕过空格 这边介绍一下绕过空格的方法大概有以下几种 方法一:用变量拼接:我们发现源码中有一个$a变量可以覆盖 方法二:过滤bash?那就用sh.sh的大部分脚本都可以在ba ...
- 第15章: Prometheus监控Kubernetes资源与应用
Prometheus监控Kubernetes资源与应用 目录 1 监控方案 2 2 监控指标 4 3 实现思路 4 4 在K8S中部署Prometheus 4 5 在K8S中部署Grafana与可视化 ...
- 44、wget和curl的常用参数
1.wget: wget是文件下载的工具: 不加任何参数是直接下载该文件: (1)-O: 将下载的文件指定为特定的文件名: wget -O baidu.html www.baidu.com --201 ...
- 通过winsw将jar包做成window后台服务运行
第一步:下载Winsw地址 https://github.com/kohsuke/winsw/releases 第二步: 将下载好的sample-minimal.xml和WinSW.NET4.exe ...
- keycloak~账号密码认证和授权码认证
用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...
- POJ 1556 计算几何 判断线段相交 最短路
题意: 在一个左下角坐标为(0,0),右上角坐标为(10,10)的矩形内,起点为(0,5),终点为(10,5),中间会有许多扇垂直于x轴的门,求从起点到终点在能走的情况下的最短距离. 分析: 既然是求 ...
- webpack(11)配置文件分离为开发配置、生成配置和基础配置
前言 上篇我们已经配置好了本地开发服务器,但是配置的相对比较凌乱,一个文件中有些是开发时用到的配置,有些是生成时用到的配置,有些是开发和生成都要用到的配置,所以我们这里把环境分为3个环境 webpac ...