本次实践来自ctfshow
web21
描述:爆破什么的都是基操
Hint:考点tomcat 认证爆破之custom iterator使用 https://www.cnblogs.com/007NBqaq/p/13220297.html下载密码字典抓包,通过burpsuite暴力破解
开启代理,BP抓包,ctrl + R
送到中继器,发现如下,批准基础(Authorization Basic
)为base64加密结果,刚好对应我的输入 用户名:密码( admin:123
)
更改配置如下,然后start attack
web22
描述:域名也可以爆破的,试试爆破这个ctf.show的子域名
知识点:子域名爆破(此题不能爆破出来)在线子域名爆破,在子域名的title
上有时可以显示出来
这题flag已经给出了显示
web23
描述:还爆破?这么多代码,告辞!
观察php代码,得到flag要两个判断都进去
即:$token
第1,14,17相等;第(1+14+17)/1===第31位即可,方法有很多种
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}
方法一:python爆破
import requests
a = "3abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012456789"
for i in a:
for j in a:
url ="http://3fc6f96e-2053-4b6d-b9ad-fb57b16888ec.challenge.ctf.show/?token="+str(i)+str(j)
req = requests.get(url=url).text
if "ctfshow" in req:
print(req)
exit()
else:
print(url) # 当为3j时出现flag
打开apache
,将文件放置WWW文件下,直接本地+php文件名即可
方法二:php运行结果,方法有些像逆向了,用数字来进行MD5加密判断
<?php
for ($i=0;$i<1000;$i=$i+1){
$token=md5($i);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $i;
}}} ?> // 422
web24
描述:爆个🔨
Hint:参考PHP随机数的伪随机数 mt_srand(seed); 函数播种 Mersenne Twister 随机数生成器。seed,可选。规定播种值
知识点:同一个随机数种子,生成的随机数序列时一样的序列
脚本抛出后直接就是url/?r=1155388967
得到flag
// 题目描述
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){ // 上面随机数生成器已经固定了生成序列
echo $flag;
}
}
// 脚本 php,产生此种子下的随机数
<?php
mt_srand(372619038);
echo intval(mt_rand()); // 1155388967 这里php版本默认的为7.3.4
?>
web25
描述:爆个🔨,不爆了
推测,当r为0时,产生第一个随机数,我们要通过第一个随机数反推处其生成器,人工时不可能的,通过其它大佬处了解到php_mt_seed
的但求解处srand的seed
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand()); // r == 0时,出现第1次rand
if((!$rand)){ //rand == 0进入
if($_COOKIE['token']==(mt_rand()+mt_rand())){ // cookie == 第2,3次rand的和
echo $flag;
}
}
求解处seed显示如下,在请求时通过network中标头可知其php版本为7.3.11,再次逐一排查,找到为 seed为488802920
看php代码,srand的种子已经出来了,直接就是php脚本,跑出第2,3次的rand和
<?php
mt_srand(488802920);
echo mt_rand()."\n"; // 2054037753
echo mt_rand()+mt_rand(); // 800797921
放入hackbar
中配置如下,execute执行
/或者直接添加cookie,添加方式传送阵
还有另一种方法就是抓包,wp传送
web26
描述:这个可以爆
Hint:使用Chrome浏览器抓包,进行暴力破解密码
乍一看,里面室友默认值的
查看源代码
function check(){
$.ajax({
url:'checkdb.php',
type: 'POST',
dataType:'json',
data:{
'a':$('#a').val(),
'p':$('#p').val(),
'd':$('#d').val(),
'u':$('#u').val(),
'pass':$('#pass').val()
},
success:function(data){
alert(data['msg']);
},
error:function(data){
alert(data['msg']);
}
});
}
方法一:发现其对传参没有要求,直接传入,得到flag
方法二:对密码进行爆破,配置同web21,也可以采用数字爆破,不过时间可能有点长
web27
打开链接,CTFshow菜鸡学院 让我登录,自然没有学号和密码,想办法喽
下面有学生学籍查询信息,查询需要信息如下
录取名单下载下来如下图,发现仅仅差了中间的生日,我们可以直接数据进行爆破
输入姓名,身份证号随便输入18位的数字串即可,BP抓包,配置如下
开始爆破,出现以下结果,得到了该同学的身份证号
查询结果如下,即学号为02015237,密码为621022199002015237
登录后得到flag
web28
描述:大海捞针
Hint:通过暴力破解目录/0-100/0-100/看返回数据包
爆破的时候去掉2.txt 仅仅爆破目录即可
还是数字类型爆破,就不多写了
web
php的备份文件为,url最末加上/index.php~
或/index.php.bak
,下载文件