1. 1. 前言
  2. 2. 签到题
    1. 2.1. 题目链接:http://chinalover.sinaapp.com/web1/
    2. 2.2. 解题思路
    3. 2.3. 解题方法
    4. 2.4. flag
  3. 3. md5 collision
    1. 3.1. 题目链接:http://chinalover.sinaapp.com/web19/
    2. 3.2. 解题思路
    3. 3.3. 解题方法
    4. 3.4. flag
    5. 3.5. 姿势补充:
  4. 4. 签到2
    1. 4.1. 题目链接:http://teamxlc.sinaapp.com/web1/02298884f0724c04293b4d8c0178615e/index.php
    2. 4.2. 解题思路
    3. 4.3. 解题方法
      1. 4.3.1. 方法一
      2. 4.3.2. 方法二
    4. 4.4. flag
  5. 5. 这题不是WEB
    1. 5.1. 题目链接:http://chinalover.sinaapp.com/web2/index.html
    2. 5.2. 解题思路
    3. 5.3. 解题方法
    4. 5.4. flag
  6. 6. 层层递进
    1. 6.1. 题目链接:http://chinalover.sinaapp.com/web3/
    2. 6.2. 解题思路
    3. 6.3. 解题方法
    4. 6.4. flag
  7. 7. AAencode
    1. 7.1. 题目链接:http://chinalover.sinaapp.com/web20/aaencode.txt
    2. 7.2. 解题思路
    3. 7.3. 解题方法
    4. 7.4. flag
  8. 8. 单身二十年
    1. 8.1. 题目链接:http://chinalover.sinaapp.com/web8/
    2. 8.2. 解题思路
    3. 8.3. 解题方法
    4. 8.4. flag
  9. 9. 你从哪里来
    1. 9.1. 题目链接:http://chinalover.sinaapp.com/web22/
    2. 9.2. 解题思路
    3. 9.3. 解题方法
    4. 9.4. flag
  10. 10. php decode
    1. 10.1. 题目链接:
    2. 10.2. 解题思路
    3. 10.3. 解题方法
    4. 10.4. flag
  11. 11. 文件包含
    1. 11.1. 题目链接:http://4.chinalover.sinaapp.com/web7/index.php
    2. 11.2. 解题思路
    3. 11.3. 解题方法
    4. 11.4. flag
  12. 12. 单身一百年也没用
    1. 12.1. 题目链接:http://chinalover.sinaapp.com/web9/
    2. 12.2. 解题思路
    3. 12.3. 解题方法
    4. 12.4. flag
  13. 13. COOKIE
    1. 13.1. 题目链接:http://chinalover.sinaapp.com/web10/index.php
    2. 13.2. 解题思路
    3. 13.3. 解题方法
    4. 13.4. flag
  14. 14. MYSQL
    1. 14.1. 题目链接:http://chinalover.sinaapp.com/web11/
    2. 14.2. 解题思路
    3. 14.3. 解题方法
    4. 14.4. flag
  15. 15. sql injection 3
    1. 15.1. 题目链接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1
    2. 15.2. 解题思路
    3. 15.3. 解题方法
    4. 15.4. flag
  16. 16. /x00
    1. 16.1. 题目链接:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php
    2. 16.2. 解题思路
    3. 16.3. 解题方法
    4. 16.4. flag
  17. 17. bypass again
    1. 17.1. 题目链接:http://chinalover.sinaapp.com/web17/index.php
    2. 17.2. 解题思路
    3. 17.3. 解题方法
    4. 17.4. flag
  18. 18. 变量覆盖
    1. 18.1. 题目链接:http://chinalover.sinaapp.com/web18/index.php
    2. 18.2. 解题思路
    3. 18.3. 解题方法
    4. 18.4. flag
  19. 19. PHP是世界上最好的语言
    1. 19.1. 题目链接:http://way.nuptzj.cn/php/index.php
    2. 19.2. 解题思路
    3. 19.3. 解题方法
    4. 19.4. flag
  20. 20. 伪装者
    1. 20.1. 题目链接:http://chinalover.sinaapp.com/web4/xxx.php
    2. 20.2. 解题思路
    3. 20.3. 解题方法
    4. 20.4. flag
  21. 21. Header
    1. 21.1. 题目链接:http://way.nuptzj.cn/web5/
    2. 21.2. 解题思路
    3. 21.3. 解题方法
    4. 21.4. flag
  22. 22. 上传绕过
    1. 22.1. 题目链接:http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html
    2. 22.2. 解题思路
    3. 22.3. 解题方法
    4. 22.4. flag
  23. 23. SQL注入1
    1. 23.1. 题目链接:http://chinalover.sinaapp.com/index.php
    2. 23.2. 解题思路
    3. 23.3. 解题方法
    4. 23.4. flag
  24. 24. pass check
    1. 24.1. 题目链接:http://chinalover.sinaapp.com/web21/
    2. 24.2. 解题思路
    3. 24.3. 解题方法
    4. 24.4. flag
  25. 25. 起名字真难
    1. 25.1. 题目链接:http://chinalover.sinaapp.com/web12/index.php
    2. 25.2. 解题思路
    3. 25.3. 解题方法
    4. 25.4. flag
  26. 26. 密码重置
    1. 26.1. 题目链接:http://nctf.nuptzj.cn/web13/index.php?user1=Y3RmdXNlcg%3D%3D
    2. 26.2. 解题思路
    3. 26.3. 解题方法
  27. 27. php 反序列化
    1. 27.1. 题目链接:http://115.28.150.176/php1/index.php
    2. 27.2. 解题思路
    3. 27.3. 解题方法
    4. 27.4. flag
  28. 28. sql injection 4
    1. 28.1. 题目链接:http://chinalover.sinaapp.com/web15/index.php
    2. 28.2. 解题思路
    3. 28.3. 解题方法
    4. 28.4. flag
  29. 29. 综合题
    1. 29.1. 题目链接:http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php
    2. 29.2. 解题思路
    3. 29.3. 解题方法
    4. 29.4. flag
  30. 30. system
    1. 30.1. 题目链接:
    2. 30.2. 解题思路
    3. 30.3. 解题方法
    4. 30.4. flag
  31. 31. SQL注入2
    1. 31.1. 题目链接:http://4.chinalover.sinaapp.com/web6/index.php
    2. 31.2. 解题思路
    3. 31.3. 解题方法
    4. 31.4. flag
  32. 32. 综合题2
    1. 32.1. 题目链接:http://cms.nuptzj.cn/
    2. 32.2. 解题思路
    3. 32.3. 解题方法
    4. 32.4. flag
  33. 33. 密码重置2
    1. 33.1. 题目链接:http://nctf.nuptzj.cn/web14/index.php
    2. 33.2. 解题思路
    3. 33.3. 解题方法
    4. 33.4. flag

