您现在的位置是:首页 > 文章详情

CTF入门篇writeup——D0g3 Games

日期:2018-10-30点击:496

今天在网上找到一个CTF的小游戏,题目我做了几道感觉挺简单,很适合入门,之前了解CTF,参加各种杯或者是看各种比赛题的writeup,感觉太难了,想到这我还是决定从点滴做起,记录一下学习过程,同时也想做一套CTF从入门到精通的教程。

网址:http://ctf.d0g3.cn/

img_d733234fa541208eba6d3b61b75214a1.png
image.png

下面就简单记录下每道题的解题过程,希望能一点一点积累知识点

WEB
1. _GET
img_10bb57600fa07611b230d4f8c105f5fc.png
image.png

2. _POST
img_4681695ad4cd6a05cc820eab02e93479.png
image.png
  • 题目分析:同理同上,只不过通过POST方式传参。
  • 解题方法:
img_07276584e46122e0e2a27f0a558b08f9.png
image.png

3. 突破物理极限
img_51a9c9b6bf25185a5359f0575c3a11f4.png
image.png
  • 题目分析:根据提示输入12345提交,但是由于限制只能输入123,因此一看就知道要绕过限制
  • 解题方法:方法不唯一可以抓包修改,也可以F12修改前端代码。
img_c3728f7bcb59b308b57980fdc587cec4.png
image.png
img_d83fc1732b6934033e1473327bca7e9b.png
image.png

4. serialize
img_2a8283656c2429047661fcc4cc06c210.png
image.png
  • 题目分析:题目还是很简单的,通过GET传参字符串str,将其传入的字符串通过unserialize()反序列化,使其反序列化结果值等于$KEY,于是解题方法就是传入事先通过serialize()函数序列化后的字符串。
  • 解题过程:
    先写个简单序列化字符串的脚本
<?php $key = $_GET['key']; $str = serialize($key); echo "$str"; ?> 

然后运行脚本,可以得到反序列化字符串脚本

img_e69c67b2982fa8fde5a1a7e17e32fba9.png
image.png

最后我们解题

img_966f21f436768cf9e010449cfaf1bef8.png
image.png

5. xss1
img_18a30bbaf2adbf338125c1fa6ff99e4f.png
image.png
img_72a606c9965822dc7e061cd04093a4e6.png
image.png
  • 题目分析:这道题是考察xss漏洞的,根据提示弹窗即可,想必也是讲xsspayload作为参数值传入,那就随便输入值提交后先查看看页面源代码吧。
img_a0da83c28c99c0ebc23d9bdf2c4c2e99.png
image.png
  • 解题方法:根据题目分析,构造payload传入到参数,很简单了。通过测试发现两个输出点,,第一个输出点实体编码了,因此根据第二个输出点构造payload。
payload: "><script>alert(1)</script> 
img_5da02be0566105f09fe16e4258990b13.png
image.png

哇,弹出俩QQ,加好友索要flag,666,怎么不弄个公众号自动获取呢?

有趣的聊天截图,哈哈

img_47ae0d4e1bd2906a77260c91fe372d94.png

6. htmlspecialchars
img_03c018d7ddf5bd72eab66d3c8e6755c8.png
image.png
img_8766746d6ceeced0d8eb53b17541532c.png
image.png
  • 题目分析:哎,真麻烦,目标弹窗加qq,通过测试发现,后台使用htmlspecialchars<>进行了HTML实体编码
  • 解题方法:标签内构造XSSpayload
payload: ' onmouseover=alert(1)// 
img_e454f9abe7bd8de6d0f64fecf5f36c0c.png
image.png
img_b5065c4bee3153ab797f4e2c2fb41d5a.png
image.png

7. 机器人
img_417587c77bcdd0d5bd1be992e95747ec.png
image.png
img_88eb0291f881d0f58ea9b084952d9d39.png
image.png
  • 题目分析:这道题凭直觉考察的是robots.txt,简单解释一下就是,为了防止搜索引擎的爬虫,通常在网站目录下会有一个robots.txt文件,来告诉搜索引擎哪些目录允许爬虫。那就试试呗。
  • 解题方法:访问robots.txt文件。果然有收获,发现一个flag.txt的文件,然后顺利访问拿到flag。
img_f00ae56c5342091ba50164a88f45b725.png
image.png
img_72acbd8ef2fa935f1cd658ee1cbbd7fd.png
image.png

8. 爆破拿flag
img_cb639ca74e43c9a71e8240f3d1629cee.png
image.png
img_a55e830df9da80bc5801538b8e532cbb.png
image.png
  • 题目分析:也是很简单的一道题,5位数的密码,废话不多说,抓包爆破即可
  • 解题方法:
img_1161ab65c18052d96683bc9216cd756c.png
image.png

耐心等待......

