bugku web知识点总结(1-12)

bugku web总结(1-12)

web1:

ctrl+u,查看页面源码,直接能看到flag,没啥好说的

web2:

让你做三位的算数题,但是答案只让你填一位,好在是前端验证,我们可以直接改,f12打开控制台,源码里有个maxlength变量,初始值设了个1,我们改成3,就可以正常输入了,输入正确答案,flag就有了

web3:

打开之后,给了一串源码

$what=$_GET['what']; //接受post过来的参数what,存到what里 
echo $what;     //打印 
if($what=='flag')     //如果值是flag 
echo 'flag{****}';//    打印flag

让我们GET传一个what参数,内容是flag的话,就告诉我们flag

web4:

与web3几乎完全相同,只是改成了post传参,打开hackbar,给一个post参数what=flag,拿到flag

web5:

同样是给了一串源码

$num=$_GET['num'];  //get传参
if(!is_numeric($num))    //is_numeric()函数判断参数是否为数字或数字字符串,如果是,返回ture
{
echo $num;
if($num==1)                //如果变量$num为1,打印flag
echo 'flag{**********}';
}

乍一看两次判断相悖,第一次要求num不是数字或数字字符串,第二次要求num=1,但细看的话,实际上两次判断并不相悖,第一次判断,我们传递的只要不是纯数字,就可以通过,第二次判断,$num==1,php是弱类型语言,数字和字符(串)的比较是存在类型转换的,对字符串来说是以开头的数字为准,所以在松散比较中,1"qid#@# ==1 是正确的,此处如果= =换成= = =,大概就不行了

下面是两个有关强弱类型和php语言的网站

https://www.zhihu.com/question/19918532
https://www.php.net/manual/zh/types.comparisons.php

web6:

一直弹窗,flag就在这里,当然知道flag在这里,不然我花金币进来干嘛,用火狐的话,会有个选项直接不让他弹窗,我们也可以用burp把这个页面拦下来,repeater给它重发一下,burp内嵌的页面显示可不会弹窗,直接查看响应报文,给了一行注释,内容是

KEY{J2sa42ahJK-HS11III}

用burp给它html解码,得到flag

web7:

你必须让它停下,定期刷新,大概一秒刷一次,题目告诉我们在熊猫图片停下,结果图还刷不出来,burp抓包,送到repeater,反复的发送,然后看响应报文,刷到某张图片的时候就能看到flag

在这里插入图片描述

web8:

题目叫文件包含,点进去给了一串源码

<?php
    include "flag.php"; //flag在flag.php里
    $a = @$_REQUEST['hello'];  //request方式接收参数hello
    eval( "var_dump($a);");    //eval将参数视为php语句执行,var_dump输出参数值,并返回参数的数据类								型
    show_source(__FILE__);     //show_source将文字增亮显示,__file__代表当前文件
?>

题目已经告诉了我们需要包含flag.php,另外已经知道参数为hello,另外还有eval函数可以将括号内的内容当做代码执行,所以此时我们直接构造payload为?hello=show_source(‘flag.php’),读取flag.php中的内容,此处不一定要利用show_source函数,其他读取函数例如print_r也可以

web9:

点进去之后同样是给了一串代码,还提示我们flag在变量中

flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";    //flag
highlight_file(__file__);   //高亮显示
if(isset($_GET['args'])){   //isset检查参数是否设置,如设置且不为空,则返回ture,否则返回false
    $args = $_GET['args'];   //GET方式传参args,放入变量$args
    if(!preg_match("/^\w+$/",$args)){    //执行正则表达式匹配,/^开始符,\w表示单词字符,即大小写字										//母和数字0-9,+代表多次匹配,$/结束。后面的args变量是被匹						//配的。相当于在args变量里寻找符合正则表达式的部分,若有则返回1,若没有则返回0
        die("args error!");   //输出args error,并退出当前脚本
    }
    eval("var_dump($$args);");  //同web8
}
?>

很显然,这里跟web8最大的不同是,由于preg_match匹配全字母及数字0-9,我们很显然没法直接用web8那样的方法包含文件名flag1.php,而且我们也用不了像show_source(),因为里面包含符号,但开头提示了我们flag在变量中,可能他定义了某些变量中含有flag1.php,我们此时需要利用到超全局变量$GLOBALS,他会引用全局作用域中可用的全部变量,所以我们只需要构造payload为/?args=GLOBALS即可获取flag。

web10:

头等舱,点开之后,什么也没有

在这里插入图片描述

f12打开控制台,看下head,或者burp抓包扔给repeater,再发一下,看响应,就能看到flag了。

web11:

点开以后是个黑页

在这里插入图片描述

使用dirsearch扫过之后,会拿到一个/shell.php页面,让输密码

在这里插入图片描述

打开burp,抓包丢给intruder模块,选用burp自带的密码集,爆破即可

web12:

点开之后,给了一个登录框

在这里插入图片描述

f12打开控制台,查看源码

在这里插入图片描述

注释的内容是一段base64加密文本dGVzdDEyMw==,解密后得到test123,估计是密码

burp丢给intruder,爆破用户名,会提示ip禁止访问

在这里插入图片描述

可以xff修改ip访问,在报文中加入X-Forwarded-For: 127.0.0.1,再次爆破可以得到用户名为admin,输入用户名密码,得到flag

web13:

点开之后,给了一个输入框,还提示看看源代码,右键查看源码

 
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));  //将p1和p2拼接后作为php语句执行

经过url解码,得到如下代码

function checkSubmit(){
    var a=document.getElementById("password");
    if("undefined"!=typeof a){
        if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
            return!0;           //如果我们传入的passwd参数等于这一串,返回1
        alert("Error");
        a.focus();
        return!1
    }
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
							//如果我们传入的passwd参数等于这一串,返回1
        alert("Error");
        a.focus();
        return!1
    }
}
document.getElementById("levelQuest").onsubmit=checkSubmit;

很显然,要两个if全部通过,才能拿到flag,我们把67d709b2b54aa2aa648cf6e87a7114f1复制到输入框,成功拿到flag

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值