一些SQL注入文件上传RCE
CTFhub+NSSCTF
SQL注入
整数型
查询列数-order by 语句 要注意的是联合查询前后两条 select 语句查询数据的列数是相等的,故需要使用 order by 语句来判断注 入点sql语句查询的列数是多少

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

关于将id值设置为0或者负数的解释;
由于我们的语句是插入到原有语句后面,这样就会出现两个SQL语句同时执行,由于SQL查询默认返回一 行数据,所以我们插入的第二行语句的结果就不会被返回,只会返回原有的SQL语句的查询内容。 要让数据库查询我们插入的语句,需要让原有SQL语句查询为空。
接着查询表名

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’; 加引号

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

字符型注入
区别不大,需要先判断闭合符号
常见的有
1 | |
输入常用闭合符号使页面抛出sql语法错误的报错信息,根据报错信息可以
发现闭合符号
然后重复以上步骤
查库名

查表名
查数据 得到flag
报错注入

在有些时候虽然存在注入点能够执sql语句,但是页面中并没有打印sql执行结果的回显位置,但是如果页 面能够抛出报错的代码信息,就可以利用报错回显,来查看注入的sql语句的执行结果
updatexml 是 SQL 中的一个函数,主要用于处理和查询 XML 数据。它通常用于 MySQL 数据库,但它在安全方面也很敏感,尤其是在 SQL 注入攻击中被广泛利用。
📘 基本语法:
1 | |
- **
xml_target**:要操作的 XML 数据。 - **
xpath_expr**:XPath 表达式,用于定位 XML 节点。 - **
new_value**:替换的值。
示例:
1 | |
🔸 结果:
1 | |
1 | |
updatexml的第二个参数需要Xpath格式的字符串,是用/xxx/xxx/xxx/…这种格式,以~开头的内容不是 xml格式的语法,concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的 形式报出 该函数最大显示长度为32,超过长度可以配合substr、limit等函数来显示
+
借用updateexml函数查询库名 注意到数据末尾没有“~” 所以是没有显示完全的 改变substr后两个参数 得到全部库名

之后步骤一样


得到flag


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






但是太麻烦了于是转用sqlmap
1 | |
又查库名

1 | |

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


感觉是布尔盲注plus版 一个一个猜加个sleep判断对错
一样用burp爆破最后直接用了sqlmap

后面好像没截图
数据库结构
直接用sqlmap








空格绕过
绕过空格的方法很多,但是这些都不行
最后是用的/**/






文件上传漏洞
[SWPUCTF 2021 新生赛]easyupload1.0

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

上传成功,用蚁剑连接


也是成功找到了错误的flag

在网上搜wp发现在phpinfo
[SWPUCTF 2021 新生赛]easyupload2.0

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


能上传但是连接不上,好像是因为服务器的 MIME 类型限制,可能不允许 image/jpeg 执行 PHP
改了也不行,。。适用:服务器仅检查 MIME 类型,但不会实际解析内容时适用。
适用于基于前端 JavaScript 检查 MIME的绕过。
如果服务器 二次校验文件内容(如 fileinfo 函数),则可能无法绕过。
1-4 【实验】04-phtml绕过+代码审计-CSDN博客
如果你的文件是以phtml结尾的,它会把它当作php代码来执行。
太好了我们有救了


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 | |
/ 目录下的内容,类似 ls /。
注:
\特殊字符去掉功能性,单纯表示为字符串,而linux看到反斜线\会自动帮你去掉,正常执行命令
命令执行RCE及其绕过详细总结(各情景下的绕过)_命令执行绕过-CSDN博客
绕过就行了



