Web大学习0x1

说在前头

学学web,刚好有个新生赛,打一打

Http Header

  • 对于 GET 参数,在路径后加上?, 输入 basectf=w21c%2500me, (%00 表示空字符, 需要对他的百分号进行 URL 转义)
  • 对于 POST 参数, 先要将数据包改成 POST 形式, 我们需要先改谓词 GET -> POST, 再在请求头中加上 Content-Type: application/x-www-form-urlencoded, 再在请求头后空一行, 写上 Base=fl@g

请注意, BurpSuite 某些版本可能存在自动编码, 需要删除掉最后的空行, 否则可能会给服务端多发送一个空行

  • 对于 Cookie, Cookie 并不是需要 URL 编码, 所以这里我们可以直接传内容: Cookie: c00k13=i can't eat it
  • 而对于用户代理 (User-Agent) 这个请求头标识了你当前的浏览器信息, 他的内容改成 Base
  • 来源 (Referer) 也是一个请求头, 这个单词的拼写错误还有一段故事, 这个标识的我们从哪个地方发起的这个请求, 在超链接跳转时会带上源网址, 在一个页面发起 XHR 请求时会带上当前页面的内容, 我们这里要把他改成 Base
  • 关于你的 IP, 我们可以尝试通过一些请求头进行伪造, 可以参考: 这篇文章, 我们这里采用 X-Forwarded-For 进行伪造

PHP

  • eval(): 这个函数,要搞个system(); 去执行cmd命令,记得写分号.

md5绕过

1. 0E绕过

0E开头的字符串在参与比较的时候会被当成科学计数法,结果转换成0 。

常见0E开头的字符串:

1
2
3
4
5
6
7
8
9
10
QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s214587387a
s1091221200a

2. 数组绕过

MD5不能加密数组,传入参数会报错,但是会继续执行并且返回。

举个栗子:

image-20240831210728043

3. md5碰撞

如题

4. md5-sql 注入

ffifdyop 的MD5加密结果是 276f722736c95d99e921722cf9ed621c

经过MySQL编码后会变成’or’6xxx,使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密

SSRF

定义

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

涉及函数

curl_exec()

1
curl_exec()  curl_exec函数用于执行指定的cURL会话。

E.P.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
//初始化curl会话
$ch=curl_init($url);
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//// 抓取URL并把它传递给浏览器
$result=curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
echo ($result);
?>

这个时候我们就可以利用url参数,来获取内网的部分文件,直接写127.0.0.1:/flag.php这种即可,赋值给URL

file_get_contents()

1
2
3
file_get_contents() 
//file_get_content函数从用户指定的url获取内容,然后指定一个文件名进行保存,并展示给用户。
//file_put_content函数把一个字符串写入文件中。

E.P.

1
2
3
4
<?php
$url = $_GET['url'];;
echo file_get_contents($url);
?>

也是URL塞本地文件路径:http://127.0.0.1/xxxxx

fsockopen()

1
fsockopen()  fsockopen — 打开一个网络连接或者一个Unix套接字连接

E.P.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$host=$_GET['url'];
$fp = fsockopen("$host",80, $errno, $errstr,30);
if(!$fp){
echo "$errstr ($errno)<br />\n";
}else{
$out ="GET / HTTP/1.1\r\n";
$out .="Host: $host\r\n";
$out .="Connection: Close\r\n\r\n";
fwrite($fp, $out);
while(!feof($fp)){
echo fgets($fp,1024);
}
fclose($fp);
}
?>

涉及协议

file伪协议

1
2
3
4
5
6
7
8
file:// 协议:
条件 allow_url_fopen:off/on allow_url_include :off/on
作用:用于访问本地文件系统。在include()/require()等参数可控的情况下
如果导入非php文件也会被解析为php
用法:
1.file://[文件的绝对路径和文件名]
2.[文件的相对路径和文件名]
3.[http://网络路径和文件名]

Gopher协议

当探测内网或执行命令时需要发送 POST 请求,我们可以利用 gopher 协议

协议格式:gopher://<host>:<port>/<gopher-path>,这里的gopher-path就相当于是发送的请求数据包

dict协议