目录
9、在本机搭建演示环境的时候,如何抓本机(127.0.0.1或者localhost)的包
1、注入攻击的本质
注入攻击的本质,是把用户输入的数据当作代码执行。
2、SQL注入两个关键条件
(一)用户能够控制输入;
(二)原本程序要执行的代码,拼接了用户输入的数据。
3、GET和POST传参的区别
(一)GET和POST都是传参方式,区别在于GET是会显示在URL栏里的,POST不会;一个传输的数据有上限,一个可以传输比较大的数据。
(二)分类可以根据不同的类型分类,如果按照传参方式分类SQL注入:GET、POST、HEAD(COOKIE)
4、POST概述
(一)POST注入和普通的注入(联合查询)是没有区别的,它只是根据传参方式不同来判断类型。
(二)POST注入的核心在于框,有框就可以尝试下是否存在注入;
(三)GET可以直接传递参数,POST更多是存在于框,因为框代表着交互点,像登录框、查询框等各种一般都是通过POST进行传参的,当然这句话也不是必然,我们举一个baidu的例子;
像这样在URL栏可以看到的是GET传参;
各种框,一般来说都是POST传参,但不绝对,比如上面的baidu首页的例子就不是POST传参;
5、注释与万能密码
(一)注释:只有Mysql数据库#可以注释,但-- qwe基本上常见的数据库都可以用;在POST注释里#可以直接注释,但是在GET注释里不能够直接注释。
(二)万能密码:a' or 1=1 -- qwe,只有Mysql数据库#可以注释,但-- qwe基本上常见的数据库都可以用;
(三)万能密码可以用,说明一定是POST注入;万能密码不可以用,不代表它不是POST注入;
联合查询
这时候发现union select 1,2,3页面没有回显,union select的核心是把union select前面和后面的语句的结果拼在一起 ,正常情况下前面语句的优先级会高于后面的语句,所以说前面的语句有输出的时候,后面就没有东西输出了,所以我们要把or 1=1删掉,因为没有or 1=1,a这个字段是不存在的。
找输出点;
查表名,下面这两条语句都可以查到表名;
a' union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1 #
a' union select 2,3,table_name from information_schema.tables where table_schema=database() limit 0,1 #
查字段
通过order by查询到有3个字段,但是flag表里只有2个字段,所以只能查到2个;
获得flag;
a' union select 1,id,flag from flag limit 0,1 #
6、sqlmap做post注入有两种方法
(一)--form
先测试是否有传参,再去看这个页面上有哪些form表单传参;
查询到post注入和联合查询注入;
列库:--dbs;
(二)-r
有的时候做渗透测试,会遇到一种状况,比如说,这个注入点在你登陆之后才有,说明你不登陆不行,它这个注入点是在用户的修改密码那里有,或者用户的个人资料修改那里有,如果在那些地方有的话,就只能通过-r来做,因为访问那个页面需要有COOKIE,直接写-u或者--form是没有COOKIE的,但是你抓了个数据包用-r去跑,你的那个数据包是有COOKIE的,所以说它可以免去很多的问题,比如说你跑的是一个用户中心,你登陆了,你必须得登陆才能访问到那个页面,然后那个页面存在sql注入,你要跑出来要怎么跑呢,那就得用-r去抓一个数据包,来进行一个跑包。
首先随意输入密码账号;
跑到一个数据包;
在文件目录下新建一个txt;
将跑出的数据包复制到新建的txt里;
并且用*号标注出要跑的地方,比如说要跑username就加个*号,*代表你要跑这个地方,要记得保存;
然后在当前的目录里打开cmd,因为1.txt只有当前目录能访问到,其他的目录是访问不到的,毕竟没有加入环境变量;
特别注意,要把文件扩展名勾上,这样的避免出现扩展名重复输入的状况;
在文件的当前目录下打开的cmd;
输入语句:sqlmap.py -r +文件名,有时需要加上python运行环境的版本号;
python之所以要加上版本号,是因为重命名了python的名字,原来的名字统一都是python,但是有一些工具会出现python高版本运行不了的情况,这时候就用到python2.7版本,win10系统默认执行最高版本的python,所以要指定版本来运行,只能重命名python名字,以此区分开python版本;
可以直接将文件拖入cmd,也可以直接输入文件名,两种做法都可以;
检测到存在POST注入;
7、清除缓存
清除缓存可以输入--flush-session语句;