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

本文介绍了南京邮电大学网络攻防训练平台的Web部分的挑战,包括签到题、MD5碰撞、文件包含、SQL注入等多个环节。通过解析题目,演示了解题思路和技巧,例如利用PHP的弱类型特性、HTTP头部信息、文件下载漏洞等进行解题。此外,还提到了SQL注入和PHP反序列化等常见安全问题。
摘要由CSDN通过智能技术生成

为了让各位能够好好查看一下,我违规操作了(QAQ)放在随笔里面了(Orz)

本文转自findneo:https://www.cnblogs.com/findneo/p/nupt-ctf-writeup.html

南邮CTF平台网址:

  • http://ctf.nuptsast.com/challenges
  • http://ctf.nuptzj.cn/challenges

WEB

签到题

nctf{flag_admiaanaaaaaaaaaaa}

ctrl+u或右键查看源代码即可。在CTF比赛中,代码注释、页面隐藏元素、超链接指向的其他页面、HTTP响应头部都可能隐藏flag或提示信息。在渗透测试中,开发者留下的多余注释和测试页面有时也能提供线索。

md5 collision

nctf{md5_collision_is_easy}

<?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弱类型,前人发现md5('QNKCDZO')='0e830400451993494058024219903391'md5('240610708')='0e462097431906509019562988736854',而因为使用松散比较的缘故,var_dump('0e830400451993494058024219903391'=='0e462097431906509019562988736854');值为真,因此访问 http://chinalover.sinaapp.com/web19/?a=240610708 即可。

1、在PHP中,@被称为错误控制操作符(error control operator),前置@符号的表达式产生的任何错误都将被忽略。

2、1992年发布的MD5算法是一种广泛使用的哈希算法,最初被设计用来作为加密算法,在被证明不安全后只能用来做数据完整性校验。MD5算法为消息产生128位摘要,常表示为32位十六进制串,由[0-9a-e]组成。

3、PHP的比较操作符主要有两类——松散比较和严格比较,于是就有了equal(==)和Identical(===)两种相等,主要区别在于前者会在比较前根据上下文对操作数进行类型转换(type juggling)而后者不会。这种juggle总的来说利大于弊,但确实容易玩脱

​ 此处只谈涉及字符串和数值的松散比较。根据本地实验结合官方文档,我们可以总结出来,这种类型转换的行为关键在于两点,一是判断字符串是否处于数字语境(in a numeric context),二是如何为处于数字语境的字符串取值。

​ 当操作符为==时,若有一个操作数为int/float或两个操作数is_numeric()均为真,则判断为处于数字语境;当操作符为数字操作符,如+-/*时,则判断为处于数字语境。(此段为实验支持下的个人猜测,未找到依据。)

​ 根据PHP官方文档 ,如果一个字符串被认定处于数字语境,那么它的取值取决于字符串的前面一部分,如果字符串以有效的数字型数据【Valid numeric data ,正则匹配表达为 \s(\d+\.?\d*|\.\d+)([eE]\d+)?\s,含有[eE]的视为科学计数法】开头,那么字符串取开头部分的数值,否则取0 。实验发现1e也被取值为1而不是0,这有点奇怪 :(

<?php
 $a1=1;         $b1="1";        $c1="1padding"; $a2=.1; $b2=".1"; $c2=".1padding"; $a3=1.; $b3="1."; $c3="1.padding"; $a4=1.1; $b4="1.1"; $c4="1.1padding"; $a5=1.e1; $b5="1.e1"; $c5="1.e1padding"; $a6=.1e1; $b6=".1e1"; $c6=".1e1padding"; $a7=1.1e1; $b7="1.1e1"; $c7="1.1e1padding"; $a8=1e1; $b8="1e1"; $c8="1e1padding"; var_dump($a8==$b8);//true var_dump($a8==$c8);//true var_dump($b8==$c8);//false var_dump($a8+$b8);//float(20) var_dump($a8+$c8);//float(20) var_dump($b8+$c8);//float(20) 

4、其他符合/0[eE]\d{30}/的MD5值:

string(strlen($var)) $var string(strlen(md5($var))) md5($var)
QNKCDZO 0e830400451993494058024219903391
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s1502113478a 0e861580163291561247404381396064
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020
s1091221200a 0e940624217856561557816327384675
s1885207154a 0e509367213418206700842008763514
s1836677006a 0e481036490867661113260034900752
s1184209335a 0e072485820392773389523109082030
s1665632922a 0e731198061491163073197128363787
s532378020a 0e220463095855511507588041205815
240610708 0e462097431906509019562988736854
签到2
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 尚未登录或口令错误 <form action="./index.php" method="post"> <p>输入框:<input type="password" value="" name="text1" maxlength="10"><br> 请输入口令:zhimakaimen <input type="submit" value="开门"> </form> </html>

nctf{follow_me_to_exploit}

maxlength="10" 而口令 zhimakaimen 有11位,数据在前端就会被截断掉。这时有两种做法,一种是在chrome/Firefox浏览器的开发者工具中将 maxlength="10" 字段修改为 maxlength="11" 或是更大的值;另一种是使用hackbar或burp直接向 http://teamxlc.sinaapp.com/web1/02298884f0724c04293b4d8c0178615e/index.php post text1=zhimakaimen 。客户端的行为都是可控的,所以熟悉HTML和JavaScript是重要的。

这题不是WEB

nctf{photo_can_also_hid3_msg}

下载图片并用winhex打开,在末尾发现字符串。一个简单的隐写。

层层递进

nctf{this_is_a_fl4g}

查看源代码,跟随链接,依次访问SO.html -> S0.html->SO.htm ->S0.htm->404.html ,在最后一个页面里的注释部分可找到flag。还是查看源代码,细心就会发现异常。

AAencode

nctf{javascript_aaencode}

aaencode是一种把js代码编码成日语颜文字的编码方式,使用Unicode编码查看,然后 在线解码 。工具作者颇有幽默感。

单身二十年

nctf{yougotit_script_now}

访问 http://chinalover.sinaapp.com/web8/search_key.php 会被重定向到 http://chinalover.sinaapp.com/web8/no_key_is_here_forever.php ,重定向会被浏览器自动处理,burp抓包则可见flag。

你从哪里来

你是从 google 来的吗?
传送门:题目地址

nctf{http_referer}

给请求加上referer: https://www.google.com即可。从https://github.com/otakekumi/NUPT_Challenges/blob/master/WEB/%E4%BD%A0%E4%BB%8E%E5%93%AA%E9%87%8C%E6%9D%A5/index.php 看到源代码可能有点问题。

<?php
$referer = $_SERVER['referer'];
if ($referer === "https://www.google.com/ " || $referer === "https://www.google.com"){ echo "nctf{http_referer}"; }else{ echo "are you from google?"; } ?>

第二行应该是$referer = $_SERVER['HTTP_REFERER'];

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;} echo CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==");

nctf{gzip_base64_hhhhhh}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值