Exploit-Exercise之Nebula实践(三)

获取10,11关卡的flag。

在这里插入图片描述
题目提示我们,只用满足access()函数系统调用的条件,则flag10二进制程序会上传任何给出的文件。当然,我们需要做的就是让flag10读出token就可以了。
代码太长,就不贴出来了。
我们着重需要关注access函数,access函数用户是否有操作文件的权限,有的话则open,没有的话则error。
逻辑上看上去是没有问题的,但是代码忽略了一个情况:条件竞争。也就是说在access之后,open之前打一个时间差,我们可以access一个我们有权限的文件,然后在open之前将那个文件替换为我们没有权限的文件,这样的话就可以读取我们没有权限的文件了。
很明显,我们对token是没有读取权限的,从下图就可以看到
在这里插入图片描述
接下来是我们具体的操作
写两个shell脚本
1.sh”内容如下
在这里插入图片描述
创建文件,使用while循环,创建指向我们的文件的链接,创建指向token的链接
2.sh”内容如下
在这里插入图片描述
在循环内将相关信息发到nc的客户机上,其中192.168.24.134便是kali的ip
在这里插入图片描述
在kali上开启nc
使用nc监听

在这里插入图片描述
后台执行1.sh
在这里插入图片描述
后台执行2.sh后结果如图
在这里插入图片描述
在这里插入图片描述

Kali上得到token了
在这里插入图片描述
使用flag10以及图上的密码登录
在这里插入图片描述
成功通关
在进入下一关之前我们需要将这一关的进程结束掉
列出所有进程
在这里插入图片描述
结束我们启动的1.sh和2.sh的进程
在这里插入图片描述
接下来我们可以进入下一关了
11.
这一道题目是存在bug的,按照通过要求而言,我们是不算通关的,我也没做出来。这里就贴下国外大牛的博客,权当了解就好。
https://73696e65.github.io/2015/06/exploit-exercises-nebula-11-15

获取关卡12,13的flag

在这里插入图片描述
题目提示有后门程序在50001端口监听

查看代码
在这里插入图片描述
其实不用看代码也知道,这种类型都是一个套路。就是我们输入一串明文,程序将其加密后与24行处的密文进行比较。一般的思路就是根据密码算法,输入相应的明文。不过此处并不是考察这点。
注意第19行接收我们的输入,然后在22行处理我们的输入,而处理我们的输入的hash算法在第4行开始的hash函数中实现,在hash函数里第5行io.popen是危险的调用方式,在Lua中,当开发人员使用未经验证的用户数据通过os.execute()或io.popen()Lua函数运行操作系统命令时,会受到命令注入的攻击
我们首先nc连接,并尝试在输入密码时进行命令注入
在这里插入图片描述
可以看到成功执行我们的命令
在这里插入图片描述
我们前面是用whoami作为例子,那么getflag应该也是可以的
在这里插入图片描述
成功通关

代码如下
在这里插入图片描述
代码的作用是:通过getuid获取当前用户的uid,如果等于FAKEUID(在第7行已经宏定义),则可以读取token
很明显,这题要想通过必须修改uid。或者说当getuid调用时,getuid得到的uid为1000.
用什么黑魔法呢?我们先来看一下当前的uid
在这里插入图片描述
Uid为1014,而我们需要的uid为1000,先用gdb调试
在这里插入图片描述
输入disas main反汇编主函数
在这里插入图片描述
注意到080484ef处调用函数,getuid(),再080484f4则是进行判断。判断后的结果就是getuid的返回值,也就是getuid获取到的uid。我们只要把这里的值修改为1000就可以了
按q退出,然后在判断语句处下断点
在这里插入图片描述
输入run执行程序
在这里插入图片描述
程序在断点处自动暂停,查看eax寄存器
在这里插入图片描述
可以看到打印出的值就是我们的uid,那么我们将其修改为1000就可以了
在这里插入图片描述
输入continue,程序继续运行
在这里插入图片描述
成功获取到token
切换为flag13用户,并使用上图token登录
在这里插入图片描述
执行getflag,成功通关

在这里插入图片描述

获取关卡14的flag14.

在这里插入图片描述
由题目的提示可知,flag14加密输入并且标准输出,题目需要我们解密一个加密过的token
首先进入flag14所在目录,运行flag14
在这里插入图片描述
提示需要-e参数,加密123为135
在这里插入图片描述
加密abc为ace
在这里插入图片描述
这个加密算法在多试几次也一样,很好看出来。
对于123而言,1+0=1,2+1=3,3+2=5,前一个加数是明文,后一个加数是数组下标。对于abc同样也是如此。
知道算法后,直接写出解密算法就可以了,拿python来做
注意一定要切换到/tmp路径,在flag路径我们没有写入权限
代码如下:
在这里插入图片描述
运行后得到明文
在这里插入图片描述
切换到flag14账户,使用上图明文登录,注意输入密码时不回显
在这里插入图片描述
执行getflag,成功通过
在这里插入图片描述

扩展

1.《unix环境高级编程》
2.《鸟哥的linux私房菜》
3.《深入理解linux内核》

参考

https://github.com/1u4nx/Exploit-Exercises-Nebula
https://nitesculucian.github.io/2017/10/24/180000-Exploit-Exercises-Nebula-07.html
https://mike-boya.github.io/blog/2016/02/15/exploit-exercises-nebula-level08/
https://73696e65.github.io/2015/06/exploit-exercises-nebula-11-15
http://blog.yyx.me/posts/exploit-exercises-nebula-level-15-19.html
http://www.kroosec.com/2012/11/nebula-level15.html
https://decepticode.wordpress.com/2016/05/04/nebula-level16/
https://mike-boya.github.io/blog/2016/02/22/exploit-exercises-nebula-level17/
http://www.php.cn/python-tutorials-372984.html
http://www.pwntester.com/blog/2013/11/27/nebula-level18-write-up/
http://blog.ferling.eu/wargames/nebula/level19
https://blog.csdn.net/hurricane_0x01/article/details/53926752
http://seclists.org/fulldisclosure/2014/May/128

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值