南京邮电大学网络攻防训练平台

前言

刚刚接触CTF不久,还是决定先从web开始,于是就开始了自己的南邮刷题之旅,谨以此记录自己的学习过程,总结解题方法,勉励自己坚持学习!

签到题

题目链接:http://chinalover.sinaapp.com/web1/

解题思路

单个页面查看源代码。

解题方法

flag

nctf{flag_admiaanaaaaaaaaaaa}

md5 collision

题目链接:http://chinalover.sinaapp.com/web19/

解题思路

PHP代码阅读:

1
2
3
4
5
6
7
8
9
10
11
12
<?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";}
?>

核心代码:
$a != 'QNKCDZO' && $md51 == $md52
主要是利用了 PHP 弱类型语言的松散比较符的缺陷。
从源码中可以得输入一个 a 的参数的变量,a 首先不等于QNKCDZO并且 a 得 md5 值必须等于QNKCDZO加密后的 md5 值。

乍一看好像不可能存在这样的值,但是这里QNKCDZO加密后的 md5 值为0e830400451993494058024219903391
这里是0e开头的,在进行等于比较的时候,PHP 把它当作科学计数法,0 的无论多少次方都是零。

所以这里利用上面的弱类型的比较的缺陷来进行解题。

解题方法

在这里插入图片描述

