暴力破解
信息搜集补充 网页源码,burpsuite,robots.txt,phps源码泄露,扫源码,版本控制( git代码泄露(url/.git/index.php),url/.svn/),vim缓存(index.php.swp),cookie,使用nslookup命令查看DNS记录(nslookup -qt=txt) ,通过dns检查https://zijian.aliyun.com/,网上公开信息可能为管理员登陆密码,技术文档敏感信息,源码透漏重要信息,得到重要(editor)信息通过此功能遍历目录,邮箱查询地址,测试用的探针(/tz.php雅黑php探针),ping找真实ip地址,js脚本
web 21
进去显示需要登陆才可以,这时我们需要用户名密码爆破,我们先输入万能用户名密码登陆抓包。 这里的用户名密码进行了base64编码。将它发到爆破模块。添加需要攻击的区域。然后将payloads的payload type设置为Custom iterator然后添加字典。
position 1 position 2 position 3 我用的是给的密码字典 然后还要进行base64编码
除此之外还要排除Payload Encoding 最后可以设置下线程,进行爆破,之后找到200状态码即可。
web 23
使用了MD5加密,试试MD5部分爆破
<?php
error_reporting(0);
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;
}
}
}else{
highlight_file(__FILE__);
}
?>
写个php脚本跑起来。
<?php
$token='123';
while(true){
$t=$token;
$token=md5($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 "over!"."<br>";
echo $t;
break;
}
}
}
highlight_file(__FILE__);
?>
这样就可以跑出来成立的token并输出,然后使用输出的token值就可以得到flag。
web 24
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
这时一个伪随机数,这里使用了mt_srand(seed) 函数设定了一个seed 种子,有了种子之后,靠mt_rand() 生成随机数。但是从php 4.2.0 版本开始,随机数生成器自动播种,因此没有必要使用该函数播种,并且如果设置了seed 参数,那么生成的随机数就是伪随机数,意思就是每次生成的随机数是一样的。在本题中
<?php
mt_srand(372619038);
echo (mt_rand());
?>
生成的是1155388967,因此给r赋此值就得到了flag。这里要注意生成伪随机数的php版本。
web 25
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
他是先将flag进行MD5编码,再取前八位进行十进制转换。下面有$rand 我们可以利用它得到伪随机数。 这里*2结果并没有拿到flag,看了提示之后发现,使用函数mt_srand(seed) 确实得到的是伪随机数,但是再同一环境下同时拿多个随机数他们每一个是不一样的,虽然是固定的,所以我们在这里是不能相加的。所以我们拿不到seed 值的话很难拿到他的第二个伪随机数。
这里找大佬博客有一个php_mt_seed-PHP mt_rand() 种子破解程序https://www.openwall.com/php_mt_seed/ 建议放在linux跑 这里会跑出多个seed 我们要一个个去试。。。。最后拿到相加结果并添加到cookie的token里面。
这样就可以拿到为随机数。
web 26 这里是一个登陆页面,上面也有一些默认提供的信息。先试试抓包。返回错误 这时先试试密码破解。然后爆破成功,得到flag。
除此之外,还有一种解法!!!
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']);
}
});
}
查看网页源代码可以看到这样一段代码,可以看到一个url。搜索然后burp抓包。
这里说要进行post传参,并且要设置数据。 之后就会返回flag。
web 27 页面除有学号密码之外,还有登陆名单和学生学籍查询系统。
在录取名单上面有身份证的出生年月日进行了打码。 再看下面的信息查询系统可以判断是在这里爆破。 但是这里使用burpsuite抓包抓不到。。。尴尬。在火狐里面同样也找不到,但是网页源码有一个post请求页面。 这里可以像web 26一样构造post传参,也可以使用google浏览器,google浏览器可以抓到checkdb.php 页面 用burpsuite抓包,进行身份证号爆破。 设置时间爆破方式,设置线程,再进行爆破。 得到学号和默认密码,登陆得到flag。
web 28
访问之后直接跳到了别的目录,然后只有一个flag在哪。。。看了请求头和返回头只有个跳转信息,没有什么有用的信息。说的是大海捞针,因该是遍历一遍吧 那就爆破目录。 然后设置payload,payload1、payload2,两个一样 然后设置线程进行爆破。 得到falg。 更多文章
|