学习记录-显错注入(手工注入)

学习记录-显错注入

注:本文章只用于学术交流,不能违反国家安全法,用于不正当行为,不足之处,评论指出,谢谢大佬们

显错手工注入主要是指get传参型和post提交型网站,post注入主要是对表单的注入,对表单的参数的拼接达到注入的目的,如登陆注册。get注入主要是对get传参进行sql注入,通过比较不同的响应,确定某些信息,两者基本相同,步骤一样,存在少许不同。

一、get传参型注入流程:
1、判断是否可能存在注入点
有很多方法可以探测,常用or sleep()、’、-1、*1、/1、and 1=1、and 1=2,通过拼接查询语句,查看返回结果判断可能存在sql注入,现在网站很多方式查询,如?id=1,传参后可能id=“1”、id=‘1’、id=(‘1’)、id=(“1”)等,我们需要假设它是某种方式,然后一个一个去验证,正确的拼接查询,页面返回正确,错误的拼接,页面返回错误,可能就会出现sql注入
如:?id=1-1 ?id=1*1返回不同结果,可能存在sql注入
如:?id=1") and 1=1 %23(#通过url编码) 可以对id=(“1”)拼接 或
?id=1") and 1=2 %23返回不同结果,可能存在sql注入

2、判断目标字段数量及输出点
可以通过order by 1,2… 排序查看页面返回值,查看字段数
可以通过union select 1,2…(对应字段数)联合查询,判断输出点

3、猜测常见表及字段联合查询
union select 1,2,username from admin
假设输入点为3,猜测username 字段以及表admin 常见字段 id username password passwd 等,表名admin、user等,都可以尝试

4、猜测失败,只能去获取对应库、表、字段
这里对应mysql5.0版本,自带库information_Schema 含有两张表,一张tables 记录库与表,columns记录库与表与字段,可以通过两张表去联合查询字段,表的字段名都一样,库可以用database()函数获取当前库名,表名的字段名为table_name,字段的字段名column_name,库名的字段名为table_schema。个人建议先用tables确认其表明,然后去columns确认字段名,直接用columns,用库的对应信息查询太过繁杂。最好让页面出错然后通过联合查询避免干扰,如and 1=2 union select 1,2,table_name from information.tables where table_schema=database() limit1,1
可以通过limit 慢慢查看数据,也可group_concat全部打印出来,也可count()查看记录数量

5、查询出字段,通过联合查询直接就可以看记录
and 1=2 union select 1,2,username from admin limit1,1

二、post注入型操作流程:

a") or 1=1 order by 1/2/3… – 123 #确定字段数量,也是万能钥匙
a") and 1=2 union select 1,2,3… – 123 #确定输出点
a") and 1=2 union select 1,2,table_name from information_Schema.tables where table_schema=database() – 123 #通过mysql5.0版本上 自带库确定表名
a") and 1=2 union select 1,2,column_name from information_Schema.columns where table_Schema=database() and table_name=“xxx” limit 0,1 – qwe #通过库、表名找字段
a") and 1=2 union select 1,2,xxx from xxx limit 0,1 – qwe #查找数据

三、个人总结
本人经过授权注入某靶场,不是非法不是非法!遇到几个问题希望后人不要踩坑

get传参型:
1)表名columns,列名cilumn,没用s,切记
2)#不能直接在url加入,要被编译,可用%23代替,很多网站#被过滤了,用–+任意字符代替#也可以表示注释的意思
3)group_concat有时打印不出来,不允许输出,最保守的方法用limit查询
4)判断是否有注入点,很多关键字特殊符号可能会被过滤点,这个时候需要用其它方法代替特殊符号意义注入
5)sqlmap是一个不错的注入工具,通过多种不同的方法去尝试注入,不过工具都有局限性,用工具去注入能注入更好,不能就需要我们认真去分析,不要过多的依赖工具

post传参型:
1)post注入不会被url编译直接传参,所以可以直接使用#等等,如果#被屏蔽,使用-- 任意字符代替#
2)post注入闭合的是参数值,a") or 1=1 order by 1/2/3… – 123 如这个,就要用or 来保证sql正确性,如果是注入登录账号,无法保证a为正确的输入账号
3)group_concat 尽量少用,很多时候数据太多,打印出错,或者直接被屏蔽,建议用limit 一条条看,count函数可以查看记录条数
4)post注入实则是绕过了登录注册,直接返回登录后的界面

猜你喜欢

转载自blog.csdn.net/SmileAndFun/article/details/107180750