flag

nctf{md5_collision_is_easy}

姿势补充:

字符串加密后 md5 为 0exxxx 的字符串 (x 必须是 10 进制数字) 列表

字符串 MD5
QNKCDZO 0e830400451993494058024219903391
240610708 0e462097431906509019562988736854
aabg7XSs 0e087386482136013740957780965295
aabC9RqS 0e041022518165728065344349536299
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020
s1091221200a 0e940624217856561557816327384675
s1885207154a 0e509367213418206700842008763514

签到2

题目链接:http://teamxlc.sinaapp.com/web1/02298884f0724c04293b4d8c0178615e/index.php

解题思路

在这里插入图片描述
题中提示输入口令:zhimakaimen,然而输入之后并没有什么卵用。

解题方法

方法一

查看页面源代码,
在这里插入图片描述
发现输入框中允许输入的字符串最大长度为10,而zhimakaimen11个字符,于是果断F12修改maxlength=11,再次输入,OK了。
在这里插入图片描述

方法二

利用Burpsuite抓包
在这里插入图片描述
修改text1=zhimakaimen,然后GO即可
在这里插入图片描述

flag

nctf{follow_me_to_exploit}

这题不是WEB

题目链接:http://chinalover.sinaapp.com/web2/index.html

解题思路

一个猫的图片,看来搞信安的很多人都喜欢猫呀。加上题目提示: 这不是一个 Web 题目,所以这一题重点在这张图片上。

解题方法

将图片保存下来,修改格式为txt,打开查找即可。

flag

nctf{photo_can_also_hid3_msg}

层层递进

题目链接:http://chinalover.sinaapp.com/web3/

解题思路

这一题 一上来我是懵逼的,搜索关键词找了网上的 Write-up 才明白题目想表达的意思。
网站源码一看主要就使用了<iframe>标签,iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。好像有点层层递进的感觉,所以这里重点是<iframe>标签内的内容。

解题方法

直接查看网页源代码,有一个SO.html,点击,重复几次,最后出现404.html,继续,出现下图:
在这里插入图片描述
说实话,不仔细看是看不出来的。(内心是崩溃的)

flag

nctf{this_is_a_fl4g}

AAencode

题目链接:http://chinalover.sinaapp.com/web20/aaencode.txt

解题思路

抓包看返回包

解题方法

flag

nctf{javascript_aaencode}

单身二十年

题目链接:http://chinalover.sinaapp.com/web8/

解题思路

抓包看返回包

解题方法

方法一:
在这里插入图片描述
方法二:
查看页面源代码
在这里插入图片描述
发现里面包含一个search_key.php文件,于是构造payload:
/search_key.php,得到flag
在这里插入图片描述

flag

nctf{yougotit_script_now}

你从哪里来

题目链接:http://chinalover.sinaapp.com/web22/

解题思路

http 头使用referer伪造

解题方法

BP 抓包手动添加Google域名的referer
在这里插入图片描述
题目有问题挂了,解题思路就是这样。

flag

但网上还是能找到flag的:
nctf{http_referer}

php decode

题目链接:

解题思路

PHP代码阅读:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function CLsI($ZzvSWE) { // 定义一个 CLsI 函数,接受 ZzvSWE 的变量
$ZzvSWE = gzinflate(base64_decode($ZzvSWE)); //ZzvSWE变量被base64解密后使用gzinflate加密

for ($i = 0; $i < strlen($ZzvSWE); $i++) {
$ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);
//遍历ZzvSWE变量 转换为变量的每一位的ASCII值-1的字符
}

return $ZzvSWE;
}eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));
?> //这里的eval函数问题很大

解题方法

