[Cryptanalysis] ELF64 - PID Encryption


crypt 함수가 predictable한건 알겠는데 대체 pid 값을 어떻게 예측하란건지 싶었습니다. 그런데 이래저래 찾아보니 pid 값은 대부분의 시스템에서 그냥 선형으로 증가하니, 일단 아무 인자나 줘서 한 번 실행한 후에 그 순간의 pid 값을 찾고 대충 +100 정도 더한 값을 가지고 있다가 주구장창 난사하면 얻어걸리겠다는 생각이 들었습니다.

I know that crypt function is predictable, but how to predict pid...?? pid value is linearly increased on almost every OS. Once you execute the program using arbitrary argument, you can earn current pid value. Then calculate the crypt function result using about pid+100, send it into system repeatly. It will be works.

#include <crypt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;
int main(){
  char tmp[100];
  char ccc[100] = "$1$awesome$hZBbDTmdV9OqimBHatO7F.";
  for (int i = 0;; i++) {
    snprintf(tmp, sizeof(tmp), "%i", i);
    if (strcmp(ccc, crypt(tmp, "$1$awesome")) ==
        0) {
      printf("%d ", i);
      snprintf(tmp, sizeof(tmp), "%i", i+100);
      string ans =
          crypt(tmp, "$1$awesome");
      cout << "./ch21 ";
      for(int i = 0; i < ans.size(); i++){
        char c = ans[i];
        if(c == '$') cout << "\\$";
        else cout << c;
      cout << '\n';

C는 문자열을 다루기 너무 불편합니다 흙

It is really hard to control string in C.. :(


난사 결과 bash shell 획득에 성공했습니다. .passwd 파일을 읽으면 됩니다.

I succeed to earn bash shell. Now you can read the .passwd file.

'워게임 > root-me.org' 카테고리의 다른 글

[Cryptanalysis] Known plaintext - XOR  (0) 2019.03.08
[Cryptanalysis] Monoalphabetic substitution - Caesar  (0) 2019.01.15
[Cryptanalysis] File - PKZIP  (0) 2019.01.14
[Cryptanalysis] Pixel Madness  (0) 2019.01.14
[Cryptanalysis] Shift cipher  (0) 2019.01.14
[Cryptanalysis] Hash - SHA-2  (0) 2019.01.14