end的注入学习6(sqlite建表注入,getenv())

url_for()函数(flask)
1.url_for()作用:
(1)给指定的函数构造 URL。
(2)访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。

{{url_for.globals.[‘current.app’].config}}

get_flashed_messages函数
get_flashed_messages方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)
{{get_flashed_messages.globals.[‘current.app’].config}}

SQlite建表包注入
table_name和columns参数存在SQL注入,但是我们不知道flag的表名和列名。每个sqlite都有一个自动创建的库sqlite_master,里面保存了所有表名以及创建表时的create语句。我们可以从中获取到flag的表名和字段名。另一个知识点,在创建表时可以用as来复制另一个表中的数据。这里我们就可以用as select sql from sqlite_master来复制sqlite_master的sql字段。另一个问题,这里拼接的这一串字符是在as后面的,会影响后面的sql正常执行
在这里插入图片描述因为后面的$column也可控,所以这里可以用as "…"来把这一段干扰字符闭合到查询的别名里。双引号被过滤了,在sqlite中可以用中括号[]来代替。

table_name=aaa as select sql as[&columns[0][name]=]from sqlite_master;&columns[0][type]=2

函数Is_Valid()
功能:检查对象变量是否已经实例化,即实例变量的值是否是个有效的对象句柄。

语法:IsValid(objectname)

参数:objectname:要检查的对象名。

返回值:Boolean。如果指定对象已经创建了对此案实例,那么IsValid()函数返回True,否则返回FALSE。如果参数obejctname的值为NULL,IsValid()函数返回NULL。

substring函数
截取字符串

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		System.out.println(s.substring(0, 2));
		System.out.println(s.substring(2));
		sc.close();
	}
}

如果输入的为0123456
则输出:01
23456

mid函数
Mid是Visual Basic和Microsoft Excel中的一个字符串函数,作用是从一个字符串中截取出指定数量的字符。

语法

VB:

Mid(String As Variant, Start As Long, [Length As Variant]) As Variant
Mid$(String As String, Start As Long, [Length As Variant]) As String

Excel:

MID(text, start_num, num_chars)

VB6.0中

DimvAsString
v=Mid("VisualBasic",0,12)'提示实时错误5
v=Mid("VisualBasic",1,6)'v的值为"Visual"
v=Mid("VisualBasic",1,20)'v的值为"VisualBasic"
v=Mid("VisualBasic",8)'v的值为"asic"
v=Mid("VisualBasic",15)'v的值为空字符串
v=Mid("中文VB",2,2)'v的值为"文V"
v=Mid("1&1&",2,3)'v的值为"&1&"

JavaScript RegExp

定义:n$ 量词匹配任何结尾为 n 的字符串。

语法:new RegExp("n$")
直接量语法:/n$/
对字符串结尾的 "is" 进行全局搜索:

var str="Is this his";
var patt1=/is$/g;//搜索到的是his的is

超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

无参数函数RCE

超级全局变量$_ENV

$_ENV数组中的内容是在php解析器运行时,从php所在服务器中的环境变量转变为php全局变量的,可以认为它就是一个环境变量的集合

getenv()函数
getenv(name)所以我们可以利用这个函数获取一个名为name环境变量的值。如果该环境变量不存在,则返回 NULL。

#include <stdio.h>
#include <stdlib.h>

int main ()
{
   printf("PATH : %s\n", getenv("PATH"));
   printf("HOME : %s\n", getenv("HOME"));
   printf("ROOT : %s\n", getenv("ROOT"));

   return(0);
}
PATH : /sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
HOME : /
ROOT : (null)

array_rand()函数
array_rand() 函数返回数组中的一个随机键名,或者如果指定函数返回键名不只一个,则返回一个包含随机键名的数组。

语法:array_rand(array,number)

参数 描述
array 必需。规定数组。
number 可选。规定返回多少个随机的元素。

<?php
$a = array('a', "v", 's', 'b', 't');
var_dump(array_rand($a));
?>

sandbox> exited with status 0
int(2)

这样就可以取出一个单元,但是这里返回的是键,而不是值。如果想要得到值,就可以用一个函数先处理一下。这就是下面要说的这个函数了。

array_flip()函数
这个函数的作用是交换数组中的键和值,这样原来的键就变成值了,而原来的值就变成键了。

<?php
$a = array('a', "v", 's', 'b', 't');
var_dump(array_flip($a));
?>

运行结果:
array(5) {
 ["a"]=>
 int(0)
 ["v"]=>
 int(1)
 ["s"]=>
 int(2)
 ["b"]=>
 int(3)
 ["t"]=>
 int(4)
}
sandbox> exited with status 0
<?php
$a = array('a', "v", 's', 'b', 't');
for ($i=1; $i<10; $i++){
    var_dump(array_rand(array_flip($a)));
}
?>

结果:
string(1) "v"
string(1) "s"
string(1) "v"
string(1) "b"
string(1) "a"
string(1) "s"
string(1) "v"
string(1) "s"
string(1) "t"

current() 函数
定义:current() 函数返回数组中的当前元素的值。
每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。

语法:current(array)


    end() - 将内部指针指向数组中的最后一个元素,并输出。
    next() - 将内部指针指向数组中的下一个元素,并输出。
    prev() - 将内部指针指向数组中的上一个元素,并输出。
    reset() - 将内部指针指向数组中的第一个元素,并输出。
    each() - 返回当前元素的键名和键值,并将内部指针向前移动。

<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");

echo current($people) ; // Peter
echo "\n";
echo next($people) ;//Joe
echo "\n";
echo current($people);//Joe
echo "\n";
echo prev($people);//Peter
echo"\n";
echo end($people);//Cleveland
echo "\n";
echo prev($people);//Glenn
echo "\n";
echo current($people);//Glenn
echo "\n";
echo reset($people);//Peter
echo "\n";
echo next($people);//Joe
?> 


运行结果
Peter
Joe
Joe
Peter
Cleveland
Glenn
Glenn
Peter
Joe 
sandbox> exited with status 0

localeconv()函数
这个函数也会经常被用到,因为这个函数会返回一些字符组成的数组,通过使用localeconv()和current()等数组操作函数结合,就可以做到读出某个字符。

<?php echo current(localeconv());?>

运行结果: “  .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值