代码整体意思不难理解,遍历字符串中的每一个字母,然后使用Base64+Gzinflate加密,最后转换为 ASCII 码的值 - 1,再转换为字符串。所以尝试运行一下代码,发现报错,这里报错是因eval函数的问题。
eval 函数:

  1. eval() 函数把字符串按照 PHP 代码来执行
  2. 该字符串必须是合法的 PHP 代码,且必须以分号结尾
  3. 如果没有在代码字符串中调用 return 语句,则返回 NULL
  4. 如果代码中存在解析错误,则 eval() 函数返回 false
    eval函数一般我们在一句话木马中经常见到,结合这个就很容易理解了。
    解决代码运行报错就是直接将eval修改为echo直接将结果输出来:
    在这里插入图片描述

flag

nctf{gzip_base64_hhhhhh}

文件包含

题目链接:http://4.chinalover.sinaapp.com/web7/index.php

解题思路

给了乌云知识库的参考链接,阅读了一下本文主要是利用 php 流 filter 来进行文件读取。 关于 PHP 文件流后期单独来总结.

解题方法

使用PHP的filter协议读取index.php,即访问 http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/convert.base64-encode/resource=index.php ,将得到的字符串base64解码。
在这里插入图片描述

flag

nctf{edulcni_elif_lacol_si_siht}

单身一百年也没用

题目链接:http://chinalover.sinaapp.com/web9/

解题思路

抓包看返回包

解题方法

BP抓包,flag藏在响应头里
在这里插入图片描述

flag

nctf{this_is_302_redirect}

题目链接:http://chinalover.sinaapp.com/web10/index.php

解题思路

BP抓包看返回包

解题方法

在这里插入图片描述
得到flag
在这里插入图片描述

flag

nctf{cookie_is_different_from_session}

MYSQL

题目链接:http://chinalover.sinaapp.com/web11/

解题思路

根据提示找到 robots.txt 文件下载下来然后阅读 PHP 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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]);
}
}
?>

说明要向sql.php提交一个id,使得intval($_GET[id])为1024$_GET[id]==1024为假。intval() 是整型转换函数,会强制转换为整形。

解题方法

代码中提示了不可以直接输入id=1024, 这里得想办法来绕过才可以。可以令id=1024.xxx等之类的小数,也可以用科学计数法。
在这里插入图片描述

flag

nctf{query_in_mysql}

sql injection 3

题目链接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

解题思路

解题方法

flag

nctf{gbk_3sqli}

/x00

题目链接:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php

解题思路

阅读源代码:

1
2
3
4
5
6
7
8
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会把null视为字符串的结束,从而被%00截断,而strpos则可以越过%00,所以提交nctf=1%00%23biubiubiu即可。

解题方法

在这里插入图片描述

注意:#biubiubiu中的#URL编码为%23

flag

nctf{use_00_to_jieduan}

bypass again

题目链接:http://chinalover.sinaapp.com/web17/index.php

解题思路

代码阅读;

1
2
3
4
5
6
7
8
if (isset($_GET['a']) and isset($_GET['b'])) 
{ //get方式接受a和b变量
if ($_GET['a'] != $_GET['b']) //a 不等于 b
if (md5($_GET['a']) == md5($_GET['b'])) //a的md5值等于b的md5值
die('Flag: '.$flag);
else
print 'Wrong.';
}

这一题考察了 PHP 弱类型语言的特性.源码要求提交两个不相等的值使他们的md5值严格相等。md5()函数要求接收一个字符串,若传递进去一个数组,则会返回null,即var_dump(md5(array(2))===null);值为bool(true)

解题方法

因此向$_GET数组传入两个名为a、b的不相等的数组,从而导致md5()均返回空,于是得到flag.

flag

nctf{php_is_so_cool}

变量覆盖

题目链接:http://chinalover.sinaapp.com/web18/index.php

解题思路

source.php核心代码如下:

1
2
3
4
5
6
7
8
<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
extract($_POST);
if ($pass == $thepassword_123)
echo $theflag;
}
?>

关于变量覆盖请看我的另一篇博文:https://l1395851238.github.io/2018/11/18/%E5%8F%98%E9%87%8F%E8%A6%86%E7%9B%96/#more

解题方法

在这里插入图片描述

flag

nctf{bian_liang_fu_gai!}

PHP是世界上最好的语言

