首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdb破解&密码分析CTF

gdb破解&密码分析CTF
EN

Stack Overflow用户
提问于 2018-03-11 14:45:06
回答 1查看 608关注 0票数 1

大家好,我正在玩CTF,我必须破解一个程序才能得到shell,源代码是:

代码语言:javascript
复制
/*
* gcc ch21.c -lcrypt -o ch21
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crypt.h>
#include <sys/types.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
char pid[16];
char *args[] = { "/bin/bash", "-p", 0 };

snprintf(pid, sizeof(pid), "%i", getpid());
if (argc != 2)
    return 0;

printf("%s=%s",argv[1], crypt(pid, "$1$awesome"));

if (strcmp(argv[1], crypt(pid, "$1$awesome")) == 0) {
    printf("WIN!\n");
execve(args[0], &args[0], NULL);

} else {
    printf("Fail... :/\n");
}
return 0;
}

现在,我用gdb调试了它,正如我从源代码中了解的那样,我必须在运行时输入proccessid (PID)才能成功地使用-PEDA,我在断点期间尝试过getpid,但是如何继续使用进程id,gdb只运行命令,将输入传递给程序--任何帮助!

任何通知

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 21:28:35

不确定我是否正确地理解了您的问题,但是PID在达到极限时在范围和周期上是有限的,最大值通常在2^15左右。您可以简单地运行一个循环,通过潜在的PID来匹配为进程分配的PID。

像这样的事情可以做到:

代码语言:javascript
复制
import os, crypt, subprocess

pid = os.getpid()+50 #safe buffer for things created after python script was started
print "Selected: ",pid
for i in range(32768):
    sp = subprocess.Popen(['./ch21', crypt.crypt(str(pid), "$1$awesome")], stdout=subprocess.PIPE)
    output = sp.stdout.readline()
    if "Fail" not in output:
            print output
            break
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49221254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档