题目地址:
http://www.shiyanbar.com/ctf/56
解题链接:

http://ctf5.shiyanbar.com/DUTCTF/1.html
题目描述:
打开链接如下图所示,确实是什么鬼东西。
题目解析:
1.它们实在是Jother编码,它是一种利用于Javascript措辞中利用少量字符布局精简的匿名函数方法对付字符串进行的编码办法,个中少量字符包括"[","]","{","}","(",")","!","+"。这些字符就能完成对任意字符串的编码,实质上是一种Javascript的编码,其优点是代码字符就那么几个,比较好记,缺陷是编码极其冗长和繁芜。
2.这种编码一样平常现在只会涌如今CTF比赛中,实际开拓中用的到就很少了。
2.打开Chrome浏览器,按F12键选择掌握台Console,将代码复制过去回车即可得到flag值。
3.得到该题的密码:Ihatejs。
精确答案:Ihatejs
参考链接:
https://www.writeup.top/391.html
二.隐写术之水果
隐写术是一门关于信息隐蔽的技巧与科学,所谓信息隐蔽指的是不让除预期的吸收者之外的任何人知晓信息的通报事宜或者信息的内容。隐写术的英文叫做Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganographia,该书书名源于希腊语,意为“隐秘书写”。在CTF题目中,图片隐写题属于杂项的一部分,题目较为大略。
题目地址:
http://www.shiyanbar.com/ctf/1903
解题链接:
http://ctf5.shiyanbar.com/stega/pic.png
题目描述:
打开网页如下图所示,显示一张水果的图片 ,flag就隐蔽在图片中。作者第一反应是查看源代码,哈哈~体谅我这个小白第一次学习。
题目解析:
1.将图片另存为本地。
2.从CSDN下载Stegsolve工具,它是用于图像解析的工具,然后导入本地图片,按方向键右键不断切换,直到涌现下图的二维码。
如下图所示:
3.利用手机扫描二维码,得到一串数字,我们根据数值可以剖析,这是十进制的ASCII码。
4.将数字转换为ASCII,45对应“-”、46对应“.”、32对应空格。
45 46 45 46 32 -.-. 45 32 - 46 46 45 46 32 ..-. 46 45 46 46 32 .-.. 46 46 46 32 ... 45 46 46 46 32 -... 46 46 45 45 46 45 32 ..--.- 45 46 46 46 32 -... 46 46 46 32 ... 4645464632.-..
5.它们便是传说中的摩斯密码。根据下面的对照表,其结果为:CTFLSB_BSL
摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的旗子暗记代码,通过不同的排列顺序来表达不同的英笔墨母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或者艾尔菲德·维尔。摩尔斯电码是一种早期的数字化通信形式,但是它不同于当代只利用零和一两种状态的二进制代码,它的代码包括五种:点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之间中等的停顿以及句子之间长的停顿。
精确答案:CTF{lsb_bsl}
参考链接:
https://blog.csdn.net/miko2018/article/details/81627130
https://www.cnblogs.com/nul1/p/9594387.html
https://blog.csdn.net/u012486730/article/details/8201670
三.隐写术之小苹果
题目事理和上一题一样。
题目地址:
http://www.shiyanbar.com/ctf/1928
解题链接:
http://ctf5.shiyanbar.com/stega/apple.png
题目描述:
题目打开也是一张图片,中国结。
题目解析:
1.下载图片至本地并打开,得到如下二维码:
2.二维码包含如下数字
\u7f8a\u7531\u5927\u4e95\u592b\u5927\u4eba\u738b\u4e2d\u5de5
这是unicode编码的办法,让我们在干系网站(搜索“unicode解码即可”)中进行解码,得到中文“羊由大井夫大人王中工”,这是一种从未见过的加密办法。
3.通过百度理解到该加密为当铺密码,曾在CTF题目中涌现过,我们按照编码规则进行解码,得到数字:9158753624。
当铺密码是一种将中文和数字进行转化的密码,算法相称大略:当前汉字有多少笔画出头,便是转化成数字几。“羊由大井夫大人王中工”对应的数字为“9158753624”
4.再转头剖析图片可知,里面包含了一个压缩文件,我们通过修正扩展名为.ZIP并解压,得到了apple.mp3的音频文件。
5.利用mp3隐写术工具MP3Stego的Decode.exe对其进行解码,密码便是我们刚刚得到的那串数字9158753624。解码后得到字串Q1RGe3hpYW9fcGluZ19ndW99。
6.通过考试测验,在base64解码中得到了精确的结果:CTF{xiao_ping_guo}。
精确答案:CTF{xiao_ping_guo}
四.WEB之天网管理系统
题目地址:
http://www.shiyanbar.com/ctf/1810
解题链接:
http://ctf5.shiyanbar.com/10/web1/index.php
题目描述:
题目显示如下图所示,须要输入精确的用户名和密码获取flag。
考点:PHP弱类型
题目解析:
1.查看网页源代码如下所示,把稳注释的提示。
<!--$test=$_GET[\'username\'];$test=md5($test);if($test==\'0\')-->
2.须要用户名传入一个字符串,并且它经由md5加密后要即是0。把稳,PHP某些情形会把类数值数据(如含有数字的字符串等)转换成数值处理。在利用“= =” 运算符对两个字符串进行比较时,PHP会把类数值的字符串转换为数值进行比较,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。比如: ‘3’ == \'3ascasd’结果为true。
因此只要找到一个字串加密后第一个字符为0即可,这里供应几个:240610708、aabg7XSs
3.用户名输入“aabg7XSs”,此时返回的提示信息如下图所示。
http://ctf5.shiyanbar.com/10/web1/user.php?fame=hjkleffifer
4.访问该页面显示内容如下图所示:
函数serialize()是对输入的数据进行序列化转换,把变量和它们的值编码成文本形式。
函数unserialize()是还原已经序列化的工具,对单一的已序列化的变量进行操作,将其转换回反序列化 PHP 的值。
$unserialize_str = $_POST[\'password\'];$data_unserialize = unserialize($unserialize_str);if($data_unserialize[\'user\'] == \'???\' && $data_unserialize[\'pass\']==\'???\') { print_r($flag);}
这段代码是将Post提交的密码值经由unserialize()函数 反序列化处理,得到一个数组,哀求数组里的user和pass都即是值“???”,此时输出flag。那么,这个“???”又是什么内容呢?
5.此时“成也布尔,败也布尔”提醒我们。bool类型的true追随意任性字符串可以弱类型相等。因此我们可以布局bool类型的序列化数据 ,无论比较的值是什么,结果都为true。(a代表array,s代表string,b代表bool,而数字代表个数/长度)
<?phperror_reporting(0);$test=\'\';$test=array("user"=>1,"pass"=>1);echo var_dump($test);echo var_dump(serialize($test));$test1=\'\';$test1=array("user"=>true,"pass"=>true);echo var_dump($test1);echo var_dump(serialize($test1));?>
找个在线PHP网站进行测试,输出如下图所示:string(36) “a:2:{s:4:“user”;i:1;s:4:“pass”;i:1;}”
6.布局password值为:a:2:{s:4:“user”;b:1;s:4:“pass”;b:1;},输出末了的flag。
精确结果:ctf{dwduwkhduw5465}
参考链接:
https://blog.csdn.net/dongyanwen6036/article/details/77650921
https://www.cnblogs.com/ssooking/p/5877086.html
五.WEB之忘却密码
题目地址:
http://www.shiyanbar.com/ctf/1808
解题链接:
http://ctf5.shiyanbar.com/10/upload/step1.php
题目描述:
题目显示如下图所示,须要输入精确的邮箱找回密码。
考点:vim备份文件透露
题目解析:
1.首先我们随便输入一个密码,如“123456”看返回结果。
返回如下图所示,把稳“step2.php”页面。
2.查看源代码,创造提醒用户名为admin,输入邮箱为“admin@simplexue.com”。
输入该邮箱创造Scripts提醒变成了“邮箱已送到管理员邮箱了,你看不到”,真是逗~
3.这里有个细节,Step2.php页面跳转了一下,然后又跳转回step1,解释step2里面有猫腻!
页面跳转这么快,那我们该怎么去看这个页面呢?这时候要用到一个名叫Burp Suite的神器,抓包拦截。
Step2.php显示急速跳转:
方法一:在Target查看目录树创造有个“submit.php”文件。
方法二:利用Repeater,查看相应Response。
将GET方法的网址修正为step2.php,然后相应表单提交为“submit.php”。
4.赶紧查看该网页,结果提醒“you are not an admin”,有权限访问该页面,但不是管理员不透露信息。故意思~
5.再回到最初step1.php的源代码,这里有个非常主要的提示信息——编辑器采取的是VIM。
VIM备份文件(参考Sp4rkW大神) 默认情形下利用VIM编程,在修正文件后系统会自动天生一个带 ~ 的备份文件,某些情形下可以对其下载进行查看。例如,index.php普遍意义上的首页,它的备份文件则为index.php~。VIM中的swp即swap文件,在编辑文件时产生,它是隐蔽文件,如果原文件名是submit,则它的临时文件“.submit.swp”。如果文件正常退出,则此文件自动删除。
这个题目叫备份文件透露,我们知道这个VIM编辑器可以存放临时文件,而临时文件会存放信息,咱们可以考试测验一下访问临时文件,格式如下:
ctf5.shiyanbar.com/10/upload/.submit.php.swp
PS:由于vim备份文件是隐蔽文件,以是须要加上一个点“.submit.php.swp”。
6.考试测验打开.submit.php.swp文件。
重点是后面的if判断语句,这个条件必须要知足token的长度必须即是10,并且token的值为0,咱们可以布局十个0试试。
........这一行是省略的代码........if(!empty($token)&&!empty($emailAddress)){ if(strlen($token)!=10) die(\'fail\'); if($token!=\'0\') die(\'fail\'); $sql = "SELECT count() as num from `user` where token=\'$token\' AND email=\'$emailAddress\'"; $r = mysql_query($sql) or die(\'db error\'); $r = mysql_fetch_assoc($r); $r = $r[\'num\']; if($r>0){ echo $flag; }else{ echo "失落败了呀"; }}
7.终极布局的结果如下:
http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0000000000
然后访问得到如下结果:
精确答案:flag is SimCTF{huachuan_TdsWX}
参考链接:
https://www.cnblogs.com/ECJTUACM-873284962/p/7860788.html
https://blog.csdn.net/wy_97/article/details/76559354
六.WEB之false
题目地址:
http://www.shiyanbar.com/ctf/1787
解题链接:
http://ctf5.shiyanbar.com/web/false.php
题目描述:
题目显示如下图所示。
考点:PHP代码审计(PHP Code Audit)
题目解析:
1.首先随便输入内容,点击“Login”按钮。
http://ctf5.shiyanbar.com/web/false.php?name=1&password=2
2.点击“View the source code”获取源代码如下所示。
<?phpif (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>\';?>
它的含义是GET获取name和password,然后进行判断。
(1)if ($ _GET[‘name’] == $ _GET[‘password’]),用户名和密码相等,提示如下。
(2)else if (sha1($ _GET[‘name’]) === sha1($ _GET[‘password’])),用户名名和密码的sha1加密散列值相等,实行die函数。
(3)以上都不是返回“Invalid password”。
(4)未输入用户名和密码,提示“Login first”。
3.函数解释:
die()函数:停滞程序运行,输出内容sha1()函数:打算字符串 “Hello” 的 SHA-1 散列。默认的传入参数类型是字符串型isset()函数:检测变量是否已设置并且非 NULL。若变量不存在则返回 FALSE, 若变量存在且其值为NULL,也返回 FALSE ,若变量存在且值不为NULL,则返回 TURE。同时检讨多个变量时,每个单项都符合上一条哀求时才返回 TRUE,否则结果为 FALSE。参考官网:https://www.php.net/manual/zh/function.isset.php
<?php$a = array (\'test\' => 1, \'hello\' => NULL, \'pie\' => array(\'a\' => \'apple\'));var_dump(isset($a[\'test\'])); // TRUEvar_dump(isset($a[\'foo\'])); // FALSEvar_dump(isset($a[\'hello\'])); // FALSE// 键 \'hello\' 的值即是 NULL,以是被认为是未置值的。// 如果想检测 NULL 键值,可以试试下边的方法。var_dump(array_key_exists(\'hello\', $a)); // TRUE// Checking deeper array valuesvar_dump(isset($a[\'pie\'][\'a\'])); // TRUEvar_dump(isset($a[\'pie\'][\'b\'])); // FALSEvar_dump(isset($a[\'cake\'][\'a\'][\'b\'])); // FALSE?>
4.这里须要实行“if (sha1($ _GET[‘name’]) === sha1($ _GET[‘password’]))”语句。
重点:sha1()函数默认的传入参数类型是字符串型,也可以传入其他类型,使其返回值为false,如数组类型。再加上题目标题false,可以想到布局FALSE===FALSE拿到flag。
= =:比较运算符号 不会检讨条件式的表达式的类型 ===:恒等打算符 , 同时检讨表达式的值与类型。
布局网址:
http://ctf4.shiyanbar.com/web/false.php?name[]=1&password[]=2
5.name和password为数组,并且值不相等,提交即可得到flag。
精确结果:Flag: CTF{t3st_th3_Sha1}
七.WEB之天下武功唯快不破
题目地址:
http://www.shiyanbar.com/ctf/1854
解题链接:
http://ctf5.shiyanbar.com/web/10/10.php
题目描述:
题目显示如下图所示,提醒“You must do it as fast as you can!”。
考点:Python脚本
题目解析:
1.考试测验SQL注入都无反应,接着查看源代码,创造一个提示信息:
<!--pleasepostwhatyoufindwithparameter:key-->
2.根据题目内容,试图将网页链接速率放慢,这里可以采Burp Suite抓包,Proxy的intercept载入网页,并将抓到的信息发到repeater中Go一下,会创造一个FLAG值。另一种方法,Chrome浏览器审查网络状态。
3.在相应头中创造了FLAG,看起来像是一个Base64编码,考试测验在线解码。
但是该值每次天生的值是随机的。
FLAG:UDBTVF9USElTX1QwX0NINE5HRV9GTDRHOnZhbmRmQXp1Zg==
解码:P0ST_THIS_T0_CH4NGE_FL4G:vandfAzuf
FLAG:UDBTVF9USElTX1QwX0NINE5HRV9GTDRHOktsSVBLWmVkOQ==
解码:P0ST_THIS_T0_CH4NGE_FL4G:KlIPKZed9
4.回忆之前的注释(please post what you find with parameter:key)以及解密后的FLAG值,须要快速提交POST,故采取Python脚本实现。哈哈,又回到熟习的措辞。
# -- coding: utf8 --import requestsimport base64url = \'http://ctf5.shiyanbar.com/web/10/10.php\'s = requests.session()response = s.get(url)#获取FLAG值#FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GTDRHOnZhbmRmQXp1Zg==head = response.headersflag = base64.b64decode(head[\'FLAG\']).split(\':\')[1]print(flag)#设置POST要求pdata = {\'key\': flag}result = s.post(url=url, data=pdata)print(result.text)#相应
5.运行得到如下结果。
精确答案:CTF{Y0U_4R3_1NCR3D1BL3_F4ST!}