gdb破解&&密码分析CTF
gdb cracking && cryptanalysis CTF
大家好,我在玩CTF,我必须破解一个程序才能得到shell源代码是:
/*
* 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, "$awesome"));
if (strcmp(argv[1], crypt(pid, "$awesome")) == 0) {
printf("WIN!\n");
execve(args[0], &args[0], NULL);
} else {
printf("Fail... :/\n");
}
return 0;
}
现在我用 gdb 调试了它,正如我从源代码中了解到的那样,我必须在 运行 期间输入 proccessid (PID) 才能在 shell 和 [=17= 中获得成功]GDB-PEDA 我在断点期间尝试了 getpid 但是如何仅使用 gdb 继续使用进程 ID 运行 命令将输入传递给程序任何帮助!
任意通知!
不确定我是否理解正确你的问题,但当达到限制时,PID 的范围和周期是有限的,最大值通常在 2^15 左右。您可以简单地 运行 一个循环,该循环将 运行 通过潜在的 PID 以匹配将为进程分配的 PID。
像这样的事情会做:
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), "$awesome")], stdout=subprocess.PIPE)
output = sp.stdout.readline()
if "Fail" not in output:
print output
break
大家好,我在玩CTF,我必须破解一个程序才能得到shell源代码是:
/*
* 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, "$awesome"));
if (strcmp(argv[1], crypt(pid, "$awesome")) == 0) {
printf("WIN!\n");
execve(args[0], &args[0], NULL);
} else {
printf("Fail... :/\n");
}
return 0;
}
现在我用 gdb 调试了它,正如我从源代码中了解到的那样,我必须在 运行 期间输入 proccessid (PID) 才能在 shell 和 [=17= 中获得成功]GDB-PEDA 我在断点期间尝试了 getpid 但是如何仅使用 gdb 继续使用进程 ID 运行 命令将输入传递给程序任何帮助!
任意通知!
不确定我是否理解正确你的问题,但当达到限制时,PID 的范围和周期是有限的,最大值通常在 2^15 左右。您可以简单地 运行 一个循环,该循环将 运行 通过潜在的 PID 以匹配将为进程分配的 PID。
像这样的事情会做:
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), "$awesome")], stdout=subprocess.PIPE)
output = sp.stdout.readline()
if "Fail" not in output:
print output
break