PolarD&N WEB简单

swp

image

题目提示.swp文件

扩展:swp文件是一种临时缓存文件,主要用于在编辑器(如vim)中紧急保护未保存的工作内容。

第一次第一次产生的交换文件名为 .index.php.swp

再次意外退出后,将会产生名为 .index.php.swo 的交换文件

第三次产生的交换文件则为 .index.php.swn

访问/.index.php.swp

image

preg_match()最大回溯上限绕过

PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限pcre.backtrack_limit,回溯次数上限默认是100万,回溯次数超过了100万就可绕过preg_match()检测返回false

参考连接:https://www.leavesongs.com/PENETRATION/use-pcre-backtrack-limit-to-bypass-restrict.html>

构造python脚本

import requests

r = requests.post('http://782c9f39-add3-4db6-9682-49146d0b1fbd.www.polarctf.com:8090/', data={'xdmtql':'sys nb'+'a'*1000000})

print(r.text)

运行得到flag

image

 

简单rce

image

题目提示是rce(远程代码执行)

但是过滤了一些命令

image

这个eval()函数会把传入的字符串当做命令执行

在HackBar传入参数查看目录

因为preg_math()过滤了空格

可以使用IFS$9、<、>、<>、{,}、%20、${IFS}、%09等进行绕过     

ls%09/   查看根目录

passthru()可以直接将结果输出到浏览器

image

可以看到有个flag文件

image

进行读取得到flag

image

 

 

 

 

 

 

 

 

 

 

蜜雪冰城吉警店

image

提示:点到第9个隐藏款奶茶的单子,就会给你flag^^

尝试都点一下发现没用

查看源码

image

将任意一个id改成9

image

再点击刚刚改的那个按钮得到flag

image

 

召唤神龙

image

JSfuck编码

复制到控制台直接执行

image

 

seek flag

image

检查源码看到有个小提示

image

那应该是robots协议,也称爬虫协议、爬虫规则等

是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。但是,这个robots协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照

image

看样子只得到了一部分

再抓个包看看

image

有个Cookie:id=0

改成1看看

image

得到其他部分,按顺序拼接起来得到完整flag

 

jwt

image

先了解一下什么是JWT

JWT是一种基于 Token 的认证授权机制,本质上就是一组字串,通过( . )切分成三个为 Base64 编码的部分:

Header(头部) : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。Header 被 Base64Url 编码后成为 JWT 的第一部分。

Payload(载荷) : 用来存放实际需要传递的数据,包含声明(Claims),如sub(subject,主题)、jti(JWT ID)。Payload 被 Base64Url 编码后成为 JWT 的第二部分。

Signature(签名):服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。生成的签名会成为 JWT 的第三部分。

格式通常是这样的:xxxxx.yyyyy.zzzzz

 

注册个账号看看

注册的时候我习惯试一下admin

发现admin已经被注册了

image

登录返回的包有jwt

image

爆破出密钥是SYSA

image

然后用在线工具构造jwt

image

替换原来的jwt,看到响应包提示flag是admin的密码

image

登录成功后点击个人中心再抓一次包

将刚刚构造的jwt替换(不替换的话返回的还是自己注册的用户)

得到flag

image

image

 

login

image

在源码处发现有信息泄露

image

尝试登录一下,发现登录成功了

image

尝试增加数值,发现20200102~20200105回显刚好是flag

burp suite爆破

image

数值型爆破

image

将爆破后回显的结果按顺序拼接得到flag{dlcg}

 

iphone

image

点击Enter提示Sorry, the admin menu must be viewed from iphone or ipad;

image

User-Agent(用户代理)是一种用于识别网络浏览器、操作系统、渲染引擎和设备类型的字符串。当用户代理通过网络协议(如 HTTP)访问服务器时,它会将自身标识信息包含在请求头中发送给服务器

将User-Agent改为iphone再发送

image

image

 

浮生日记

image

随便写一个看到有回显

image

然后标题提示弹个窗看看,应该是XSS攻击

<script>alert(1)</script>

image

script被过滤了,双写绕过

<sscriptcript>alert(1)</sscriptcript>

image

没被过滤,但也没弹窗

查看源码,发现<script>alert(1)</script>在其他标签里面

image

尝试先闭合前面的标签

"><sscriptcript>alert(1)</sscriptcript>

弹窗成功

image

image

 

$$

image

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

image

得到flag

image

 

爆破

image

substr(string,start,length)函数返回字符串的一部分

intval() 函数用于获取变量的整数值

条件一:pass的值进行md5加密后第2个字符(索引1)、第15个字符(索引14)、第18个字符(索引17)必须相等

条件二:intval()!=0

脚本暴力搜索,算出pass值可以为422

import hashlib

for i in range(1000000):
    s = str(i)
    h = hashlib.md5(s.encode()).hexdigest()
    if h[1] == h[14] == h[17] and h[1].isdigit() and h[31] == '3':
        print(f"{s} -> {h}")
        break

得到flag

image

 

XFF

image

X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP

构造X-Forwarded_For:  IP     1.1.1.1

image

发送得到flag

image

 

rce1

image

ping 127.0.0.1看到能回显

image

| :cmd管道符,将一个命令的输出作为另一个命令的输入,从而实现命令的连接和组合

127.0.0.1|ls

image

127.0.0.1|cat%09fllllaaag.php

得到flag,但隐藏在源码里面

image

 

GET-POST

image

需要get传入id=1

post传入jljcxy=flag

image

得到flag

image

 

被黑掉的站

image

使用dirsearch扫描

image

发现两个可疑目录

image

/index.php.bak

/shell.php

image

image

使用上面的字典进行爆破

image

得到密码nikel和flag

image

image

 

签到题

image

还是dirsearch目录扫描

