首页
社区
课程
招聘
[原创]网站Inject语句原理
发表于: 2013-12-30 20:21 1874

[原创]网站Inject语句原理

2013-12-30 20:21
1874

其实这篇文章很早就写了,放在硬盘都快1年了吧。大二的时候忽然迷人了脚本入侵,最经常使用的录入Order by,Select x.x.x.x from xx,然后查出漏洞再继续XX.然而某天突然醒悟,这些小技巧每个人都会,是否真的懂原理了呢?本人做事比较喜欢研究原理,故有此文章---也借此希望能转正!(文笔不大好,敬请原谅!)
好了,废话多了点。进入正题!
                               1.Order by 判断字段的原理
au_id,au_lname,au_fname 对应 1,2,3。
[ORDER BY 3,2]等价与[ORDER BY au_fname,au_lname]。
order by 是用来排序的,可有多个关键字来升序后降序,假如指定关键字多于真实关键字来排序,是无法完成的。所以可以依次来判断,若返回正常了,则说明字段就是这么多
sql的测试:


            2.select 1,2,3,username,5,password,6 from admin原理
Select 后面加上数字应该是以值来填充表中行数。例如。

这里加上2,就是以2的值来填充表,表有几行就用2填充几行(这里有10行)

进正题:(表中若有s_number这个字段,那么就用s_number字段的值来填充,达到显示值得效果,因为s_number是一个实在的值,里面有他的属性)

证实:确实有s_number这个字段的存在,那么就会用他的值来填充。

那么:假如是admin表中的username和password,那么道理也是一样的
       3.union slect 1,2,3…….from admin 在网页中出现字段的位置原理:
这里自己模拟两个表news和admin
其中news表5个字段,admin 4个字段。


那么我们执行这个语句:


接着:
分析原理,为什么会这样呢?先看news的数据类型。
之前说过select后加数字是用这个数字来填充,自然是int类型。Union查询有两个特点:
union(或union all)两边的结果集的列数必须一致,相同位置的列类型必须一致
即数据类型不同是不能完成联合查询的。那么有什么用呢?怎么暴呢。

我们看实际:news表中第一列是int类型,没错,第二列是char,用2这个int去填充第二列是不行的,所以会报错。
那么我们知道,admin表的username和password肯定是char类型的。那么换上去看看。

成功了。
其实实际的就是查找news表中哪个是char类型,因为username和password都是char,所以找哪个位置是可以显示char类型,找到了自然可以用username和password的内容填充了。(实质判断可以显示出来的类型和位置)


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
忘了说:本人才疏学浅,刚入门,以上只是个人见解,若有不正确的地方,还望各位纠正!
2013-12-30 20:28
0
雪    币: 1933
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
牛牛牛牛牛牛牛牛牛牛牛牛牛牛
2013-12-30 21:09
0
游客
登录 | 注册 方可回帖
返回
//