- 博客(45)
- 收藏
- 关注
原创 sqli-labs第五、六关详解
长度为8的时候,正常回显,所以数据库名为8位,接下来就是一个一个字母的去猜了,猜完数据库名猜表名,猜完表名猜字段名。用单引号闭合后,and 1=2无回显,说明字符型注入,接下来就要靠猜了,首先猜数据库长度是多少。首先看看是字符型注入还是数字型注入。第五关不同于前面四关,涉及到盲注。
2024-09-01 17:40:37 265
原创 sqli-libs第四关详解
找到users表了,接下来看看users表中有哪些字段,这里要注意,需要同时对数据库名和表名做限制,不然会出现很多其他表的字段。后面就是利用information_schema这个库查询信息了,先看看security这个数据库中有哪些表。有报错信息,含有括号,这时就应该想到,sql代码是("$id")这样写的了。直接采取闭合,判断字段数。4不行,那就是3个字段,再看看哪些地方可以显示数据,把数据库名和版本也搞出来。正常显示,说明是字符型注入,那么尝试单引号闭合。还是正常显示,尝试双引号闭合。
2024-09-01 17:26:10 419
原创 sql-libs第三关详细解答
数据库版本大于5,可以直接从information_schema这个数据库中获取表和字段名,先查询一下security中有哪些表。加了一个引号,发现报错信息中还存在括号,说明sql语句中有括号,那我们还要闭合括号。现在就好了,and 1=1正常,and 1=2不正常,那就开始注入,先查询字段数。网站中显示2和3,那就在2和3的地方输出我们想要的数据,先拿出数据库名和版本。table_schema:数据库名,where后面的数据库名称限制。一直测试到4不行,那就是3个字段,看看是哪个地方显示。
2024-09-01 17:14:03 596
原创 SQL注入之二次,加解密,DNS注入
2.这个语句是,利用concat将select 查询到的结果与一个dnslog的地址进行拼接,形成一个能够访问的域名;在注入的时候,对变量做了加密操作,比如说?id=1正常显示,但是代码对1进行了加密,这个时候想用?id=1 and 1=1去判断,就得把1 and 1=1整体按照网站的方式加密,再去注入。可以发现黄色背景的语句被注释掉了,也就是admin这个账户的密码被更改成了xxxxxx。当我修改密码时,我想把admin'#这个账户的密码从123456改成xxxxxx。比如在sqli-labs第24关。
2024-08-11 00:41:49 318
原创 SQL注入之查询方式及报错盲注
如果SQL注入没有回显,可能是SQL语句查询方式的问题导致的,所以需要用到相关的报错或盲注进行后续操作sql注入的查询方式:select,insert,update,delete比如在注册时,就需要用到insert的查询方式if,sleep第一个引号是闭合sql语句的单引号,最后的单引号也是闭合sql语句最后的单引号,这个语句用来强制性的报错!一般来说,select都有报错回显,但是insert只有告诉你语句有没有正常执行,没有错误原因。
2024-08-09 03:02:07 516
原创 sqli-labs第二关详解
接下来就是找出数据库名称和版本了,使用database()显示数据库名称,使用version()显示数据库版本。版本大于5.0可以使用Information_schema数据库查找表名列名信息。总结:第二关相比于第一关,属于数字型注入,没有引号的闭合,比较简单,但是大体思路是一样的。首先让id=1,正常显示,接着尝试and 1=1和and 1=2。通过表名查找列名,这里要注意需要同时对表名和数据库名做限制。and 1=1正常,and 1=2不正常。使用union语句,找出能显示信息的地方。
2024-08-08 12:13:16 204
原创 sqli-labs第一关详细解答
使用database()获取数据库名,并且使用version()获取版本,可以看到数据库版本在5.0以上,那就可以通过information_schema直接获取数据库security有哪些表名。这里可以看到居然有两个ID,是因为没有对数据库名称做限制,搜索到其他数据库的users表中的字段了,所以要对数据库做限制,加一个 and table_schema='security'就行了。使用--+注释掉limit 0,1后,使用order by 判断字段数,这里判断3个字段,正常显示,继续判断。
2024-08-07 20:09:28 318
原创 SQL注入之oracle,mongodDB注入
1.access网站的数据在网站目录下,以mdb形式存储。每个网站之间的数据库相互独立。这在一定程度上避免了跨库注入!2.access功能比较少,比如没有文件读写,没有记录信息表information_schema。因为access没有数据库名,也没有那些内置函数,所以表名列名只能靠猜测,或者使用字典工具。闭合,然后return ({title:1,content:'2。它的参数传递类似于JSON的键值对形式。1.使用穿山甲等工具直接读写key.txt。2.注入思路跟mysql一样,只是语句不同。
2024-08-07 18:00:15 255
原创 web安全-SQL注入的类型以及提交注入
GET只要网址后面带有参数就能接收到参数,不一定非要使用GET方法传递参数,使用POST方法传参,地址后有参数,GET一样能接收。如果不加引号,在访问时他会自动给你加上引号或者(),又或者是{},让你的注入语句比如and 1=1变成字符串的一部分,所以需要在注入的时候需要做闭合。那么放到sql语句中就是select * from users where id = '1' and '1' = '1' limit 0,1。作用:可以判断网站使用的请求方法,从而绕过waf的防护。数字,字符,搜索,JSON等。
2024-08-07 13:57:20 512
原创 WEB漏洞-SQL注入之MYSQL注入
比如:select * from users where id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='指定表名' and table_schema='指定数据库名'使用information_schema数据库,这个库中有schemata表记录了当前服务器的所有数据库名称,有tables记录当前数据库的所有表,有columns记录当前表的所有列。
2024-08-05 01:00:06 667
原创 web安全之简要sql注入
举例:select * from users where id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='这里写数据库名称'如果是mysql5.0以上,则存在information_schema,其中存储所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。如果是1=1,那么就是真且真,结果为真。
2024-08-01 03:05:27 1922
原创 web漏洞-知识点详解
危害情况:可以获取网站数据库中的数据,如果数据中有敏感信息,比如管理员账号密码,就可以登录后台漏洞等级:高危漏洞1.数字型注入如果是将数据库中的数据放到前端页面,就可以使用burp抓包,然后修改sql语句,比如说select name,email form member UNION select username,password from users,即可把管理员账号密码找到并放到前端页面。这一过程需要解决的问题有:a.抓取数据包b.找到数据库的信息,比如表名和字段名c.写出sql语句。
2024-07-31 02:33:14 317
原创 网安之信息收集一
想获得www.a.com的权限,就先从192.168.1.(1~265)搜索,拿到192.168.1.101服务器的权限,然后通过提权和内网渗透等其他方法,获取整个主机的权限,从而拿到www.a.com的权限。有些域名会修改,比如从org改为com,但是都能打开网站,而且是相似的网站。如果对方有waf,不要用扫描工具扫描,不然你的IP就会被封!渗透简单的站点,获取服务器的权限。比如通过渗透主站点的子目录下的站点,获取服务器权限。C段:同网段,不同服务器,不同站点。从搭建站点方面(找不同的程序分析)
2024-07-29 01:44:21 321
原创 CDN相关技术
所以可以通过搜索以前的DNS解析记录,找到真实IP地址。若目标存在CDN服务,安全测试时会优先访问节点的本地缓存内容,源站与节点不同,所以渗透和测试的对象只是一个虚拟的东西,不是真正的目标。国外地址请求:某些网站的CDN只考虑国内地区,如果使用国外的IP地址请求目标,就能找到真实IP地址。邮件服务查询:邮件服务器通常不会设置CDN,如果对方服务器给我们发送邮件,那么就可以根据邮件服务器IP查询出主站服务器的IP。检测ip是否不同,如果不同则是存在CDN服务,没有CDN服务的网站只有相同的ip。
2024-07-27 20:46:02 292
原创 1. 对于输入一个日期(年月日之间以一个空格间隔),形如`2017 6 15`,计算这一天是这一年的第几天并输出;2. 输出形式为“年-月-日是第X天”(其中 X 是你的计算结果)。
1. 对于输入一个日期(年月日之间以一个空格间隔),形如`2017 6 15`,计算这一天是这一年的第几天并输出;2. 输出形式为“年-月-日是第X天”(其中 X 是你的计算结果)。
2022-11-09 21:54:30 1018
原创 Java当中的字符串,字符串的比较,获取,转换,分割
split方法的参数其实是一个“正则表达式”,要注意如果按照英文句点“.”进行切分,必须写“//.”其实就是说:“程序当中所有的双引号字符串,都是String类的对象”(就算没有new,也照样是)将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。查找参数字符串在本字符串当中首次出现的索引位置,如果没有-1值。获取字符串当中含有的字符个数,拿到字符串长度。2. 双引号直接写的字符串在常量池当中,new的不在池当中。【2】正是因为字符串不可改变,所以字符串是可以共享使用的。
2022-09-18 22:28:27 138
原创 Arraylist当中的常用方法
备注:对于rraylist集合来说,add添加动作一定是成功的,所以返回值可用可不用。但是对于其他集合来说,add添加动作不一定成功。向集合当中添加元素,参数的类型和泛型一致。其他(byte) 首字母大写(Byte)从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素。如果希望向集合Arraylist当中存储基本类型数据,必须使用包装类。获取集合的尺寸长度,返回值是集合中包含的元素个数。
2022-09-15 22:34:09 130
原创 Java当中的匿名对象和常用的API
【2】对于Arraylist来说,有一个尖括号代表泛型,泛型就是装在集合当中的所有元素,全部都是统一的什么类型,泛型只能是引用类型,不能是基本类型,如果一定要集合当中的元素是整数,那么可以在尖括号当中写上Integer。【3】直接打印Arraylist集合,和数组不同,结果不是地址值,而是其中的内容,用中括号括起来,如果内容为空,那么打印出来的就是一个空的中括号[]:Arraylist 对象名 = new Arraylist();:匿名对象只能使用唯一的一次,下次再用不得不创建一个新对象。
2022-09-15 22:22:24 139
原创 Java当中的构造方法
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法,构造方法的格式如下。【4】 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么事情都不做。【1】 构造方法的名称必须和所在的类名称完全一样,就来拿大小写也要一样。【6】 构造方法也是可以进行重载的(方法名称相同,参数列表不同)【5】 一旦编写了至少一个构造方法,那么编译器将不再赠送。【2】 构造方法不要写返回值类型,连void都不写。public 类名称(参数类型 参数名称) {
2022-09-12 22:22:31 108
原创 Java当中的private,this关键字的作用和使用
但是可以间接访问private成员变量,就是定义一对getter/setter方法,方法名称必须叫setXxx或者是getXxx(如果是布尔型就用isXxx)命名规则。但是超出本类就不能使用。当方法的局部变量和类的成员变量重名的时候,根据”就近原则“优先使用局部变量。解决方案:用private关键字将需要保护的成员变量进行修饰。对于getter来说,不能有参数,返回值类型和成员变量对应。对于setter来说,不能有返回值,参数类型和成员变量对应。问题描述:定义person的年龄时,无法阻止不合理的数值。
2022-09-12 22:12:37 467
原创 Java当中的面向对象思想概述
可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该事物。:也就是指出需要使用的类,在什么位置(除java.lang意外,都需要导包)成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。:是一类事物的具体体现是类的一个实例,必然具备该类事物的属性和行为。通常情况下,一个类并不能直接使用,需要根据类创建一个对象才能使用。成员变量:如果没有赋值,会有默认值,规则和数组一样。成员变量:在方法的外部,直接写在类当中。:相当于数学中的二级结论,找一个JDK现有的类和方法。局部变量:在方法的内部。
2022-09-10 22:04:41 61
原创 Java当中的数组
思路:赋值调用方法,返回数组,用另一数组接受,逐一打印或遍历输出,方法名称当作数组,循环遍历输出。如果不确定数组当中的具体内容,用动态初始化,否则已经确定了具体的内容,用静态初始化。1. 栈(stack):存放的都是方法中的局部变量,方法的运行一定要在栈当中运行。使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。局部变量:方法的参数,或者是方法{ }内部的变量。数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。左侧数据类型:也就是数组,当中保存的数据,全部是统一的类型。
2022-09-09 22:10:27 138
原创 C语言入门知识
n(整数) 对实数,表示输出n位小数;对字符串,表示截取的字符个数。f 小数形式输出单,双精度实数。小数形式中,小数点前部分和后部分均可省略,如:2.0可写成2.,0.2可写成.2。:共15级,运算符 '()' 最高,为1级;运算符 ',' 最低,为15级。结合性:单目+,单目-:从右到左;*,\,%,+,- :从左到右。参与运算的两个数的二进制位对应相异或(对应位不同为1,相同为0)
2022-09-08 22:49:39 582
原创 Java当中的基本方法概述(非常全面)(定义格式,调用格式,参数,返回值,重载)
小括号当中有内容,当一个方法需要一些数据条件才能完成任务的时候,就是有参数。注意:此前学习的方法,返回值类型固定写作void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。7. 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。:return后面的“返回值”,必须和方法名称前面的“返回值类型”保持对应。但是对于无返回值的方法,只能使用单独调用,不能使用打印调用或者赋值调用。对于有返回值的方法,可以单独调用,打印调用或赋值调用。
2022-09-08 21:45:26 108
原创 Java当中的循环语句
【2】 for循环的变量在小括号当中定义,只有循环内部才可以使用。while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。【1】 如果条件判断从来没有满足过,那么for循环和while将会执行0次,但是do-while循环会执行至少一次。} while (条件判断);} while (条件判断);while (条件判断) {while (条件判断) {
2022-09-04 21:03:40 235
原创 Java当中的选择语句
匹配哪一个case就从哪一个位置向下执行,直到遇到break语句(case语句的穿透性)【3】 switch语句格式可以很灵活:前后顺序可颠倒,而且break语句还可以省略。【2】 switch后面小括号当中只能是下列数据类型。基本数据类型:byte/short/char/int。引用数据类型:String字符串,enum枚举。【1】 多个case后面的数值不可以重复。
2022-09-04 20:47:33 91
原创 Java当中的if语句
最后的语句体n+1是保底的,这个程序什么时候为true什么时候结束,之后作废。【1】 首先判断关系表达式看其结果是true还是false。【3】 如果是false就不执行语句体。【2】 如果是true就执行语句体。
2022-09-04 20:36:28 178
原创 Java当中的方法简介和编译器的优化
public static void 方法名称() {方法体}【1】 方法名称的命名规则和变量一样,使用小驼峰式【2】 方法体:也就是大括号当中可以包括任意条语句注意事项:1.方法定义的先后顺序无所谓2. 方法的定义不能产生嵌套包含关系3. 方法定义好了之后,不会自动执行的。如果想要执行,一定要进行方法的调用方法名称();编译器的两点优化:1.
2022-09-03 18:13:02 282
原创 Java当中的运算符
Java基础中介绍了四种运算符算术运算符运算符:进行特定操作的符号。例如:“+”表达式:用运算符连起来的式子叫做表达式。例如:20+5.四则运算:+ - * /对于一个整数的表达式来说,除法用的是整除,整数除以整数,结果仍然是整数。只看商,不看余数。如果要取余数,则需要取模(取余数):%:【1】只有对于整数的除法来说,取模运算符才有余数的意义【2】 一旦运算当中有不同类型的数据,那么结果将会是数据范围大的那种对于数值来说,那就是加法。...
2022-08-28 21:30:33 185
原创 Java当中的数据类型转换
就像是一个大水桶往一个小水桶当中倒水,只要大水桶中的水超过了小水桶的最大容量,水就会溢出来。比如一个int数字:88888888,超过了short类型的范围,那么如果强制类型转换把它转换成为short类型,就会发生数据溢出的现象。3. byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。比如现在有一个数字:1.10 是double类型的,如果现在强制类型转换把它变成int类型。格式:范围小的类型 范围小的变量 = (范围小的类型) 原本范围大的数据。..
2022-08-28 20:37:44 323
原创 Java中创建变量时的注意事项
3. 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。2. 对于float和long类型来说,字母后缀F和L不能丢掉。【作用域]:从定义变量的一行开始,一直到直接所属的大括号结束。4. 没有赋值的变量,不能直接使用.一定要赋值之后才能使用。6. 可以通过一个语句来创建多个变量,但是一般不推荐。1. 如果创建多个变量,那么变量的名称不可以。5. 变量使用不能超过作用域的范围。...
2022-08-28 20:18:36 409
原创 Java当中的基本数据类型和注意事项
其中,byte,short,int,long被称为整数型,long,double被称为浮点型。2.浮点数当中默认类型是double。如果一定要使用float类型,则需要加上一个后缀F。如果是整数,默认为int,如果一定要使用long类型,则需要加上一个后缀L。2.float,double这些浮点数,都只是近似值。3.科学计数法省空间,范围与它的内存占用不一定相关。1.字节数越高,数据月精确(如0.1与0.01)后缀不区分大小写,但是推荐使用大写字母。1.字符串不是基本类型,而是引用类型。...
2022-08-27 19:54:07 227
原创 Java中的常量分类和数据类型
1.字符串常量:凡是用双引号引起来的部分,叫做字符串常量。4.字符常量.凡是用单引号引起来的单个字符,就叫字符常量。①整数型:byte、short、int、long。引用数据类:字符串、数组、类、接口、Lambda。5.布尔常量:true、false(对.错)2.整数常量:直接写上的数字,没有小数点。3.浮点数常量:直接写上的数字,有小数点。6.空常量:null.代表没有任何数据。③浮点型:float、double。:在程序运行期间,固定不变的量。④布尔型:boolean。...
2022-08-27 14:15:27 328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人