img_efede016a5a23ea50854b9e0ee9d1fe6.png
image.png

密码:12568


9. 数字比较
  • 题目地址:题目给的地址不能用,但是给了php文件,只能在自己环境里搭建咯。
img_25963384acf8761f9f932aef94e5c872.png
image.png
<?php error_reporting(0); function noother_says_correct($temp) { $flag = "xxxxx"; $one = ord('1'); //ord — 返回字符的 ASCII 码值 $nine = ord('9'); //ord — 返回字符的 ASCII 码值 $number = '3735929050'; // Check all the input characters! for ($i = 0; $i < strlen($number); $i++) { // Disallow all the digits! $digit = ord($temp{$i}); if ( ($digit >= $one) && ($digit <= $nine) ) { // Aha, digit not allowed! return "flase"; } } if($number == $temp) return $flag; } $temp = $_GET['password']; echo noother_says_correct($temp); ?> 
  • 题目分析:这道题是数字比较,但是又不允许输入1到9数字,因此可以使用16进制来进行比较,即传入的参数值为3735929050的16六进制deadc0da,传入时候记得前面加0x
  • 解题方法:
    payload: ?password=0xdeadc0da

11. 欢迎加入道格小组(伪造数据包来源来源)
img_0197e0a6d1255c64eb5b49c1afda0bce.png
image.png

抓取数据包

img_15d5e0db7499d7f72318d81b2b307a9b.png
image.png
  • 题目分析:这么明显的提示,就是伪造IP头部了,又加之提示信息不是从d0g3.cn来的你还想要flag?,很容易拿到flag。
  • 解题方法:伪造数据包头
Referer: d0g3.cn 
img_edb6b19cde06369ad243a23d788b37b0.png
image.png

12. Firefox
img_80553d52a767b641c983533c34a188d1.png
image.png
img_e7ad11b322c5ecd5fc7d486b79070ab5.png
image.png
img_b6bb43fedf84b5180a9a5e8f2f22992b.png
12
  • 题目分析:看起来也很简单,就是伪造浏览器版本信息吧。
  • 解题方法:修改浏览器版本信息为Mozilla/11.0,开始简单改个数字11,结果不行,后来仔细看提示,说只用构造为Mozilla/11.0,不用构造操作系统和协议。
img_647d01c7bbac1f4c7c34d45b5de93981.png
image.png

13. IP伪造
img_faa9df2b24ed718deae505e81ce0a49c.png
image.png
img_0dcaea827efdd6ef5d7f1fc561b3a28a.png
image.png
  • 题目分析:很简单了,伪造IP
Client-Ip: 127.0.0.1 X-Forwarded-For: 127.0.0.1 Host: 127.0.0.1 
  • 解题方法:抓取数据包修改数据包IP地址
img_0c62b219604da85c0c954d5faef1d152.png
image.png


15. Match it!(匹配它)
img_b6f86f2e35822b2f3b40755663ac3a16.png
image.png
<?php include 'f1agi3hEre.php'; if ("POST" == $_SERVER['REQUEST_METHOD']) { $password = $_POST['password']; if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password)) { echo 'Wrong Format'; exit; } while (TRUE) { $reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; if (6 > preg_match_all($reg, $password, $arr)) break; $c = 0; $ps = array('punct', 'digit', 'upper', 'lower'); foreach ($ps as $pt) { if (preg_match("/[[:$pt:]]+/", $password)) $c += 1; } if ($c < 3) break; if ("42" == $password) echo $flag; else echo 'Wrong password'; exit; } } highlight_file(__FILE__); ?> 
  • 题目分析:一步一步代码审计吧。
0 >= preg_match('/^[[:graph:]]{12,}$/', $password) //输入的内容必须为12个以上包括12,不包括空格和tab键 $reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; //[[:punct:]] 任何标点符号, [[:digit:]] 任何数字, [[:upper:]] 任何大写字母 , [[:lower:]] 任何小写字母 if (6 > preg_match_all($reg, $password, $arr)) //匹配到的次数要大于6次才能绕过。连续的大写或小写字母都只能算是一次。 $ps = array('punct', 'digit', 'upper', 'lower'); foreach ($ps as $pt) { if (preg_match("/[[:$pt:]]+/", $password)) $c += 1; } if ($c < 3) break; //这个好理解,必须要有大小写字母,数字,字符内容三种与三种以上 if ("42" == $password) echo $flag; //最后输入的值还要和42相等。 
  • 解题方法:根据以上匹配规则构造出满足需求的payload
    可以构造420.000000e-1 //0可以随意添加不影响数值,但是要超过12个字符
img_be3b072320fcf3023de742d2bdd72b54.png
image.png

太菜了,其他的有点思路但暂时没搞定。

原文链接:https://yq.aliyun.com/articles/666668
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章