联合注入

vFREE
2021-04-01 / 0 评论 / 274 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年04月01日,已超过543天没有更新,若内容或图片失效,请留言反馈。

81192,祖国等你回家

---祖国人民


前面有将过数字型和字符型注入的判断方式,但是光判断是起不了很大的作用,既然确定了有sql注入,那肯定要查询数据的啦,此文通过联合注入,读取数据,现在的联合注入不是很多,因为现在各大网站几乎都上了waf了,会过滤掉关键字,但是不排除有个别的网站中有联合注入


联合注入,即再参数后面添加union select xxx

联合注入的前提条件是知道有多少个字段,因为联合注入的话,union select后面的字段要和原有的查询语句的一样,举个栗子

原语句:select username,password from admin where id=1;

联合注入:url/index.php?a=1 union select 1,2;

原语句:select id,username,password from admin where id=1;

联合注入:url/index.php?a=1 union select 1,2,3;

原语句:select 1,2,3,4,5,6,7,8 from admin where id=1;

联合注入:url/index.php?a=1 union select 1,2,3,4,5,6,7,8;

看出区别了没?也就是说原语句中要查询多少字段,联合就得查询多少字段,多了不行,少了也不行,select和from之间有多少个字段,union select 后面就跟多少个字段


那么如何去判断有多少个字段呢?

这里就得用到order by了,order by是关键字用于对结果集按照一个列或者多个列进行排序,简单来说就是可以判断有多少个字段,如果order by后面的数字小于字段数的话,就返回true

在我的某个表中,有八个字段

执行语句:select * from exp order by 1;  //返回正常

执行语句:select * from exp order by 4;  //返回正常

执行语句:select * from exp order by 10;  //返回ERROR

可以发现,当order by后面的数值大于原有的字段数值时,就会报错,在注入中,如果一个数值测试到一个不正常的页面的话,说明字段名小于数值,这样子就往小了去测试,比如说order by 10是返回不正常页面的话,就用小于10的数值去测试,直到返回正确的页面,prefect!!!


测试完字段之后,就可以构造payload进行注入了,假如通过order by测试出6返回正常的页面,那就可以构造

url/index.php?a=1 union select 1,2,3,4,5,6

这个字段可以测试出输出点在哪,哪个字段是可以输出内容的

输出了

红色圈圈就是能输出的信息,只要是能输出的注入,都要知道会输出在哪里,现在知道哪里可以输出内容,就可以将构造语句了,此处因为是2可以输出内容,所以,将2改成要注入的语句

将2改成database()

输出

可以知道当前使用的数据库是maoshe,继续构造注入

构造语句:111 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='maoshe')

输出表:

然后在构造111 union select 1,(select group_concat(column_name) from information_schema.columns where table_name='admin')

输出字段名

... ...


找到了有什么字段名,查内容简直就是唾手可得啦,无论是字符型还是数字型注入,都要搭配联合注入去获取更多数据信息

上面构造的语句中,如果你说初学者,看着不理解,在这里看 --->点我<---

 

注:部分图片源自于网络,如有侵权,请联系删除!!!谢谢

2

评论 (0)

取消