题目链接:http://way.nuptzj.cn/php/index.php

解题思路

解题方法

flag

伪装者

题目链接:http://chinalover.sinaapp.com/web4/xxx.php

解题思路


根据提示,猜测应该是伪造IP。

解题方法

BP抓包,伪造IP。。。。。。。
这题好像不能做了。。。。。。

flag

nctf{happy_http_headers}

题目链接:http://way.nuptzj.cn/web5/

解题思路

解题方法

flag

上传绕过

题目链接:http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html

解题思路

  1. 上传一张1.jpg文件,出现如下:
    1
    2
    3
    4
    5
    Array ( [0] => .jpg [1] => jpg ) Upload: 1.jpg
    Type: image/jpeg
    Size: 0 Kb
    Stored in: ./uploads/8a9e5f6a7a789acb.phparray(4) { ["dirname"]=> string(9) "./uploads" ["basename"]=> string(5) "1.jpg" ["extension"]=> string(3) "jpg" ["filename"]=> string(1) "1" }
    必须上传成后缀名为php的文件才行啊!
  2. 上传一个1.php文件,出现如下:
    1
    2
    Array ( [0] => .php [1] => php ) 
    不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件

解题方法

flag

nctf{welcome_to_hacks_world}

SQL注入1

题目链接:http://chinalover.sinaapp.com/index.php

解题思路

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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];
?>

trim()是去除两侧空格,pass经过MD5加密。

解题方法

点进去是 Source 代码,没有看到显式的过滤或转义, trim()是去除两侧空格
所以尝试传入user为 admin’)--其中 ‘)用来分别用来闭合,--用来把后面给注释掉
这样最后的查询语句为

select user from ctf where (user='admin')

flag

nctf{ni_ye_hui_sql?}

pass check

题目链接:http://chinalover.sinaapp.com/web21/

解题思路

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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!";
}
?>

根据代码,passpass1经过strcmp比较之后结果为0.

解题方法

strcmp(array,string)=null=0
构造payload:?pass[]=1

flag

nctf{strcmp_is_n0t_3afe}

起名字真难

题目链接:http://chinalover.sinaapp.com/web12/index.php

解题思路

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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';
?>

传进去的key要是数,但又不能包含数字。

解题方法

转换进制,将key转换为十六进制即可。54975581388=0xccccccccc
payload:?key=0xccccccccc

flag

nctf{follow_your_dream}

密码重置

题目链接:http://nctf.nuptzj.cn/web13/index.php?user1=Y3RmdXNlcg%3D%3D

解题思路

既然是admin的密码,怎么用户回事ctfuser呢?
抓包,将ctfuser改成admin,发现不行。
注意到:

地址栏url传了一个user参数,Y3RmdXNlcg%3D%3Durl解密之后Y3RmdXNlcg==,在经过bash64解密之后为ctfuser
所有adminbash64加密YWRtaW4=,再url加密%59%57%52%74%61%57%34%3d
构造payload:?user1=YWRtaW4=

解题方法

php 反序列化

题目链接:http://115.28.150.176/php1/index.php

解题思路

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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?";
}
?>

这段代码的意思就是,一个字符串经过反序列化之后,entersecret相等。

解题方法

构造poc:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

class just4fun
{
var $enter;
var $secret;
function just4fun()
{
$this->enter = &$this->secret;
}
}

$test = new just4fun();

echo serialize($test);

?>

得到payload:O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}-+

flag

nctf{serialize_and_unserialize}

sql injection 4

题目链接:http://chinalover.sinaapp.com/web15/index.php

解题思路

解题方法

flag

综合题

题目链接:http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php

解题思路

解题方法

flag

system

题目链接:

解题思路

解题方法

flag

SQL注入2

题目链接:http://4.chinalover.sinaapp.com/web6/index.php

解题思路

解题方法

flag

综合题2

题目链接:http://cms.nuptzj.cn/

解题思路

解题方法

flag

密码重置2

题目链接:http://nctf.nuptzj.cn/web14/index.php

解题思路

解题方法

flag