1.在文件lib/admin/database_admin.php的dorestore_action()方法吸收到GET参数db_dir后会利用front::scan($dir)函数获取该目录下的文件名,然后将目录名与文件名通报给 tdatabase::getInstance()->restoreTables()函数,跟进该函数。
2.在文件lib/table/tdatabase.php的restoreTables函数可以看到,file_get_contents()函数读取文件内容后进行了字符更换与字符分割,文件内容被赋值给变量sqls,然后赋值给sqls,然后赋值给q,终极通报到$this->query()函数实行,连续跟进该函数。
3.在文件lib/inc/table.php的query函数,sql语句被通报给了sql语句被通报给了this->db->query() 函数。

4.在文件lib/inc/dbmysqli.php的query函数,sql被通报给sql被通报给this->mysqli->query() 函数实行了,而在这个文件中可以看到 $this->mysqli 是mysqli 类实例化的工具。一起跟下来从文件读取内容到被实行SQL语句没有做任何安全处理。
5.从以上代码剖析可知该SQL注入须要合营文件上传。
6.首先上传一个文件,该文件写入 sql 语句,把稳这个文件须要是目录下的第一个文件,否则sql语句可能会查询失落败。将静态文件目录设置为 /,点击保存。这样可以担保目录下的第一个文件便是我们上传的。
上传文件利用 burpsuite 抓包将内容修正为sql注入语句。
7.触发SQL注入漏洞,这里实在也存在文件读取漏洞。
2.任意文件写入getshell
1.在文件lib/admin/table_admin.php的edit_action() 函数下,存在 file_put_contents 函数进行写入操作,文件名后缀默认为 php,POST的所有内容会在序列化之后放到 tagconfig变量,末了实行fileputcontents将tagconfig变量,末了实行fileputcontents将tag_config 变量内容写入 php 文件。虽然 POST 的内容有被过滤,但是 POST 的参数名没被过滤,也便是说我们可以通过参数名写入 webshell。
2.发送布局好的要求包写入 webshell,没有回显但是没有关系文件名是可预判的。
3.访问webshell
总结
SQL注入:从文件中获取SQL语句,如果文件名与内容可控那么就可能存在SQL注入。任意文件写入getshell:虽然POST参数的值有被过滤,但是由于利用了序列化函数导致仍旧可以通过参数名写入恶意代码。
末了
关注我-持续更新······
私我获取【网络安全学习资料·攻略】