第一次写ctf的wp 有些表达的可能不是很清楚
题目感觉质量很高 也很有趣哈 只写了部分web题目 pwn crypto不涉及 不要问我为什么 厂长是我表哥
签到题 右键查看源代码
nctf{flag_admiaanaaaaaaaaaaa}
源码中可以看出 变量a经过get方式传递 ,a的值不等于QNKCDZO
但a
的只经过md5加密后等于 QNKCDZO
加密后的值 看似很矛盾
发现
QNKCDZO
加密后的值是0e830400451993494058024219903391
是0e开头的,PHP 把它当作科学计数法,0 的无论多少次方都是零
所以我们找到md5加密后的值是0e开头的即可
这里我用s878926199a
nctf{md5_collision_is_easy}
复制了口令点击开门发现提交的时候少了一个n
查看源代码发现 最大长度为10
<input type="password" value="" name="text1" maxlength="10">
限制了长度改成11即可
nctf{follow_me_to_exploit}
放了一张图。先保存到本地
nctf{photo_can_also_hid3_msg}
这题本来是没有思路的 请教了下国光哥
nctf{this_is_a_fl4g}
打开以后一大堆乱码。。以txt文件保存到本地
之后把保存在txt的文件内容粘贴到审查元素下的Console
nctf{javascript_aaencode}
点一下超链接 抓包一下看看
nctf{yougotit_script_now}
给出代码
大体意思是,声明一个函数 把接收到的ZzvSWE
变量的值 进行base64解密后 再次进行gzinflate
加密 之后遍历每个字符 的ascii的值 -1最后在转化为字符串。
mac下安装了集成环境 把代码copy一下放到网站目录 打开后发现什么都不显示 分析一下代码倒数第二行的eval
eval是把任何字符串当做php代码来执行 而php代码是不能在前台显示出来的 (自己是这样理解 不知道对不对)
eval换成echo即可
这题用到php伪协议的知识 自己对这块不怎么了解 有时间要总结一下php伪协议的知识。
http://4.chinalover.sinaapp.com/web7/index.php?file=show.php
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/convert.base64-encode/resource=index.php
php代码是不能再前台显示的 所以需要进行base64加密,显示到前台以后,base解密即可
nctf{edulcni_elif_lacol_si_siht}
还是抓包一下看看
nctf{this_is_302_redirect}
题目挂了
TIP: 0==not
抓包看一下 根据提示 0==not
我们修改login=1
nctf{cookie_is_different_from_session}
点开题目连接 根据Do you know robots.txt?
这题最开始有点疑问 感觉是sql注入 后面百度了一下才知道思路不对
考的是intval()的用法 intval把变量转化为整数
id=1024.01就能绕过爆出flag
nctf{query_in_mysql}
进入解题连接后发现本题考查sql注入 输入'
看一下
果然被转义了。。。这时候看到题目名字gbk 貌似明白了
宽字节注入
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=database()--+
发现存在ctf,ctf2,ctf3,ctf4,news
表
ctf感觉有戏 先看一下ctf表下的字段名
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x637466--+
发现user,pw
字段
接下来查看数据
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df'union select 1,group_concat(user,pw) from ctf--+
果然
美滋滋的跑去提交 发现flag不对??????????
之后我每个表都试了一下 发现ctf4下也有一个falg
flag{this_is_sqli_flag}
格式感觉就不对 姿势盲区了百度了一下 发现前辈们也是在ctf4下发现的flag是
nctf{gbk_3sqli}
不知道怎么回事 不自信的我复制了前辈的payload爆出的flag也是flag{this_is_sqli_flag}
看来真的是题目本身的问题了。。
又是一道看似很矛盾的题目
这里用数组直接可以绕过
http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf[]=1
爆出flagnctf{use_00_to_jieduan}
本题提示说有多种解题方法 题目名字让我想到了应该可以00截断
ereg函数存在%00截断漏洞,当遇到%00(NULL)时,函数就截止了
strpos函数 查找#biubiubiu在nctf变量接收的值中第一次出现的位置
http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf=1%00%23biubiubiu
这道题呢和md5 collision
考查的是一个点弱类型
get方式接受 a b两个参数 使得a不等于b 但md5加密后a的值必须等于md5加密后b的值 这里我直接用QNKCDZO
s878926199a
不只这两个很多加密后的值都是0e开头的详情百度一下
http://chinalover.sinaapp.com/web17/index.php?a=QNKCDZO&b=s878926199a
nctf{php_is_so_cool}
点一下/source.php
出现index.php的源码
extract()
函数的作用:从数组中将变量导入到当前的符号表 由于此函数存在变量覆盖漏洞 给pass赋值就覆盖了原值所以post下直接提交 两个变量的值相等就会爆出flag
nctf{bian_liang_fu_gai!}
貌似也挂了
抓包修改X-Forwarded-For: 127.0.0.1
貌似没用 偷偷看了国光哥的wp 姿势没问题 题目出现了点问题
网上flag
nctf{happy_http_headers}
题目又挂了。。
一次实战很多次ctf遇到类似突破上传的方法
以前单独总结过这种方法写的很详细
nctf{welcome_to_hacks_world}
打开解题连接出现此页面 点击Source
查看源码
<html>
<head>
Secure Web Login
</head>
<body>
<?php
if($_POST[user] && $_POST[pass]) {
mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
mysql_select_db(SAE_MYSQL_DB);
$user = trim($_POST[user]);
$pass = md5(trim($_POST[pass]));
$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";
echo '</br>'.$sql;
$query = mysql_fetch_array(mysql_query($sql));
if($query[user]=="admin") {
echo "<p>Logged in! flag:******************** </p>";
}
if($query[user] != "admin") {
echo("<p>You are not admin!</p>");
}
}
echo $query[user];
?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.phps">Source</a>
</html>
解题的关键核心语句
$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";
if($query[user]=="admin") {
echo "<p>Logged in! flag:******************** </p>";
}
用户名为admin即可拿到flag所以应该注释掉后面的密码 sql语句源码里都有了构造一下 admin')#
这里做题的时候忽略了php的基础一直这样子写admin"')#
后面才反应过来双引号是接受变量用的。。。
nctf{ni_ye_hui_sql?}
题目代码
$pass=@$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if(isset($pass))
{
if(@!strcmp($pass,$pass1)){
echo "flag:nctf{*}";
}else{
echo "the pass is wrong!";
}
}else{
echo "please input pass!";
}
?>
post接收pass参数用strcmp函数与pass1做比较
php的strcmp函数不能处理数组所以
nctf{strcmp_is_n0t_3afe}
打开解题连接后观察url user1=Y3RmdXNlcg==
猜测base64加密 解密后果然是ctfuser
根据题目提示:重置管理员账号:admin 的密码
admin经过base64加密后YWRtaW4=
url替换成user1=YWRtaW4=
账号替换成admin
发现替换不了账号 审查元素看一下
readonly 属性规定输入字段为只读。是不可以修改的 删除了就好
nctf{reset_password_often_have_vuln}