nctf-web(wp)后续会更新

WEB

1.签到

查看源代码

2.md5 collision

<?php
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
    echo "nctf{*****************}";
} else {
    echo "false!!!";
}}
else{echo "please input a";}
?>

php语言的弱类型特性。
$md51 = md5('QNKCDZO')=0E830400451993494058024219903391

  • php发现密文为0e开头,PHP在进行比较运算时,如果遇到了0e\d+这种字符串,就会将这种字符串解析为科学计数法。
  • 因为0exx都等于0,所以让两者相等我们只需再找到一个MD5加密后开头为0e的字符串即可
    0e开头MD5值小结
    get一个a.png

    nctf{md5_collision_is_easy}

3.签到2

输入的口令长度为11,而他html源码限制的长度为10.png

只需要post一下就可以了。
image.png

flag is:nctf{follow_me_to_exploit}


4.这题不是web
010编辑器打开图片

image.png


5.层层递进
打开源代码,找到so.html.一直点,发现页面一样,继续点so.html。直到变为404.html

image.png

nctf{this_is_a_fl4g}


6.AAencode
提示:javascript aaencode
神器的JavaScript加密工具aaencode 把js转为颜文字表情符号
aaencode 加密
aaencode 解密

放入aencode回车.png


7.单身二十年

打开控制台,查看network.png

抓包查看该页面响应.png


8.你从哪里来
题目坏了。本地,复现
修改一下源码

$referer = $_SERVER['referer'];
改为
$referer = $_SERVER['HTTP_REFERER'];
image.png

9.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.png

eval换成echo。输出代码。phpinfo(); flag:nctf{gzip_base64_hhhhhh}


10.文件包含


11.单身一百年也没有用
抓个包看看。

image.png


12.Download~!

image.png

eGluZ3hpbmdkaWFuZGVuZy5tcDM= base64解码 xingxingdiandeng.mp3

download.php?url=base64('文件名')
下载download.php文件
download.php?url=ZG93bmxvYWQucGhw
文件内容
??<?php
error_reporting(0);
include("hereiskey.php");
$url=base64_decode($_GET[url]);
if( $url=="hereiskey.php" || $url=="buxiangzhangda.mp3" || $url=="xingxingdiandeng.mp3" || $url=="download.php"){
    $file_size = filesize($url);
    header ( "Pragma: public" );
    header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    header ( "Cache-Control: private", false );
    header ( "Content-Transfer-Encoding: binary" );
    header ( "Content-Type:audio/mpeg MP3");
    header ( "Content-Length: " . $file_size);
    header ( "Content-Disposition: attachment; filename=".$url);
    echo(file_get_contents($url));
    exit;
}
else {
    echo "Access Forbidden!";
}
?>

下载hereiskey.php
way.nuptzj.cn/web6/download.php?url=aGVyZWlza2V5LnBocA==


image.png

nctf{download_any_file_666}


13.cookie

image.png

flag:nctf{cookie_is_different_from_session}


14.MYSQL
http://chinalover.sinaapp.com/web11/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]);
  $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]);
  }
}
?>

image.png

get 1024.1
http://chinalover.sinaapp.com/web11/sql.php?id=1024.1
the flag is:nctf{query_in_mysql}


15.sql injection 3

gbk宽字节注入.png

宽字节注入,双字节绕过
MYSQl宽字节注入


16./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 '骚年,继续努力吧啊~';
    }

ereg()详解
strops()详解
分析:第一个选择要满足纯数字,第二个选择要满足含有#biubiubiu

  • 传一个数组上去满足条件。?nctf[]=1。ereg()与strpos()出错返回null,!=FLASE.
  • ereg的字符串截断漏洞。遇到%00则默认为字符串的结束。?nctf=1%00%23biubiubiu
    html url编码
    flag:nctf{use_00_to_jieduan}

17.依旧是弱类型

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.';
}
  • md5不能处理数组结构的数据。出错返回null。index.php?a[]=1&b[]=2
  • 提交两个加密后0e开头的字符串。?a=s878926199a&b=
    s155964671a

18.变量覆盖

<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { //表示表单提交方式为php
        extract($_POST);}
        if ($pass == $thepassword_123) { // 只需要覆盖$pass、$thepassword_123这两个变量使他们相等即可

        echo $theflag;} 
?>

变量覆盖
burp post一个 pass=1&thepassword_123=1
nctf{bian_liang_fu_gai!}


19.php是世界上最好的语言

<?php
if(eregi("hackerDJ",$_GET[id])) {//id与hackerDJ不相同
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);//id又经历了一次URL解码
if($_GET[id] == "hackerDJ")//解码后的id与hackerDJ相同
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>


<br><br>
Can you authenticate to this website?
eregi不区分大小写的正则匹配.png

url解码.png

