filter-文件包含
例题:http://4.chinalover.sinaapp.com/web7/index.php
参考:https://blog.csdn.net/qq_35544379/article/details/78230629
发现有一个get file的的文件包含,但是要如何获取flag呢?一直想不通
悄咪咪地搜索了下write up
index.php进行base64加密
放入python解密
1 | s="PGh0bWw+CiAgICA8dGl0bGU+YXNkZjwvdGl0bGU+CiAgICAKPD9waHAKCWVycm9yX3JlcG9ydGluZygwKTsKCWlmKCEkX0dFVFtmaWxlXSl7ZWNobyAnPGEgaHJlZj0iLi9pbmRleC5waHA/ZmlsZT1zaG93LnBocCI+Y2xpY2sgbWU/IG5vPC9hPic7fQoJJGZpbGU9JF9HRVRbJ2ZpbGUnXTsKCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpewoJCWVjaG8gIk9oIG5vISI7CgkJZXhpdCgpOwoJfQoJaW5jbHVkZSgkZmlsZSk7IAovL2ZsYWc6bmN0ZntlZHVsY25pX2VsaWZfbGFjb2xfc2lfc2lodH0KCj8+CjwvaHRtbD4=" |
结果为:
1 | <html> |
strcmp漏洞
数组绕过
地址:(http://chinalover.sinaapp.com/web21/)
extract()变量覆盖
payload:pass[]=1
例题:http://chinalover.sinaapp.com/web18/
payload: pass=123&thepassword_123=123
当extract()函数从用户可以控制的数组中导出变量时,可能发生变量覆盖
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
<?php
extract($_POST);
if ($pass == $thepassword_123) { ?>
<div class="alert alert-success">
<code><?php echo $theflag; ?></code>
</div>
<?php } ?>
<?php } ?>
extract函数去导出post过去的变量,而后去和$thepassword_123去比较,用payload去覆盖$thepassword_123的值
参考:<白帽子讲web安全>第334页
intval
找到robots.txt发现hint
本来想着基本的sql绕过,但是1024的判断是啥用
最后发现intval取整数
payload:id=1024.1
http://chinalover.sinaapp.com/web11/
cookie
改为1
http://chinalover.sinaapp.com/web10/index.php
phpdecode
http://ctf.nuptzj.cn/challenges#php%20decode
1 | <?php |
没啥难度,echo一下就出来了
1 | <?php |
层层递进
例题:http://chinalover.sinaapp.com/web3/
刚开始点进去寻找一般的文件上传马之类的,后面看write up发现思路错了
发现一个页面
访问右键源码
藏在js里面也是脑洞清奇!
sql injection 3
例题:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1
参考:https://www.cnblogs.com/lcamry/articles/5625276.html
当页面的页码为gpk时。可能会造成宽字符注入。
通常页面使用这个函数addslashes对页面进行转义的时候。在’前面加一个/。但是当用户输入%df和/可以组合变成一个中文汉字”運”
先用order by查询有几列:
联合查询获得主要信息:
爆出当前数据库下面的tables:
然后获取列名
因为where colums=’xxx’又会被转义,所以使用16进制,到ctf4的时候发现有flag关键字:
伪装者
例题:(http://chinalover.sinaapp.com/web4/xxx.php)
可惜实验没效果,不知道是啥原因
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。
起名字真难
1 | <?php |
要使$number == ‘54975581388’
但是不能每一位是数字1
2
3
4
5
6
7
8
9<?php
if (“54975581388″==”0xccccccccc”){
echo “ok”;
}
else{
echo “no”;
}
?>
测试下进制比较的结果,转化为十六进制即可通过
例题http://chinalover.sinaapp.com/web12/index.php
ereg函数的%00截断
ereg读到%00的时候,就截止了
当ntf为数组时它的返回值不是FALSE
1 | if (isset ($_GET['nctf'])) { |
例题:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php
writeup1:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf=111%00%23biubiubiu
writeup2:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf[]=111
md5 collision,bypass again
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。
例题:
http://chinalover.sinaapp.com/web19/
http://chinalover.sinaapp.com/web17/index.php?a=QNKCDZO&b=240610708
1 | <?php |
以下值在md5加密后以0E开头
- QNKCDZO
- 240610708
- s878926199a
- s155964671a
- s214587387a
- s214587387a
以下值在sha1加密后以0E开头,sha1(str)
- sha1(‘aaroZmOk’)
- sha1(‘aaK1STfY’)
- sha1(‘aaO8zKZF’)
- sha1(‘aa3OFF9m’)