超神之路之PWN训练之1之fd
来源:互联网 发布:天刀ol捏脸数据 编辑:程序博客网 时间:2024/04/29 17:08
环境搭建:拷的学长的ubuntu虚拟机,直接拿过来用了。
训练网址为http://pwnable.kr/play.php。
点开fd,可以看到需通过SSH连接到远程终端做题,命令如下:ssh fd@pwnable.kr -p2222,密码:guest,连接好以后如下图。
通过ls命令可以看到有三个文件,再用ls -al查看文件权限,发现fd和fd.c文件都只有读的权限,fd为fd.c编译出来的C程序,而flag则是要运行的夺旗程序,但我们没有权限执行,需通过运行fd+参数来执行。
接下来看fd.c的代码,执行命令cat fd.c
可以看到,要运行flag程序得到flag,必须使buf的值为“LETMEWIN\n”,而buf的值是通过read()函数从定义的fd复制来的。而fd的值就是传输给程序fd的参数转化为int值后再减去0x1234得来的。那么问题来了,最后得到fd的值为一个整型,复制给fd的也是一个整型,在if语句中整型和字符串比较是无论如何无法匹配的,那么该怎么通过if得到flag呢?
这个时候就需要知道一个点,read()函数的第一个参数是可以设置为某些特殊参数的,如下
当fd为0时,要复制给buf的值就可以从键盘输入,bingo。
现在只要通过输入给程序fd的值来使参数fd=0,就可以再通过键盘输入“LETMEWIN\n”来进入if语句夺旗。
注意一点,atoi()函数是将字符串转化为十进制的字符串整型,与0x1234减的时候会先转化为16进制,所以需先将参数转为10进制再输入,0x1234的十进制为4660,故输入命令./fd 4660后再输入"LETMEWIN\n" 就可以获得flag。
扩展:当输入值为4661和4662时,也能通过键盘输入"LETMEWIN"来获得flag。
原因是输入4661和4662,相应的fd值为1和2,对应了上表的Standard output和Standard error。Standard output是让你键入你想要程序输出的值,Standard error是键入程序出错时显示的异常值,而无论是设定的哪个值都会把键入值复制给buf,故输入4660-4662都能夺旗。
- 超神之路之PWN训练之1之fd
- PWN学习之[Toddler''s Bottle]-[fd]
- PWN练习之环境变量继承
- pwn工具箱之fastbin attack
- PWN学习之[Rookiss]-[echo1]
- pwnable.kr 之fd
- pwnable.kr之fd
- 超神之路
- 超神之路
- pwn学习之dl_resolve学习篇
- PWN练习之精确覆盖变量数据
- CTF-PWN练习之执行Shellcode
- CSAW2016之PWN题目tutorial的解法
- pwn工具箱之house of lore
- CTF-PWN之fsp-utilize漏洞利用
- pwn工具箱之unsorted bin attack
- pwn工具箱之house of force
- pwn工具箱之house of spirit
- Android studio NDK开发 从入门到实践三
- 如何使用CNN推理机在IoT设备上实现深度学习
- Tensorflow经典案例
- ORA-29275部分多字节字符处理
- fscanf用法解析
- 超神之路之PWN训练之1之fd
- axel命令
- spring注入方式(二)
- Floyd算法重建路径
- [转] ueditor Java版更改上传文件路径
- 正则表达式(笔记一)
- [Leetcode] 495. Teemo Attacking 解题报告
- css/jquery 笑脸评价
- angular.foreach 的使用方法