ctf题目总结

ctf题目

Posted by mr_king on July 20, 2020

1攻防世界web题目:mfw

1.打开题目,F12查看页面源代码 发现提示,参数可以等于flag,等于之后空白,什么都没有,尝试去掉注释,也没有什么发现; 在about中发现有Git,百度了一下,有git漏洞 git漏洞

百度githack脚本,下载了源码 在template页面中未找到有用信息 在index.php中发现问题所在 assert函数何以闭合绕过,strpos函数也可以闭合绕过;

构造pyload:?page=templates/about.php,’11’)===false and system(‘cat template/flag.php’) and strpopst(‘$file’,’.. 获取flag;

2攻防世界 NaNNaNNaNNaN-Batman

下载题目附件,notepad打开,发现JavaScript源码,但有乱码; 将其中的eval改为alert,变为弹窗显示,没有乱码,赋值源码;

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"><buttononclick=$()>Ok</button>');
delete _

有两种解题方式: 1.满足正则表达式的所有if条件 构造payload ^表示在最开头 $表示在末尾 payload:be0f233ac7be98aa 提交,拿到flag; 或者将去电if条件的源代码,放在控制台跑一下,拿到flag;

3攻防世界php2

打开题目,看到 Can you anthenticate to this website? (你能浏览这个网站吗?),一脸闷,不知道怎么弄,用御剑也没跑出什么来,于是看了一下writeup,发现是phps源码泄露 查看源码,发现get传参, 第一id不能等于admin 第二经过urlodecode()函数解码要等于admin; 浏览器会在地址栏中解码一次,所以二次编码,绕过第一个条件,满足第二个条件 构造payload:?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 获得flag;

4攻防世界 unserialize3

打开题目,发现一堆源代码, 其中有一个函数__wakeup()十分特殊;

__wakeup()是用在反序列化操作中。

__wakeup()函数漏洞具体说明 http://blog.sina.com.cn/s/blog_15ebf299a0102xnug.html

此题的提示name需要绕过weakup()函数 将代码copy到本地,用PHP serialize() 函数生成一个序列化string,使其中代表类的属性的数大于它属性数值,可以绕过weakup()的检测,获得flag;

5.实验吧 头有点大

打开题目,发现提示 与响应头有关,抓包,再看英语提示 你没有访问这个服务器的权限。 请确保您已经安装了.net framework 9.9! 请确保您是在英格兰地区和浏览本网站与Internet Explorer

需要安装.net9.9,百度,发现这个响应头可以更改 对比发现,只需要在响应头的括号中添加.NET CLR 9.9就可以; 英格兰地区的标识en-gb,加在language那栏就可以获得flag; 他说需要IE浏览器,可我试了改不改都可以;

6.实验吧 PHP大法

题目提示备份文件,打开题目发现Can you authenticate to this website? index.php.txt 在地址栏输入index.php.txt 发现源码,代码审计 提示id要等于hackerDJ 构造两次urlencode编码;解决 payload:id=%25%36%38%25%36%31%25%36%33%25%36%62%25%36%35%25%37%32%25%34%34%25%34%61

6.what a fuck!这是什么鬼东西?

打开题目,jsfuck编码,放控制台跑一下,获取flag; JSFuck是一种基于JavaScript原子部分的深奥而有教育意义的编程风格。它只使用6个不同的字符来编写和执行代码。 它不依赖于浏览器,所以您甚至可以在Node.js上运行它。

7.程序逻辑问题

打开题目,发现需要用到账号密码登陆,让人很纳闷,难道要爆破一下,还是sql注入? 上个题目.txt,发现源代码; 发现需要让密码==user的密码,构造 user=’ union select md5(1),将row结果传入 获得flag

8.NSCTF web200

打开题目,提示密文?? 发现是一个自定义的加密方式,需要我们解密 开始理解加密方式, 先将字符串每个ASCii值减一,反转, 再str_rot13(); 再strrev(); 再base64_encode();

解密,反着走,解码 先base64,用base64_decode()函数; 接着strrev()反转字符串 接着str_rot13()解密 在加一,在反转; 获得flag;

Forms

打开题目,提示PIN码,百度一波PIN码,手机卡的一种密码,打开题目需要提交PIN码,抓包试试; 发现这个hwosource=0很可疑,随便改个数值, 发现源码,发现pin=那串数字就可以了,获得flag;

实验吧 FALSE

打开题目,发现源代码

<?php
if (isset($_GET['name']) and isset($_GET['password'])) {
    if ($_GET['name'] == $_GET['password'])
        echo '<p>Your password can not be your name!</p>';
    else if (sha1($_GET['name']) === sha1($_GET['password']))
      die('Flag: '.$flag);
    else
        echo '<p>Invalid password.</p>';
}
else{
	echo '<p>Login first!</p>'
?>

发现name要等于password,但不能直接相等,需要sha1()之后相等 百度sha1()函数 sha1() 函数计算字符串的 SHA-1 散列。

sha1() 函数使用美国 Secure Hash 算法 1。

来自 RFC 3174 的解释 - 美国 Secure Hash 算法 1:SHA-1 产生一个名为报文摘要的 160 位的输出。报文摘要可以被输入到一个可生成或验证报文签名的签名算法。对报文摘要进行签名,而不是对报文进行签名,这样可以提高进程效率,因为报文摘要的大小通常比报文要小很多。数字签名的验证者必须像数字签名的创建者一样,使用相同的散列算法。

sha1()函数和MD5()函数一样可以用数组绕过,构造payload:name[]&password=1,获得flag;