image

/data/看到是php代码

image

php伪协议参考:https://www.cnblogs.com/wjrblogs/p/12285202.html

/data?file=php://filter/convert.base64-encode/resource=/flag

/flag是直接查找根目录下的文件

但有时文件不在根目录下  需要用  ../  进行目录穿越

但这里 ../  被过滤,可以用双写进行绕过

..././       用一次跳一级目录

image

base64解码,得到flag

image

 

签到

image

可以看到提交的按钮无法点击

查看源码发现设置了disabled(禁用一个按钮)

删掉后就可以点击了

image

随便提交一个发现有个弹窗提示需要提交ilovejljcxy

image

但输入长度被限制了,手动将数值设置的大一点

image

然后提交ilovejljcxy得到flag

image

 

session文件包含

image

随便输入

image

伪协议读取action.php

action.php?file=php://filter/convert.base64-encode/resource=action.php

得到密文

image

base64解密是php代码,可以通过post传参

<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){
	$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>

session文件名的构造是sess_ + sessionid , sessionid在cookie中可以查看

存放session文件的位置一般默认为tmp

上传一句话木马

image

使用蚁剑连接

url地址:http://bd47670c-270a-4f98-a520-75a6035cf342.www.polarctf.com:8090/action.php?file=/tmp/sess_6liusorpf5oph8h1h28gitnee6

image

image

 

Don't touch me

image

image

鼠标悬停在Click Me时会出现左下角的链接

说明点击会访问3.php

image

不点击了,直接访问/3.php

image

image

 

robots

image

爬虫协议,在上面的seed flag有提到

直接访问/robots.txt,得到一个路径/fl0g.php

image

直接访问得到flag{2f37589152daf6f111b232ef4aea1304}

 

php very nice

image

看到 unserialize() 想到php反序列化

序列化:通过serialize()将变量转换为可保存或传输的字符串的过程;

反序列化:unserialize()在适当的时候把这个字符串再转化成原来的变量使用。

__destruct()是php序列化的一个魔术方法,在对象销毁之前自动调用

其他魔术方法如下:

魔术方法 触发条件
__construct() 类的构造函数,在类实例化对象时自动调用构造函数
__destruct() 类的析构函数,在对象销毁之前自动调用析构函数
__sleep() 在对象被序列化(使用 serialize() 函数)之前自动调用,可以在此方法中指定需要被序列化的属性,返回一个包含对象中所有应被序列化的变量名称的数组
__wakeup() 在对象被反序列化(使用 unserialize() 函数)之前自动调用,可以在此方法中重新初始化对象状态。
__set($property, $value) 当给一个对象的不存在或不可访问(private修饰)的属性赋值时自动调用,传递属性名和属性值作为参数。
__get($property) 当访问一个对象的不存在或不可访问的属性时自动调用,传递属性名作为参数。
__isset($property) 当对一个对象的不存在或不可访问的属性使用 isset() 或 empty() 函数时自动调用,传递属性名作为参数。
__unset($property) 当对一个对象的不存在或不可访问的属性使用 unset() 函数时自动调用,传递属性名作为参数。
__call($method, $arguments) 调用不存在或不可见的成员方法时,PHP会先调用__call()方法来存储方法名及其参数
__callStatic($method, $arguments) 当调用一个静态方法中不存在的方法时自动调用,传递方法名和参数数组作为参数。
__toString() 当使用echo或print输出对象将对象转化为字符串形式时,会调用__toString()方法。
__invoke() 当将一个对象作为函数进行调用时自动调用。
__clone() 当使用 clone 关键字复制一个对象时自动调用。
__debugInfo() 在使用 var_dump() 打印对象时自动调用,用于自定义对象的调试信息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解题思路:将要执行的命令传入$sys进行序列化

反序列化时调用__destruct()方法进行eval()命令执行

<?php
class Example{
    public $sys="system('ls');";
}
$a= new Example();
echo serialize($a);
?>

O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";}

 get传入?a=O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";}后得到目录

image

继续构造$sys变量命令执行读取flag.php

$sys="system('cat flag.php');"

image

 

ezupload

image

随便上传一个文件,提示只允许上传GIF图片

将一句话木马后缀改为 .gif 进行上传

上传时需要将文件后缀改为 .php 否则无法被执行

image

上传成功后用蚁剑连接

url地址:http://5000a230-35ae-4abe-93cf-45050a6f1c12.www.polarctf.com:8090/uploads/1.php(这题直接给存放路径,有些题目需要自己找)

密码:abc(自己设置的$_POST里的值)

image

 

cookie欺骗

image

F12将cookie的user值改为admin刷新即可

image

 

upload

image

需要上传图片

将一句话木马后缀改为jpg(其他图片格式也可以)进行上传

image

抓包把后缀改为.php,然后放行

image

看到返回的包中上传路径为/upload/65814upload.

php被过滤掉了

image

尝试将php双写绕过

image

没被过滤

用蚁剑连接即可

image

 

干正则

image

parse_str() 函数把查询字符串解析到变量中

preg_match('/flag\.php/', $ip) 目的是精确匹配字符串中是否包含 flag.php 这个子串,防止被类似flag_php 等绕过

\. 的作用是:让正则表达式匹配一个实际的点号字符 .,而不是任意字符

解题思路,第一个if为1,第二个if为0

payload:/?id=a[0]=www.polarctf.com&&cmd=||cat f\lag.php

最终flag藏在源代码中image

 

cool

image

可以参照上面那题 简单rce 

passthru()命令执行

image

$! 绕过preg_match()过滤

/?a=passthru("cat fl$!ag.txt");  或

/?a=passthru("cat fla*");

posted @ 2025-11-25 21:22  柠`郝  阅读(6)  评论(0)    收藏  举报