SQLite手工注入Getshell技巧
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的App中使用。
之前没有遇到过关于SQLite的注入,这次遇到一个在ASPX中使用SQLite数据库,并且存在注入。这篇文章将主要介绍一下从注入到获取WEBSHELL的过程和遇到的一些坑。
首先介绍一下SQLite的使用方法,然后在本地搭建环境以及利用注入获取WEBSHELL,最后将讲述在实际应用中遇到的问题以及如何解决(e.g.手工注入写shell)。
0x02 SQLite的使用
SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。在 Windows 上使用SQLite时访问 SQLite下载页面,从 Windows 区下载预编译的二进制文件。现在最新的为sqlite-tools-win32-x86-3190300.zip,下载下来后解压。我这里将其中的文件复制到D:\sqlite目录。
SQLite的语法和其他数据库差不多,只不过SQLite的数据库是一个单独的文件。SQLite创建数据库的方法有两种,一种是创建,另外一种是附加。
创建使用命令:sqlite3.exe 数据库文件名。例如创建一个名字为aa.db的数据库,使用命令:sqlite3.exe aa.db。
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的App中使用。
之前没有遇到过关于SQLite的注入,这次遇到一个在ASPX中使用SQLite数据库,并且存在注入。这篇文章将主要介绍一下从注入到获取WEBSHELL的过程和遇到的一些坑。
首先介绍一下SQLite的使用方法,然后在本地搭建环境以及利用注入获取WEBSHELL,最后将讲述在实际应用中遇到的问题以及如何解决(e.g.手工注入写shell)。
0x02 SQLite的使用
SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。在 Windows 上使用SQLite时访问 SQLite下载页面,从 Windows 区下载预编译的二进制文件。现在最新的为sqlite-tools-win32-x86-3190300.zip,下载下来后解压。我这里将其中的文件复制到D:\sqlite目录。
SQLite的语法和其他数据库差不多,只不过SQLite的数据库是一个单独的文件。SQLite创建数据库的方法有两种,一种是创建,另外一种是附加。
创建使用命令:sqlite3.exe 数据库文件名。例如创建一个名字为aa.db的数据库,使用命令:sqlite3.exe aa.db。
Metinfo 5.3.17 前台SQL注入漏洞分析
代码截的不全,只关注一下这几个操作:
$pseudo_url=$_SERVER[HTTP_X_REWRITE_URL]?$_SERVER[HTTP_X_REWRITE_URL]:$_SERVER[REQUEST_URI];: 从$_SERVER[HTTP_X_REWRITE_URL]中获取$pseudo_url变量
$dirs=explode('/',$pseudo_url);:将$pseudo_url变量用斜线分割成$dirs数组
$dir_dirname=$dirs[count($dirs)-2];:获取$dirs的倒数第二个元素作为$dir_dirname变量
$query="select * from $met_column where foldername='$dir_dirname' and lang='$lang' and (classtype='1' or releclass!='0') order by id asc";:$dir_dirname变量被拼接进SQL语句
所以,通过分析可知,$_SERVER[HTTP_X_REWRITE_URL]的一部分,最终被拼接进SQL语句。那么,如果Metinfo没有对HTTP头进行验证的情况下,将导致一个SQL注入漏洞。
代码截的不全,只关注一下这几个操作:
$pseudo_url=$_SERVER[HTTP_X_REWRITE_URL]?$_SERVER[HTTP_X_REWRITE_URL]:$_SERVER[REQUEST_URI];: 从$_SERVER[HTTP_X_REWRITE_URL]中获取$pseudo_url变量
$dirs=explode('/',$pseudo_url);:将$pseudo_url变量用斜线分割成$dirs数组
$dir_dirname=$dirs[count($dirs)-2];:获取$dirs的倒数第二个元素作为$dir_dirname变量
$query="select * from $met_column where foldername='$dir_dirname' and lang='$lang' and (classtype='1' or releclass!='0') order by id asc";:$dir_dirname变量被拼接进SQL语句
所以,通过分析可知,$_SERVER[HTTP_X_REWRITE_URL]的一部分,最终被拼接进SQL语句。那么,如果Metinfo没有对HTTP头进行验证的情况下,将导致一个SQL注入漏洞。
根据digest认证的认证过程,不难得出利用的流程
1
2
1. 访问backUpFromCasserver端点,服务器发送临时的质询码
2. 根据质询码计算出响应码并发送给服务端校验
而根据代码即可得出Payload的构造
1
Authorization: Digest username="admin", realm="VMC RESTful Web Services", nonce="xxxxx", uri="/cas/xxxxx", response="xxxxxx", qop=auth, nc=xxxx, cnonce="xxxxx", algorithm=xxxx
最终通过backUpFromCasserver端点即可获取Cookie身份信息
1
2
1. 访问backUpFromCasserver端点,服务器发送临时的质询码
2. 根据质询码计算出响应码并发送给服务端校验
而根据代码即可得出Payload的构造
1
Authorization: Digest username="admin", realm="VMC RESTful Web Services", nonce="xxxxx", uri="/cas/xxxxx", response="xxxxxx", qop=auth, nc=xxxx, cnonce="xxxxx", algorithm=xxxx
最终通过backUpFromCasserver端点即可获取Cookie身份信息