未加星标

Pwnable.kr学习――fd+col

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

最近想从头着手学习漏洞利用技术,开始刷Pwnable.kr希望能够深入学习Pwn的相关技术。

fd

由于是第一道题,所以目录中有源码fd.c

#include <stdio.h> #include <stdlib.h> #include <string.h> char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc<2){ printf("pass argv[1] a number\n"); return 0; } int fd = atoi( argv[1] ) - 0x1234; int len = 0; len = read(fd, buf, 32); if(!strcmp("LETMEWIN\n", buf)){ printf("good job :)\n"); system("/bin/cat flag"); exit(0); } printf("learn about linux file IO\n"); return 0; }

很容易知道关键在于利用输入构造fd参数,从而将目标字符串输入程序。

当fd为0,1,2的时候,分别对应stdin,stdout和stderr,则使得fd为0便可进入标准输入,输入目标字符串即可。

$ ./fd 4660 LETMEWIN good job :) mommy! I think I know what a file descriptor is!! 小猜想

最开始的时候想着直接创建一个文件内容为LETMEWIN\n,接着只需要获取该文件的fd就可以构造输入将fd指向我们所构建的文件了。

但是实际尝试后发现并不能成功,查阅资料后了解到每个进程都有一个单独的file descriptor table,维护着该进程下的fd数值表。所以在别的进程中创建的fd值在该进程中是无法调用的。

顺着这个思路,想到了进程注入技术,比如windows下的 Process Hollowing,如果在一个进程中打开了另一个程序,那fd表应该可以共享了。

col

由于一样有源码,直接查看

#include <stdio.h> #include <string.h> unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i<5; i++){ res += ip[i]; } return res; } int main(int argc, char* argv[]){ if(argc<2){ printf("usage : %s [passcode]\n", argv[0]); return 0; } if(strlen(argv[1]) != 20){ printf("passcode length should be 20 bytes\n"); return 0; } if(hashcode == check_password( argv[1] )){ system("/bin/cat flag"); return 0; } else printf("wrong passcode.\n"); return 0; }

可以知道需要20个字节长度的字符串,并且每4个字节的数据会被当做int进行读取并累加,要求累加结果为0x21DD09EC,则将该结果直接除5可以得到0x06C5CEC8,注意0x21DD09EC不能被5除尽,所以还要加上余数,即

0x21DD09EC = 0x06C5CEC8 × 4 + 0x06C5CECC 小细节

将4个字节的char转为int类型时,要注意系统的大小端序,pwnable.kr的系统为小端序,所以0x06C5CEC8要存成0xC8CEC506,编写python脚本输入数值即可。

import os code = chr(0x06) + chr(0xC5) + chr(0xCE) + chr(0xC8) + \ chr(0x06) + chr(0xC5) + chr(0xCE) + chr(0xC8) + \ chr(0x06) + chr(0xC5) + chr(0xCE) + chr(0xC8) + \ chr(0x06) + chr(0xC5) + chr(0xCE) + chr(0xC8) + \ chr(0x06) + chr(0xC5) + chr(0xCE) + chr(0xCC) os.system("./col " + code)

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

代码区博客精选文章
分页:12
转载请注明
本文标题:Pwnable.kr学习――fd+col
本站链接:https://www.codesec.net/view/611100.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(62)