南京邮电大学网络攻防训练平台
前言
刚刚接触CTF不久,还是决定先从web开始,于是就开始了自己的南邮刷题之旅,谨以此记录自己的学习过程,总结解题方法,勉励自己坚持学习!
签到题
题目链接:http://chinalover.sinaapp.com/web1/
解题思路
单个页面查看源代码。
解题方法
flag
nctf{flag_admiaanaaaaaaaaaaa}
md5 collision
题目链接:http://chinalover.sinaapp.com/web19/
解题思路
PHP代码阅读:
1 | <?php |
核心代码:$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,而zhimakaimen
11个字符,于是果断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 | <?php |
解题方法
代码整体意思不难理解,遍历字符串中的每一个字母,然后使用Base64+Gzinflate加密,最后转换为 ASCII 码的值 - 1,再转换为字符串。所以尝试运行一下代码,发现报错,这里报错是因eval函数的问题。
eval 函数:
- eval() 函数把字符串按照 PHP 代码来执行
- 该字符串必须是合法的 PHP 代码,且必须以分号结尾
- 如果没有在代码字符串中调用 return 语句,则返回 NULL
- 如果代码中存在解析错误,则 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}
COOKIE
题目链接: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 | <?php |
说明要向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 | if (isset ($_GET['nctf'])) { |
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 | if (isset($_GET['a']) and isset($_GET['b'])) |
这一题考察了 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 | <?php |
关于变量覆盖请看我的另一篇博文: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}
Header
题目链接:http://way.nuptzj.cn/web5/
解题思路
解题方法
flag
上传绕过
题目链接:http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html
解题思路
- 上传一张1.jpg文件,出现如下:
1
2
3
4
5Array ( [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的文件才行啊! - 上传一个1.php文件,出现如下:
1
2Array ( [0] => .php [1] => php )
不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件
解题方法
flag
nctf{welcome_to_hacks_world}
SQL注入1
题目链接:http://chinalover.sinaapp.com/index.php
解题思路
源代码:
1 | <?php |
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 | <?php |
根据代码,pass
和pass1
经过strcmp
比较之后结果为0.
解题方法
strcmp(array,string)=null=0
构造payload:?pass[]=1
flag
nctf{strcmp_is_n0t_3afe}
起名字真难
题目链接:http://chinalover.sinaapp.com/web12/index.php
解题思路
源代码:
1 | <?php |
传进去的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%3D
url解密之后Y3RmdXNlcg==
,在经过bash64解密之后为ctfuser
。
所有admin
bash64加密YWRtaW4=
,再url加密%59%57%52%74%61%57%34%3d
构造payload:?user1=YWRtaW4=
。
解题方法
php 反序列化
题目链接:http://115.28.150.176/php1/index.php
解题思路
源代码:
1 | <?php |
这段代码的意思就是,一个字符串经过反序列化之后,enter
和secret
相等。
解题方法
构造poc:
1 | <?php |
得到payload:O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}-+
flag
nctf{serialize_and_unserialize}