泰安网站设计公司,金华网站制作费用,广州网站建设哪家公司,网站开发硬件1.[LitCTF 2023]Follow me and hack me
1#xff09;进入题目环境#xff0c;提示get传参#xff0c;post传参 2#xff09;看看源码#xff0c;也没啥 3#xff09;直接用hackbar#xff0c;传入对应参数即可得到FLAG 3#xff09;但是扫描出来它后端还有东西#x…1.[LitCTF 2023]Follow me and hack me
1进入题目环境提示get传参post传参 2看看源码也没啥 3直接用hackbar传入对应参数即可得到FLAG 3但是扫描出来它后端还有东西 4打开原来是彩蛋 2.[BJDCTF 2020]easy_md5
1进入环境后不管输入什么
他只会修改passward 页面没有回显 没反应 2一顿输入操作后无果 只能通过url看到是get传参 用burp抓包看看 这里学一下关于md5($pass,true)的注入 关于这题
发现了这里它提示 select * from admin where passwordmd5($pass,true)
也就是通过注入来进行绕过 这里先看下php MD5函数的用法
32位16进制字符串的意思是将MD5加密得到的128 位长度的指纹信息以每4位为一组分为32组每组以转换为16进制进行转换得到一个32位的字符串。
总的来说就是我们平时看到的MD5加密的结果 16位原始二进制格式的字符串的意思是将128 位长度的指纹信息分组转化为16位的一个字符串然后两个字符为一组依照ACILL码转化为字符串。
也就是说就是当md5函数的第二个参数为true时该函数的输出是原始二进制格式会被作为字符串处理。
这里进行绕过就是需要构造一个语句使得sql语句永恒为真
像这样的话 select * from admin where password’’or’xxx 当or后面的值为true时即可完成注入
如此要达到注入。首先要有一个字符串这个字符串经过md5得到的16位原始二进制的字符串能帮我们实现sql注入。首先or这个字符串是必要的因为需要构造永恒为真的语句。同时为了配对原先sql语句里面有的单引号进行闭合
这里再看下ffifdyop的效果
?php
$str ffifdyop;
echo The string: .$str.br;
echo TRUE - Raw 16 character binary format:如下所示: .md5($str, TRUE).br;
echo FALSE - 32 character hex number: .md5($str).br;
?
运行后如下 使用ASCII码在线转换器看效果 3然后查看页面源代码发现需要传入两个参数
满足a与b的参数不同且两者的MD5相同就会返回正确的值
注意这里是弱比较
这里有两种方法 第一种采用数组传参 数组传参方式格式为num[]w num为参数(例如本题的a) w为传入的值 最终传入的值如下
?a[]1b[]2 因为md5不能处理数组md5 函数哈希数组会返回 NULL。从而达到两者相等进行绕过。 4这里只能使用数组传参了 之前的那个页面由于是弱比较 所以有两种方法可以进行MD5绕过
这里是强比较所以只能使用数组 不过这道题 数组可以通杀绕过这两层的MD5
Payload如下 post传参
param1[]2¶m2[]3 3.[ZJCTF 2019]NiZhuanSiWei
1 file_get_contents()函数用于读取文件中的内容并将其作为字符串返回。它通常用于读取文本文件或从远程URL获取内容。在本文中我们将介绍使用file_get_contents()函数来读取文件的基本方法。
语法
file_get_contents(filename, include_path, context, start, max_length)
参数
filename必需指定要读取的文件名称也可以是一个URL支持绝对路径和相对路径。
include_path可选如果设置了这个参数PHP将在include_path设置在php.ini中中查找文件。如果没有设置PHP将在当前脚本目录中查找文件。
context可选是一个HTTP请求的上下文选项数组通常在与文件读取和远程URL访问相关的情况下使用。
start可选规定从文件中的哪个位置开始读取以字节数表示。
max_length可选规定从文件中读取的最大字节数。
preg_match()函数、
语法 $pattern:要搜索的模式字符串类型。 $subject:输入字符串。 $matches:如果提供了参数matches它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本 $matches[1] 将包含第一个捕获子组匹配到的文本以此类推。 $flags可以被设置为以下标记值的组合PREG_UNMATCHED_AS_NULL、PREG_OFFSET_CAPTURE $offset可选参数 offset 用于 指定从目标字符串的某个位置开始搜索(单位是字节)。 返回值匹配次数。 它的值将是0次不匹配或1次因为preg_match()在第一次匹配后 将会停止匹配。发生错误preg_match()返回 FALSE。
2
$text是一个变量file_get_contents不能读取一个变量 3分析一下
有三个传入的变量名猜测最后进入else可以出flag
首先我们输入的t要满足twelcome to the zjctf
尝试使用data伪协议去给他赋值在一个文件里面。payload:/?textdata://text/plain,welcome to the zjctf
成功进入 4)然后需要用url语句读取文件内容 5)里面是一串basse64编码读取之后是一篇新的php文本 得到如下代码
?php class Flag{ //flag.php public $file; public function __tostring(){ if(isset($this-file)){ echo file_get_contents($this-file); echo br;return (U R SO CLOSE !///COME ON PLZ);} }
}
? 6useless.php里写的file_get_contents直接去读flag.php构造反序列化poc
?php
class Flag
{ //flag.phppublic $file flag.php;
}
$a new Flag();
echo urlencode(serialize($a));
7然后将得到的序列化语句传入查看源码即可得到flag 4.[LitCTF 2023]Ping
1进入环境就是一个只能ping ip地址的文本框这里也是直接ping一下127.0.0.1这个地址 2ping出来一堆东西没太看懂还是选择抓包试试 3直接修改command|cat /flag然后发包即可得到flag 4)其他解法
源码里有一个用于过滤的函数这是一段插在 html 中的 js 代码。
函数的大致作用是严格匹配 ipv4 地址比如 127.0.0.1 这种格式所以域名都不可以。被禁了 对于这种写在前端的验证函数不需要去研究如何绕过直接禁掉 js 代码的调用就好了浏览器应该都有这个功能。我是用火狐上的一个插件来禁用 js 代码 打开后此时再去输入命令发现没有任何过滤。
flag 在根目录下用 ls 不断查找每一级目录下的文件最后发现 flag 在根目录下。
直接查看根目录下的 flag
|cat /flag就能得到flag
5.[NSSCTF 2022 Spring Recruit]ezgame
1)打开环境后是一个游戏界面 2)看看源码没多大用扫出来几个网页也没多大用 3)f12查看源码到js出进行操作 4)打开覆盖新建一个空文件放进去然后点击目标文件点击覆盖右下角变紫色就成功然后修改分数 5改好后随便玩一下救出flag了