南邮oj【web】

一 签到题

源码获取flag。

二 md5 collision

php弱类型匹配,百度0e开头的MD5,get获得flag。

三 签到2

字符串长度限制,f12修改输入即可获得flag。

四 这题不是WEB

这题真不是web,把图下下来用记事本打开获得flag。

五 层层递进

这道题很操蛋,作者把S O 0 o 所有的组合试了一遍吧!

看源码,拼命地切换so这样的目录【并不是同一个!】最后切到404.php,看到藏在script标签里的竖!起!来!的flag!凸(艹皿

六 AAencode

goole javascript aaencode,解码就行。或者放在控制台上弹窗。

七 单身二十年

重定向,直接抓包看就行了。(还有一中方法,在源码上访问/search_key.php,因为直接看源码不会执行重定向)

八 php decode

放在在线编译器上执行一下(要把eval改成echo,一开始还以为php版本不对。。)

九 文件包含

goole了一下文件包含漏洞用法1.包含目标机其他文件 2.远程包含本地木马 3.远程包含本地wget一个shell

但文件包含在ctf上怎么取flag?卡了很久,看了大佬的wp :以下url用filter读index.php的源码的base64,然后解码(不是太明白

http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

十 单身一百年也没用

这个flag不在源码,在源码访问index.php也没用,直接抓包看返回头有flag。

十一 download~!

这题做不了。

十二 COOKIE

抓包改包,考的是登录凭证COOKIE

十三 MYSQL

robot.txt发现提示,需要intval($_GET[id])==1024 但 $_GET[id]!=1024,开始想到弱匹配怎么都想不到(弱匹配怎么可能满足第二个条件?)就关注intval()函数,浮点形会被忽略小数点之后的数,所以a=1024.1就行。intval()函数还会忽略字母之后的值,所以a=1024e1也可行,第二个条件1024*10*1!=1024

十四 GBK Injection

宽字节注入,前段时间学习到只要吧%df也加到url中就可以用sqlmap进行注入,那就直接用sqlmap跑就好了

python sqlmap.py -u"http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df'",然后一步步跑出flag(跑了一个表才告诉我是第四个表。。)

十五 /x00

%00截断,百度了一下下ereg函数还真是可以%00截断,那截断再加字符串就行了(url中#要编码为%23否则会被识别为锚)

十六 bypass again

都说了又是弱类型,那就是吧,get两个函数之间用&分隔。

十七 变量覆盖

百度了一下:通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。

经常导致变量覆盖漏洞场景有:$$,extract(),parse_str(),import_request_variables()使用不当

有源码,这道题直接post两个变量为相同数值即可(不能一个一个post,因为后台并不会储存你的数据)

另外的难点的变量覆盖题目解析--链接

十八 PHP是世界上最好的语言

这个也做不了,但好像在哪做过??

十九 伪装者

伪造ip的话,加个X-Forwarded-For: 127.0.0.1就行。可这题试了很久也不行~

二十 Header

md,南邮的服务器也不是什么好东西。

二十一 上传绕过

这题想了很久,还以为是后台数组匹配,截断也想过,就是弄不出来。看了网上wp说的在十六进制截断提醒了我。

但网上说的都不明不白地。

首先提示就是两次的报错。第一次上传php:

第二次上传gif:

我们可以看出上传gif后缀通过了第一次上传php时的条件,又被第二个条件过滤了。

我们仔细看看第二个条件,那里出现了/uploads/... 在抓包时我们也能发现这个路径,自然地我们推测,第二个条件是不是匹配路径那里的后缀而不是filename那里的后缀?

通过实验得出结论,第二个条件为把filename拼入/uploads/路径后面再取后缀进行匹配.php。

那假如我们在/uploads/路径处携程.php后缀,然后在最后面进行截断,这样filename就接不进来了!filename就可以匹配条件一的.gif,匹配条件二时由于拼接被截断了,匹配的自然也就是我们自己设置的.php。

二十二 SQL注入1

以为是post注入,直接用sqlmap跑,结果跑出了上题的答案。。。

这题直接用user=admin然后闭合并用#注释调后面的就行了,并不是检验你注入库的内容。

二十三 pass check

这道题学到了:post数据并不是在网页数据包下面随便加个数据就可以的。

一开始抓包一直在数据包下面接pass=,总是提到paa未指定~后来到hackbar上post了一下,发现post的数据包还是多了很多头的

这道题是利用strcmp报错返回0的特性,传入pass为数组达到报错的目的。

二十四 起名字真难

这道题源码开始一直都看不懂,哪个条件是说输入要==54975581388了??看了半天才发现后面的return是==,显示问题一直看成一个等号。。。。cao!

还是不明白,比较数字怎么能做到没有数字,还一定要输入字符串?看了wp才知道这个54975581388的十六进制是0xccccccccc,没有数字。。。。脑洞不够打啊啊啊

二十五 密码重置

抓包,改三个地方,两个为base64后的ctfuser改成base64后的admin,一个为ctfuser改成admin。

二十六 php反序列化

做不了

二十七 SQL Injection

这次不抓包了..乖乖绕过...源码出后台。本题中转义的引号并没有什么意思,只是给你提醒一下

dalao所言:遇到带有分号的sql查找,第一个想到就是逃脱单引号。可以生成一个单引号,可以省略一个单引号。

这题没有屏蔽反斜杠,就可以用反斜杠来省略一个单引号

http://chinalover.sinaapp.com/web15/index.php?username=\&password=%20or%201%23

注意:此处的注释符#仍然要用url编码,否则会被当成锚。

二十八 综合题

打开就是一个jsfuck,decode之后是一个目录,打开说tip在脑袋。

查看返回头发现提示 history of bash,百度了一下都是linux命令,历史记录什么的,然后就没想法了。

通过大佬wp得知:在Unix中 , 会生成一个 .bash_history 的文件 , 记录了用户的操作历史   

访问一下发现一个.zip文件,下载下来得flag

二十九 SQL注入2

这道题这种代码应该是没办法在原语句上把密码注释去了。想到老方法,单引号过滤然后再查(题目也提示了union联合查询)

可是又突然想到......这样直接丢到sqlmap不就行啦~,丢到sqlmap。。是个时间忙注跑了挺久的。。然后还tm又是那个库!

最后user=' union select md5(1)#&pass=1 ,由于第一个select执行失败,返回第二个md5(1),再匹配第二个源码中md5的1.

三十 综合题2

首先,这道题的后台是挂了的,主要看思路

这道题真的挺难的,一开始以为是改User-Agent,一直找不到该改什么;然后发现?file=sm.txt可以读取几个网站的源码,但看了这些个源码也没什么思路。

dalao思路:第一步:通过查询sql注入拿账号密码。第二步:找到后台页面登录传shell连shell找flag。

首先在文件回传的about.php中有后台地址;passencode.php中有一个加密规则;在上传结果页面so.php有waf过滤规则(可以用sqlmap的tamper或者写个脚本)(这里挂了)

注入得出账号admin,密码1020117099010701140117011001160117(根据加密规则,三个数字一个0,三个数字为ascii,0为空格)解密出来密码为fuckruntu。

进入后台得到一个已经传上去的shell(xlcteam.php),然后可以看源码,然后连上去就行了(post:www=preg_replace&wtf=print_r(scandir('.')))(具体连接原理乌云文章已经看不到了。)

最后flag的地址:

http://cms.nuptzj.cn/about.php?file=%E6%81%AD%E5%96%9C%E4%BD%A0%E8%8E%B7%E5%BE%97flag2.txt

三十一 密码重置2

查看源码得管理员邮箱,然后还有个提示是有.swp遗留,可是我怎么也找不到~~

后来才知道不是index.php的.swp,而是登录后界面login的(太粗心了!!)

访问swp格式:/.submit.php.swp,得到token的判断条件,很简单嘛十个0,得flag。

三十二 file_get_contents

涉及到一个知识点 php伪协议实现命令执行

理解:由于include是读流的,后台只要include了某个文件,那么前台有文件包含漏洞时,就可以用php://filter等php伪协议对该文件进行读,写等操作。

这题因为file是一个文件而不是字符串,不能直接file=meizijiu,file_get_contents()函数读不到。而是需要用file=php://input,然后在post数据中写入meizijiu。

三十三 变量覆盖

前面说过几种情况要注意变量覆盖,这里刚好符合$$key=$value,直接在url中传?name=meizijiu233就行了。

三十四 HateIT

太难,再看

三十五 Anonymous

还是太菜了,wp也看不懂~~

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(CTF,Writeup)