其实url编码就是一个字符ascii码的十六进制。
h的URL编码为%68,在进行一次编码后为%2568,%的编码为%25,get id=%2568ackerDJ。
flag: nctf{php_is_best_language}


20.伪装者


21.Header

响应里面.png


22.上传绕过

先上传一个png文件.png

上传php文件.png

我们要把上传的png文件,让他处理为php文件。
截断上传漏洞
我们来判断一下 是怎么识别上传文件的类型。

上传一个5.png文件 在/uploads/下添加5.php

判断如何识别文件类型.png

反馈.png

我们可以看到basename返回5.php5.png 说明是通过basename判断文件类型的。所以我们在/uploads/5.php后面加一个00截断。为了好标识,5.php后加一个空格。打开Burp hex讲空格20,修改为00。
0x00截断.png

image.png

flag:nctf{welcome_to_hacks_world}


23.sql注入1

<?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];
?>

看源码$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; 可以在输入的user做手脚,把后面的注释掉,同时别忘了闭合这一语句,输入 admin‘)#即可,因为#后面都被注释了,原来的后括号也没了,所以要补上括号。

24.pass chack

<?php
    $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!";
    }
?>

strcmp($pass,$pass1)
strcmp(array,string)=null=0
当不同类型的变量进行比较的时候就会存在变量转换的问题,在转换之后就有可能会存在问题。
post 一个数组
pass[]=1

25.起名字真难

<?php
 function noother_says_correct($number)
{
        $one = ord('1');
        $nine = ord('9');
        for ($i = 0; $i < strlen($number); $i++)
        {   
                $digit = ord($number{$i});
                if ( ($digit >= $one) && ($digit <= $nine) )
                {
                        return false;
                }
        }
           return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
    echo $flag;
else 
    echo 'access denied';
?>
image.png

54975581388的16进制是ccccccccc,没有数字。提交?key=0xccccccccc就行了。

26.密码重置


image.png

admin based加密 YWRtaW4=

27.php反序列化

<?php
class just4fun {
    var $enter;
    var $secret;
}

if (isset($_GET['pass'])) {
    $pass = $_GET['pass'];

    if(get_magic_quotes_gpc()){
        $pass=stripslashes($pass);
    }

    $o = unserialize($pass);

    if ($o) {
        $o->secret = "*";
        if ($o->secret === $o->enter)
            echo "Congratulation! Here is my secret: ".$o->secret;
        else 
            echo "Oh no... You can't fool me";
    }
    else echo "are you trolling?";
}
?>

28.sql injection 4

<!--
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';

function clean($str){
    if(get_magic_quotes_gpc()){
        $str=stripslashes($str);
    }
    return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
    die('Invalid password!');
}

echo $flag;
-->
Invalid password!

当 magic_quotes_gpc 打开时,所有的 ’ (单引号), ” (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符。

return htmlentities($str, ENT_QUOTES);//编码所有的双引号和单引号

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';

反斜杠取消单引号闭合作用  转义
SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';
转换一下
name='.$username.' AND pass='.$password.';
代入payload

name='\' AND pass='or 1 #';

name=' AND pass='or 1 #';  
#注释多出来的单引号    AND pass =是一个整体  一定是flase   or  1   一定是true  

25.综合题
CTF之JScrewIt的加密解密

image.png

百度一下history of bash 目录在~/.bash_history
每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。这样访问.bash_history得到zip -r flagbak.zip ./*。下载一下,flag出来了。

26.system


27.SQL注入2

<?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 = $_POST[user];
  $pass = md5($_POST[pass]);
  $query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
  if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }
  else {
    echo("<p>Log in failure!</p>");
  }
}
?>

提示union查询。

0'union select 'C4CA4238A0B923820DCC509A6F75849B'#&pass=1

看懂php构建一个就行了 没什么意思。


28.综合题2
查源码 http://cms.nuptzj.cn/about.php?file=sm.txt

create table admin (
id integer,
username text,
userpass text,
)

以及一些文件

config.php:存放数据库信息,移植此 CMS 时要修改
index.php:主页文件
passencode.php:Funny 公司自写密码加密算法库
say.php:用于接收和处理用户留言请求
sm.txt:本 CMS 的说明文档

附一篇详解 https://www.tuicool.com/articles/uYVZbmv


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,756评论 3 64
  • 这次来看看某著名大学—— 南京邮电大学的CTF题目吧~ (Ps:因本人较懒,所以做题时都是手工+度娘,几乎没有用到...
    BestBDs阅读 1,984评论 1 2
  • 两场小雨过后,算是正式和夏天道别了。 2017年8月31日 星期四 晴 文 | 芷笺 清晨的微凉感沾染着奔走的...
    芷笺阅读 229评论 6 3
  • 无悔 文||与你相识 这么多年把自己泡在文字里 灵魂一次又一次的受伤 是为年轻的爱情还是轻狂的理想 多少个黑夜和黎...
    与你相识_40fa阅读 162评论 2 3