"""本人网安小白,此贴仅作为记录我个人测试的思路、总结以便后期复习;今后本着少就是多,慢就是快的方式一步一个脚印进行学习,把这个知识点学扎实了,再学另外一个知识点。费曼教授是不是曾经说过以教代学是最好的学习方式?有很多错点可圈可指,所以也请dalao指出不对的地方,所谓教他人的时候也是在稳固自身"""
未做严格排版,后面有时间了再来整理整理
边实践边写记录总结可以帮助大脑滤清思路,挺好的一种学习方式
# 边实践变记录后面还有55关卡,每通10关卡记录一贴
Ps:靶机链接:https://blog.csdn.net/qq_35258210/article/details/112465795
目录
(lesson17待填坑1:sql注入 group_concat 数据缺失)
(Lesson17待填坑2:在updatexml方法中查询字段里的值)
(lesson18待填坑:User-Agent与数据库交互原理:)
(lesson19待填坑:Referer与数据库交互原理:)
lesson11
1、验证漏洞是否存在:
在账号框输入一个单引号报错了,输入其他字符没有报错,根据报错提示,可以看到输入进去的单引号被左右两个单引号包裹,可以初步判定此处存在字符型注入漏洞
2、揣测原mysql语句:
select * from users where username='$username' and password='$password'
3、解题思路:
首先确认了此处存在字符类型注入点后,先输入单引号代替原来的单引号,再使用#把后面的语句注释掉,再在我们输入的单引号后面使用or关键字 or 1=1,因为前面单引号里没有内容数据库找不到所以会执行or 1=1永真语句
lesson12
1、验证漏洞是否存在:
在账号框输入一个单引号没有报错,输入双引号报错了,根据报错提示,可以看到输入进去的双引号被左右两个双引号包裹并且后面还有个括号,可以初步判定此处存在字符型注入漏洞。
2、揣测原mysql语句:
select * from users where username=("$username") and password=("$password")
3、解题思路:
首先确认了此处存在字符类型注入点后,先输入双引号再输入右边括号代替原来的双引号及括号,再使用#把后面的语句注释掉,在再我们输入的右括号后面使用or关键字 or 1=1,因为前面双引号里没有内容数据库找不到所以会执行or 1=1永真语句
lesson13
1、验证漏洞是否存在:
在账号框输入一个单引号报错了,输入其他字符没有任何显示,根据报错提示,可以看到输入进去的单引号被左右两个单引号包裹且还有一个右括号包裹,可以初步判定此处存在字符型注入漏洞
2、揣测原mysql语句:
select * from users where username=('$username') and password=('$password')
3、解题思路:
首先确认了此处存在字符类型注入点后,先输入单引号再输入右边括号代替原来的单引号及括号,再使用#把后面的语句注释掉,在再我们输入的右括号后面使用or关键字 or 1=1,因为前面单引号里没有内容数据库找不到所以会执行or 1=1永真语句;发现没有返回信息,只提示登录成功,没去看源码先不管了。
lesson14
这题的解法和lesson13一样,不过这题$username、$password是使用单引号包裹的并且没有括号,登录成功后也是没有回显;觉得奇怪看了下其他道友文章,发现构造下面语句可以有回显,仅有此等函数,看来还是学艺不精。
" and extractvalue(1,concat(0x7E,(select database()),0x7E)) #
0x7E是16进制的~
concat():用于将多个字符串连接成一个字符串
extractvalue(xml_frag, xpath_expr):使用XPath表示法从XML字符串中提取值
接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器)
这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容
Updatexml(xml_target, xpath_expr, new_xml):返回替换的XML片段
xml_target:需要操作的xml片段
xpath_expr:需要更新的xml路径(Xpath格式)
new_xml:更新后的内容
先附个链接回头复习
https://www.cnblogs.com/laoxiajiadeyun/p/10488731.html
lesson15
1、验证漏洞是否存在:输入任意字符没有回显。试着输入' or 1=1 # ,嗯哼还成了。。。。
2、揣测原mysql语句:
select * from users where username='$username' and password='$password'
3、解题思路:
这条发现没有回显,试着使用boolean注入,第一次输入 or 1=1时没考虑到闭合,结果当然是没登录成功的,后面想了想是不是没闭合的原因试着加个单引号闭合下,嗯哼,还真行了
Lesson16
1、验证漏洞是否存在:输入任意字符没有回显。试着输入15题的 ' or 1=1 # ,不出意料没成功,按照以往经验把单引号改成双引号试试,还是不行,那就在双引号后面加个右括号试试,我就嗯哼了。。。
2、揣测原mysql语句:
select * from users where username=("$username") and password=("$password")
3、解题思路:
发现没有回显,试着使用boolean注入,试着构造' or 1=1 # 不行,又试着把单引号改为双引号不行,再使用把双引号改为单引号在单引号后面加个右括号 不行,把单引号改双引号再在后面加右括号,登录成功;其实这里应该还有很多注入手法,学艺不精目前只能用boolean注入手法登录了
lesson17
1、验证漏洞是否存在:what? 嗯哼。。。吓老子一跳,你别欺负我英文不好。。。我可是有文字识别+google让你无处遁形。(此处应有步骤。)你你你,你不讲码德
没事,我们乖乖
2、揣测原mysql语句:
3、解题思路:
这题不太懂,没遇过这种题目为更新查询的,试了之前的测试思路没得行,审计源码的话php是我的盲点,so百度了下,发现使用updatexml这个函数可以使其格式语法错误报错回显获取想要的数据
使用到的函数:
group_concat():将多行数据合并成一行。好像可以配合order by 使用
获取当前存在数据库
' and updatexml(1,concat(0x7E,database(),0x7E),null) #
库名:security
获取当前数据库下的表名
' and updatexml(1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),1) #
目前拿下当前库的三个表名:referers,uagents,users
但是获取的表名少了一个,拿到表名后,回显的结果最前面有个逗号让我心存怀疑,于是上去数据库管理平台看了下的确少了一个
一时间找不到怎么解决缺失数据的问题,查了下说这个函数默认限制长度为1024,但是我这应该也没到1024?留着坑吧,后面找到解决方法了再来填坑
(lesson17待填坑1:sql注入 group_concat 数据缺失)
users,嗯,很敏感的一个表
查询到users表下有5个字段,但是但是前面依旧有个逗号,上去看了下,发现只显示其中username、password、id还有其他的没显示了,不太懂这个phpmyadmin的使用,不过有前面两个字段足够了
当前库:security下的users表下字段:username、password、id
嗯哼。。。拿到字段不会在updatexml中查询值了。。。。
(Lesson17待填坑2:在updatexml方法中查询字段里的值)
后续学习了这个知识点再来来填坑
lesson18
1、验证漏洞是否存在:这题条件比较苛刻,题目是要用请求头注入手法,要确保账号密码正确的前提下才能验证漏洞
2、揣测原mysql语句:嗯哼。。。猜不出
3、解题思路:
知识浅薄没啥思路,用burpsuite抓包后喵了瞄请求包头部,无从下手,只能网上找方法了,找到可以试试从User-Agent这个请求头下手,这个头域是验证客户端操作系统、浏览器版本等信息的,之前学爬虫时学过构造这个头域来伪装成浏览器,具体这里它怎么和数据库交互的原理不太懂了
(lesson18待填坑:User-Agent与数据库交互原理:)
后续学习了这个知识点再来来填坑
根据网上资料该头域可构造updatexml让其语法报错,爆出我们想要的数据
把原来的操作系统、浏览器版本信息等删除,构造这句
1',1,updatexml(1,concat(0x7e,database(),0x7e),1))#
lesson19
1、验证漏洞是否存在:
这题和上题一样的解法,是把注入点转移到了Referer,试着在路径最后加个单引号,报错了,可以初步判定此处存在请求头注入
(lesson19待填坑:Referer与数据库交互原理:)
后续学习了这个知识点再来来填坑
2、揣测原mysql语句:
嗯哼。。。
3、解题思路:
根据报错内容可以看到输入进去的单引号而且后面有右括号包括,那就再构造个右括号将它闭合,再用#把后面的给注释掉,解题语法构造和上题一样使用updataxml让其语法错误,爆出想要的内容
lesson20
1、验证漏洞是否存在:
这题根据题目是cookie注入首先输入username:admin,password:0,输入靶机上一个真实存在的账号密码,bp开始抓包点击登录抓到包后将包甩到request模块里分析,找到cookie删除原来的内容写上uname=’ (这里单引号前面也可以输入内容只要数据库里找不到的就行),进行漏洞验证发现提示了报错回显,初步判定此处可能存在注入
2、揣测原mysql语句:
嗯哼。。。这种提交请求头到库里交互的我还不会猜不出原sql语句
3、解题思路:
知道了是字符型漏洞后,在uname=后面构造个单引号闭合再使用#注释掉原来的单引号,这是可以使 order by 二分法判断字段长度经测试4提示没有,3没有报错,应该是3个字段了
知道是3个字段后,再使用联合查询union,即可获取想要的数据了,和普通的报错注入一样使用联合查询,只不过这题的注入是在cookie里
(lesson20待填坑:Cookie与数据库交互原理:)
后续学习了这个知识点再来来填坑