XCTF攻防世界web进阶篇题目(7个)

1 想想初始页面是哪个


打开后是个这样的web,初始界面考虑web目录下的index文件,访问220.249.52.133:39588/index.php,网页还会指向1.php,F12中查看响应头能看到flag,而且可以看到location参数是1.php(服务器通过响应头中的location参数告诉浏览器跳转到什么地方)。

FLAG: flag{very_baby_web}


(最开始的时候用dirsearch扫描了一下网站目录,里面有个index.php,不过后面这个箭头指向1.php也许就代表了location指向1.php?)



2 Training-WWW-Robots

打开之后是关于robots.txt的介绍,直接访问http://220.249.52.133:48442/robots.txt

可以看到有个f10g.php文件,访问它就能得到flag


(robots.txt放在web根目录下,里面规定了哪些内容不能被爬取,但是可以直接访问。。。)

3 unserialize3


考查了php反序列化的内容。一个类xctf,一个公共变量flag,还有个wakeup方法。关于php序列化的问题,之前没怎么接触过php,百度之后知道类中可以有两个方法,__sleep和__wakeup,称之为php的“魔术方法”。在序列化前会先调用__sleep方法,知名哪些变量是需要进行序列化的,像这种没有__sleep方法或者未指明的,意思是所有变量都需要进行序列化;反序列化之前先调用__wakeup方法,通常会进行数据库连接等一些初始化操作,准备好反序列化需要的资源。

题目中如果调用了__wakeup方法会返回bad request,所以反序列化的时候需要绕过__wakeup方法。

找个在线php工具,加两行代码。


运行结果:O:4:"xctf":1:{s:4:"flag";s:3:"111";}

具体含义是

类型是object:名字长度是4:名字是xctf:包含1个变量 { 类型是string,名字长度是4,变量名是flag ; 类型是string,名字长度是3,变量是111}

这里有个php反序列化漏洞,如果包含变量个数那里,比实际包含的变量个数多的话,反序列化时__wakeup函数就不会被执行,所以把代表变量个数的1改成比1大的数即可。


4 ics-06

云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹

看到题目还查了查ics是什么,但是没查到。打开页面是个监控系统,左边有一列导航,只有报表中心能点进来,别的点了都没反应。

报表中心点进来之后长这样,可以输日期范围,试了试发现没有反应,F12也没有发现问题。但是url那里传递了一个参数,id=1.

看了wp之后才知道这种情况需要爆破。。。

在做web新手题中有一个题也需要进行爆破,当时学习了怎么用brup进行操作。开代理,然后对访问网页进行拦截,send to inturder。之前是直接导入了简单字典,这里因为是id,只需要导入一定范围的数字即可。payload type这里选择numbers,可以设置number range,不用再自己进行构造了。设置好范围进行start attack的时候遇到了一个问题,会报错,显示Payload set 1: Invalid number settings,我们设置了1w个数,但是payload count那里还是显示1.这里需要在number format那里,先点一下hex,再点decimal,这是上面payload count那里就变成10000了,再start attack就没有问题了。


爆破完之后,id=2333时长度不一样,查看响应发现flag:cyberpeace{ad66b779c12e535de91a2102a3eac2da}。

(还是要多积累经验,不然看到传参id=1也不会想到要爆破)

5 PHP2

这道题目没有给题干,网页点进去只有一行字,意思是“你能不能证明此页面真实存在”。


dirsearch扫描了一下,目录下面只有一个index.php,F12也看不出问题,做到这我就又不会了。。。

看了wp,要在url的index.php后面加上一个s,即访问http://220.249.52.133:58465/index.phps,可以看到php的源码。在实际应用中这是非常不安全的,正常的网站看不到php源码。

下面就是php源码。网页可以接受一个get请求,参数id如果是“admin”,会显示“not allow”。如果经过urldecode后是“admin”,会允许访问。这里需要注意个问题,用url进行传参时,浏览器会先对url进行一次解码,传参进来之后php代码又会进行一次解码,总共解码了两次。也就是说传参的时候,参数需要进行两次urlencode。


关于如何转码,brup里提供了工具


最下面那串长的即为admin经过两次urlencode的结果。访问http://220.249.52.133:46317/?id=%2561%2564%256d%2569%256e就能得到flag。


flag:cyberpeace{ace9d755225bfdb5a009627bc344f981}

6 NewsCenter

打开之后是个新闻页面


有一个搜索框,考察了sql注入。先用brup抓一个包,将请求头保存到txt文件中


然后用sqlmap进行爆破,命令 sqlmap -r 1.txt --dbs,看看有哪些数据库。


扫出来两个数据库,看看数据库中的内容是什么,发现news数据库中有想要的信息,命令 sqlmap -r 1.txt -D news --dump,看到结果。


(笔记写的比较潦草。有大佬直接手动注入的,但是自己sql忘得也差不多了,直接用了sqlmap工具,这里用了-r命令,或者直接--data传递参数也是可以的)

7 NaNNaNNaNNaN-Batman

只有一个附件压缩包,解压得到一个文件web100,没有后缀名,先用txt打开看下发现是有乱码的js


后缀名改成html,打开只有一个输入框


将上面源码最后面的eval改成alter,再次打开,让网页弹出源码,浏览器处理之后乱码也没有了


整理代码之后。。。(https://beautifier.io可以在线整理代码)


有一个函数,会对输入值进行正则匹配,长度为16,且包含‘be0f23’, '233ac', 'e98aa', 'c7be9'四段字符串,且指明起始是‘be0f23’,末尾是‘e98aa’,构造字符串‘be0f233ac7be98aa’,输入到输入框中即可。或者直接在浏览器控制台中执行if语句判定之后的那段代码,也能得到结果。


(js代码最后面改alter查看源码)

你可能感兴趣的:(XCTF攻防世界web进阶篇题目(7个))